2016-04-27 34 views
1

我在想,多少國家確實屬於商店,而不是組件?我曾經在一些地方看過,所有的州都應該住在商店裏面。商店真的屬於多少州?

會包括真正的組件特定的東西,如輸入值(提交之前),輸入驗證,如果一個模式是打開的,如果有東西被點擊等?

這裏有什麼最佳實踐?

+0

說實話,我不喜歡與流量模式。我之前使用助焊劑,並沒有深入到商店的狀態。我所做的就是使用flux來提供服務器/操作所需的數據,並讓我給出數據。當商店有這些數據時,我可以根據商店數據設置狀態。然而,像輸入值,切換活動類的狀態視圖,打開或關閉模式等微不足道的事情......我讓組件管理而不必經過一個動作。這使得更多的意義,並且是一個很好的模式 –

回答

0

保持一切通量商店可以一些應用程序是,這有利於。

首先,您應該嘗試確定您的應用程序是否如此。

  1. 如果你不確定一個狀態是否屬於一個通量存儲器,那麼它最有可能不是。
  2. You'll know when you need flux。當你達到了這種應用程序架構是否適合你的理解水平時,你也可能知道你最初的問題的答案。

但當然很高興有某種特定的指導,也許只是一個心理指導,告訴你什麼時候保持組件內部的狀態,什麼時候不要。

我會用這些指南去:

  • 是在這個狀態純粹UI相關的?那麼你可能不需要保存在商店裏。
  • 此狀態是共享組件外的任何其他位置?如果不是,那麼不要把它放在商店裏。組件內部沒問題。
  • 此狀態可以保存在URL中嗎?如果是這樣,那就不要把它放在商店裏;把它放在網址中!它可能是輸入或當前打開的選項卡的搜索查詢。

可能有例外,所有這些,但總的來說,我認爲這很好地對應於通量應用的獨到的見解。


P.S.另外我應該說,有很多談判說你應該(可能)將你的UI保存在一個不可變的狀態樹中。這就是如何將redux引入很多人的。我認爲你應該明白,雖然這是一個很好的概念,但它可以讓你保存/重放任何用戶交互,但它往往不是不必要的,這不是Flux的主要想法。而且,REDX本身是一個很好的通量工具,不會強制您保持商店中的所有UI狀態。

0

特定於組件的視圖狀態屬於該組件。涉及許多組件的應用程序狀態屬於商店。

0

這是值得商榷的。 例如,REDX提出了一種模式,其中ALL狀態屬於商店。我個人認爲在很多情況下這是不切實際的。當我有任何理由在商店中存儲例如按鈕的狀態時,這是非常罕見的。 但有時它可能是有利的。當你的整個應用程序是無狀態的時候,測試肯定更容易。

2

顯而易見的答案:
儘可能保持組件狀態的組件狀態(輸入值,模式打開/關閉,點擊東西,佈局,格式)。
商店內的應用特定狀態。其中包括但不限於您使用服務器來回發送的內容。

這就是說,有很多灰色地帶的位置:

  • 應用到搜索列表組件狀態過濾器?或應用程序狀態(如果您保存過濾器以便將來訪問同一頁面)?
  • 被訪問鏈接在全局根菜單根組件狀態或應用程序狀態?
  • 如果您正在使用樂觀更新,您可能需要在與服務器通信之前和之後保存用戶輸入的內容。

一些經驗法則,我使用:

  • 國家所屬的成分,如果它具有相同的生命週期作爲構成要素(所以如果國家不需要組件坐騎之前存在,如果它可在組件卸載後遺忘)
  • 如果在關閉和重新打開應用程序時需要記住該狀態,則最好將其放在存儲器中(在與服務器和/或本地存儲進行交換的位置)
  • 如果有疑問,僅從組件中的狀態開始:它使狀態保持更多的本地狀態(對組件),並保持你的代碼更易於管理。在稍後的階段,你可以隨時將狀態轉移到商店。
+0

我認爲這些都是你指出的重要規則。我會補充說,「在關閉和重新打開應用程序時需要記住的狀態」可以(並非在所有情況下)也保存在URL中,有時甚至更希望將它保留在那裏而不是localStorage中。 – timetowonder

+0

好點。但是如果這些數據在url中,嚴格來說數據不是狀態,但必須以某種方式作爲道具傳遞給你的反應樹。嚴格來說:數據不會被應用程序/記住,但必須保存在網址中。 – wintvelt