我在想,多少國家確實屬於商店,而不是組件?我曾經在一些地方看過,所有的州都應該住在商店裏面。商店真的屬於多少州?
會包括真正的組件特定的東西,如輸入值(提交之前),輸入驗證,如果一個模式是打開的,如果有東西被點擊等?
這裏有什麼最佳實踐?
我在想,多少國家確實屬於商店,而不是組件?我曾經在一些地方看過,所有的州都應該住在商店裏面。商店真的屬於多少州?
會包括真正的組件特定的東西,如輸入值(提交之前),輸入驗證,如果一個模式是打開的,如果有東西被點擊等?
這裏有什麼最佳實踐?
保持一切通量商店可以爲一些應用程序是,這有利於。
首先,您應該嘗試確定您的應用程序是否如此。
但當然很高興有某種特定的指導,也許只是一個心理指導,告訴你什麼時候保持組件內部的狀態,什麼時候不要。
我會用這些指南去:
- 是在這個狀態純粹UI相關的?那麼你可能不需要保存在商店裏。
- 此狀態是共享組件外的任何其他位置?如果不是,那麼不要把它放在商店裏。組件內部沒問題。
- 此狀態可以保存在URL中嗎?如果是這樣,那就不要把它放在商店裏;把它放在網址中!它可能是輸入或當前打開的選項卡的搜索查詢。
可能有例外,所有這些,但總的來說,我認爲這很好地對應於通量應用的獨到的見解。
P.S.另外我應該說,有很多談判說你應該(可能)將你的UI保存在一個不可變的狀態樹中。這就是如何將redux引入很多人的。我認爲你應該明白,雖然這是一個很好的概念,但它可以讓你保存/重放任何用戶交互,但它往往不是不必要的,這不是Flux的主要想法。而且,REDX本身是一個很好的通量工具,不會強制您保持商店中的所有UI狀態。
特定於組件的視圖狀態屬於該組件。涉及許多組件的應用程序狀態屬於商店。
這是值得商榷的。 例如,REDX提出了一種模式,其中ALL狀態屬於商店。我個人認爲在很多情況下這是不切實際的。當我有任何理由在商店中存儲例如按鈕的狀態時,這是非常罕見的。 但有時它可能是有利的。當你的整個應用程序是無狀態的時候,測試肯定更容易。
顯而易見的答案:
儘可能保持組件狀態的組件狀態(輸入值,模式打開/關閉,點擊東西,佈局,格式)。
商店內的應用特定狀態。其中包括但不限於您使用服務器來回發送的內容。
這就是說,有很多灰色地帶的位置:
一些經驗法則,我使用:
我認爲這些都是你指出的重要規則。我會補充說,「在關閉和重新打開應用程序時需要記住的狀態」可以(並非在所有情況下)也保存在URL中,有時甚至更希望將它保留在那裏而不是localStorage中。 – timetowonder
好點。但是如果這些數據在url中,嚴格來說數據不是狀態,但必須以某種方式作爲道具傳遞給你的反應樹。嚴格來說:數據不會被應用程序/記住,但必須保存在網址中。 – wintvelt
說實話,我不喜歡與流量模式。我之前使用助焊劑,並沒有深入到商店的狀態。我所做的就是使用flux來提供服務器/操作所需的數據,並讓我給出數據。當商店有這些數據時,我可以根據商店數據設置狀態。然而,像輸入值,切換活動類的狀態視圖,打開或關閉模式等微不足道的事情......我讓組件管理而不必經過一個動作。這使得更多的意義,並且是一個很好的模式 –