3 回答

TA貢獻1951條經(jīng)驗 獲得超3個贊
我最喜歡的道具vs狀態(tài)總結(jié)就在這里:react-guide大帽子提示給那些家伙。以下是該頁面的編輯版本:
道具與國家
tl; dr如果Component需要在某個時間點改變其中一個屬性,那么該屬性應(yīng)該是其狀態(tài)的一部分,否則它應(yīng)該只是該Component的prop。
道具
道具(屬性的簡稱)是Component的配置。它們是從上面接收的,并且就接收它們的組件而言是不可變的。組件不能更改其道具,但它負責將其子組件的道具放在一起。道具不必只是數(shù)據(jù) - 回調(diào)函數(shù)可以作為道具傳遞。
州
狀態(tài)是一個數(shù)據(jù)結(jié)構(gòu),在組件安裝時以默認值開始。它可能會隨著時間的推移而發(fā)生變化,主要是由于用戶事件。
組件在內(nèi)部管理自己的狀態(tài)。除了設(shè)置一個初始狀態(tài),它沒有擺弄其子女的狀態(tài)。您可以將狀態(tài)概念化為該組件的私有狀態(tài)。
改變道具和狀態(tài)
道具狀態(tài) 可以從父組件獲取初始值嗎?是的是的 父組件可以更改嗎?是的 可以在Component中設(shè)置默認值嗎?*是是 組件內(nèi)部可以更改嗎?不是的 可以為子組件設(shè)置初始值嗎?是的是的 可以改變子組件嗎?是的
請注意,從父級接收的props和state初始值都會覆蓋Component中定義的默認值。
這個組件應(yīng)該有狀態(tài)嗎?
國家是可選的。由于狀態(tài)增加了復雜性并降低了可預測性,因此優(yōu)選沒有狀態(tài)的組件。即使你在交互式應(yīng)用程序中顯然不能沒有狀態(tài),你應(yīng)該避免使用太多有狀態(tài)組件。
組件類型
無狀態(tài)組件只有道具,沒有狀態(tài)。除了render()函數(shù)之外沒有太多事情發(fā)生。他們的邏輯圍繞著他們收到的道具。這使得它們非常易于遵循和測試。
有狀態(tài)組件既有道具又有狀態(tài)。當組件必須保留某些狀態(tài)時,將使用這些。這是客戶端 - 服務(wù)器通信(XHR,Web套接字等),處理數(shù)據(jù)和響應(yīng)用戶事件的好地方。這些物流應(yīng)該封裝在適量的有狀態(tài)組件中,而所有可視化和格式化邏輯應(yīng)該向下游移動到許多無狀態(tài)組件中。
添加回答
舉報