React 數(shù)據(jù)流

在 React 中,數(shù)據(jù)是自頂而下單向流動的,即從父組件到子組件。這條原則讓組件之間的關(guān)系變得見得且可預(yù)測。

state 與 props 是 React 組件中最重要的概念。如果頂層組件初始化 props,那么 React 會向下遍歷整棵組件樹,重新嘗試渲染所有相關(guān)的子組件。state 只關(guān)心每個組件自己內(nèi)部的狀態(tài),這些狀態(tài)只能在組件內(nèi)變化。把組件看成一個函數(shù),那么它接收了 props 作為參數(shù),內(nèi)部由 state 作為函數(shù)的內(nèi)部參數(shù),返回一個 Virtual DOM 的實現(xiàn)。

state

state 是組件內(nèi)部狀態(tài),修改 state 的值修改需要通過 setState 方法,禁止直接修改 state,setState 是一個異步方法,修改完成會有一個回調(diào)方法,一個生命周期內(nèi)所有 setState 方法會合并統(tǒng)一操作。
不推薦過多的使用 state,當(dāng)數(shù)據(jù)更新同時需要更新界面的時候,才使用 state,并且盡量將 state 推到系統(tǒng)邊緣,統(tǒng)一管理 state。過多的內(nèi)部狀態(tài)會讓數(shù)據(jù)流混亂,程序變得難以維護。

props

props 是 properties 縮寫,是 React 用來讓組件之間相互聯(lián)系的一種機制。
React 的單向數(shù)據(jù)流,主要的流動管道就是 props,props 本身是不可變的。
注意:父組件傳遞的 props,作為子組件的 state,會產(chǎn)生引用對象影響問題,也就是賦值是一個淺復(fù)制,會導(dǎo)致 state 改變進而導(dǎo)致 父組件的 props 改變。

React 中有一個內(nèi)置的 prop -- children,代表子組件的集合。

ES6 方法定義的組件類中,可以通過增加類的 protTypes 屬性來定義 prop 規(guī)格,這不只是聲明,而且是一種限制,在運行時和靜態(tài)代碼檢查時,都可以根據(jù) propTypes 判斷外部是否正確地使用了組件的屬性。

import PropTypes from 'prop-types';

static propTypes = {
   data: PropTypes.object.isRequired,
   onPress: PropTypes.func,
};

對于帶上 isRequired 的屬性,表示使用時必須要指定,沒有帶上的則表示沒有也無所謂。
propTypes 支持基本類型,還支持枚舉和自定義類型。

prop 和 state 的對比

  • prop 用于定義外部接口,state用于紀錄內(nèi)部狀態(tài);
  • prop 的賦值在外部使用組件時,state 的賦值在組件內(nèi)部;
  • 組件不應(yīng)該改變 prop 的值,而 state 存在的目的就是讓組件來改變。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容