react使用要點筆記
使用要點
1.react元素都是不可變的。當元素建立後無法改變其內容或者屬性。目前更新介面的唯一變法是建立一個新元素,然後傳入ReactDom.render()方法。
2.react只會更新必要的部分。react dom首先會比較內容元素內容先後的不同,而在渲染過程中只會更新改變了的部分。
3.jsx可以使用javascript表示式和註釋,兩者都需要寫在花括號中,但是不能使用ifelse語句,可使用三元運算子來代替。(jsx就是javascript)
4.react使用組建的時候,自定義組建必須以大寫字母開頭,組建類只能包含一個頂層標籤,新增屬性時,class要寫成className,for要寫成htmlFor,因為這兩個是javascript保留字。
5.掛載和解除安裝--->定時器被生成和清除
6.react資料單項流動,組建獨立
7.react中state和props區別在於state是根據使用者互動來改變,props是不可變的。
8.react中props驗證器列表(React.PropTypes 在 React v15.5 版本後已經移到了 prop-types 庫。)
MyComponent.propTypes={
//可以宣告 prop 為指定的 JS 基本資料型別,預設情況,這些資料是可選的
optionalArray:React.PropTypes.array,
optionalBool:React.PropTypes.bool,
optionalFunc:React.PropTypes.func,
optionalNumber:React.PropTypes.number,
optionalObject:React.PropTypes.object,
optionalString:React.PropTypes.string,
//可以被渲染的物件 numbers, strings, elements 或 array
optionalNode:React.PropTypes.node,
//React 元素
optionalElement:React.PropTypes.element,
//用 JS 的 instanceof 操作符宣告 prop 為類的例項。
optionalMessage:React.PropTypes.instanceOf(Message),
//用 enum 來限制 prop 只接受指定的值。
optionalEnum:React.PropTypes.oneOf(['News','Photos']),
//可以是多個物件型別中的一個
optionalUnion:React.PropTypes.oneOfType([React.PropTypes.string,React.PropTypes.number,React.PropTypes.instanceOf(Message)]),
//指定型別組成的陣列
optionalArrayOf:React.PropTypes.arrayOf(React.PropTypes.number),
//指定型別的屬性構成的物件
optionalObjectOf:React.PropTypes.objectOf(React.PropTypes.number),
//特定 shape 引數的物件
optionalObjectWithShape:React.PropTypes.shape({color:React.PropTypes.string,fontSize:React.PropTypes.number}),
//任意型別加上 `isRequired` 來使 prop 不可空。
requiredFunc:React.PropTypes.func.isRequired,
//不可空的任意型別
requiredAny:React.PropTypes.any.isRequired,
//自定義驗證器。如果驗證失敗需要返回一個 Error 物件。不要直接使用 `console.warn` 或拋異常,因為這樣 `oneOfType` 會失效。
customProp:function(props,propName,componentName){
if(!/matchme/.test(props[propName])){
returnnewError('Validation failed!'); } } } }
9.react事件採用駝峰命名法,事件必須在建構函式中繫結才能在建構函式中通過this去訪問相關屬性。通常有兩種解決方式1.屬性初始化語法.2.在回撥函式中使用箭頭函式(通常不建議使用這種方式繫結,當這個回掉函式作為屬性值傳入低階元件,這些元件可能進行額外的重新渲染,當避免這類效能問題)。
10.react事件傳入引數,引數放在event前面,回掉函式引數放在event後面,繫結方式回撥函式處使用 bind或者箭頭函式
運算子&& ---在javascript中 true && expression 總是返回expression, false&&expression總是返回false。
11.阻止組建渲染返回null即可實現,返回null並不會影響該元件生命週期方法的回掉。初始化資料簡單的說就是清理殘餘資料。
13. 如果列表可以進行重新排序,不建議使用索引進行排序,因為這樣會導致渲染很慢。
14.key應該儲存在組建上,而不是組建中的元素上<=>在map內部呼叫元素時,切記在每個元素上面加上一個獨一無二的key。
15.key在兄弟元素之間應該唯一,並非全域性唯一。
16.key會作為給react提示,但不會傳遞給組建,如果使用和key相同值,將其作為屬性傳遞。
17.jsx中可以出現任何表示式,但是{} 中不能出現var,const,let等這種關鍵字,表示式之間要用都好隔開。
18.setState是react中事件處理函式中和請求回撥函式中觸發UI更新的主要方法。
19.replaceState只會寶妞nextState中狀態,原state不再nextState中的狀態會全部被刪除。(replaceProps同理)
20.forceUpdate(強制更新)應當少使用,儘量通過設定狀態或者屬性並由react觸發render()呼叫。
21.如果組建以及掛載到dom中,findDomNode本地瀏覽器dom中的元素,如果組建返回null或者false,那麼該方法也返回null。
22.isMounted(組建掛載狀態)可以使用該方法保證setState和forceUpdate在非同步場景下呼叫不會出錯。
23.當使用非同步載入資料時,在元件解除安裝前使用 componentWillUnmount 來取消未完成的請求。