1.render函數(shù)對于props和state必須是純函數(shù)
render函數(shù)不能改變props和state的屬性进陡,如果在render中調(diào)用setState則會陷入死循環(huán)
問題容易出現(xiàn)在事件綁定中onClick={this.handleClick(event)}
嚷兔,這個函數(shù)就會直接執(zhí)行鲁驶,可能會修改state或props俱两,此時應(yīng)該使用箭頭函數(shù)onClick={()=>this.handleClick(event)}
2.受控組件和非受控組件
- 受控組件
每當(dāng)表單的狀態(tài)變化時,都會被寫入到組件的state中痛侍,消除了組件的局部狀態(tài)朝氓,由組件的state來統(tǒng)一管理 - 非受控組件
一個表單組件沒有value屬性,可以通過defaulValue設(shè)置默認值主届,需要使用ref props來訪問DOM元素赵哲,如果ref訪問的是自定義組件,則返回的是組件的實例君丁,可以通過findDOMNode來獲取DOM元素
受控組件必須要綁定change事件枫夺,否則無法將輸入值改變組件state
3.CSSModule
- 樣式默認局部
默認樣式是局部的,也就是
:local(.normal){
}
全局樣式可以定義為
:global(.btn){
}
:global{
}
- CSS Modules只會轉(zhuǎn)變類選擇器
4.React Router Redux
- 業(yè)務(wù)邏輯和路由狀態(tài)有很強的關(guān)聯(lián)關(guān)系绘闷,所以需要用redux來管理路由的狀態(tài)
- 對Router組件來說橡庞,Router組件是一個方法较坛,location作為參數(shù),返回的結(jié)果就是View視圖扒最,它會根據(jù)當(dāng)前url的不同丑勤,渲染出不同的組件
- 路由切換方式主要有pushState和hashChange兩種方式
- Redux中要改變數(shù)據(jù),必須分發(fā)一個action吧趣,在路由改變的時候法竞,也要分發(fā)一個相應(yīng)的action,由相應(yīng)的中間件來處理這一類的action再菊,同時改變store中的狀態(tài)