let arr0 = [7,8,9]
class WatchStore extends Component {
constructor(props) {
super(props);
this.state = {
arr: [4,5,6]
}
}
this.arr2 = [1,2,3]
}
上面三個(gè)數(shù)組定義的方法,該用哪種方法?
數(shù)組數(shù)據(jù)不需要渲染的,只做暫時(shí)緩存對比新數(shù)據(jù)使用
謝邀!
感謝 @Getaj 、 @lixuejiang 、@dablwow80 等所有參與問題討論的朋友!該問題確實(shí)是一個(gè)好問題,忍不住給作者點(diǎn)個(gè)贊!經(jīng)過一番折騰,我大致說一下我的收獲:
this.state方式
React 把組件看成是一個(gè)狀態(tài)機(jī)(State Machines)。通過與用戶的交互,實(shí)現(xiàn)不同狀態(tài),然后渲染 UI,讓用戶界面和數(shù)據(jù)保持一致。對于渲染UI,state是十分有用的。反過來講,如果不需要渲染UI,就不應(yīng)該用state,如果state并不是用于渲染UI,雖然在這里使用并沒有錯(cuò),但我們是把state和UI聯(lián)系在一起的,這也算得上語義問題!至于this.state到底會不會觸發(fā)render函數(shù)或diff算法?答案是不會的,除非你調(diào)用setState()和forceUpdate()。
let arr0 和 this.arr2 方法
從變量使用經(jīng)驗(yàn)法則來說,變量應(yīng)該限制在最窄的范圍內(nèi)。如果變量在更大的范圍內(nèi)聲明, 例如let arr0在類之外聲明, 但不在類之外使用, 則就不應(yīng)該在類之外聲明它,這是最好的做法,因?yàn)樗瞬槐匾姆秶廴?/code>,雖然這種方式在這里一點(diǎn)錯(cuò)沒有, 至少這是一個(gè)良好的編碼習(xí)慣。因此, 選擇在constructor使用this.arr2將是最合適的,這樣寫法表示該變量屬于組件本身, 而不是狀態(tài), 并將其限制在盡可能最窄的范圍內(nèi)。
參考鏈接:
https://reactjs.org/docs/reac...
https://reactjs.org/docs/reac...
https://stackoverflow.com/que...
謝邀,一直以來我都沒考慮過這個(gè)問題
1.關(guān)于放在state里的常量是不是會發(fā)生re-render,我認(rèn)為是不會的,所以更不會產(chǎn)生diff,react重新渲染的前提是state有更新,也就是調(diào)用了setState方法,而且對componentShouldUpdate沒做處理的情況下,才會觸發(fā)re-render,而如果這里用的是常量,那么應(yīng)該是不會有在代碼里進(jìn)行setState的操作的,所以對性能應(yīng)該不會有什么影響
2.我理解的state里的數(shù)據(jù)是要和view關(guān)聯(lián)的,因?yàn)閞eact的思想是view=render(state),如果你的數(shù)據(jù)不需要在view里顯示,那么沒必要放到state里
首先,因?yàn)閿?shù)組與組件render無關(guān),所以不應(yīng)該放到組件state里。
其次,數(shù)組變量是用于緩存中間變量,屬于組件實(shí)例對象的私有屬性,而不是常量,也不是所有實(shí)例對象的共享變量,如果數(shù)組放在class外部定義,是會被所有class實(shí)例對象所共享的,任何一個(gè)實(shí)例對象都可以修改這個(gè)數(shù)組變量。這顯然也符合你的需求。
綜上,使用this.arr定義數(shù)組最合適。
另外,可以參考我的這篇文章:https://segmentfault.com/a/11...,有介紹Props、State和組件的普通屬性的用法。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。