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