簡體   English   中英

商店中真正屬於多少州?

[英]How much state does really belong in the stores?

我想知道,真正屬於商店而不屬於組件的狀態是多少? 我讀過一些地方,實際上所有州都應該住在商店內。

這是否包括真正特定於組件的東西,例如輸入值(提交之前),輸入驗證,是否打開了模態,是否單擊了某些東西等?

這里的最佳做法是什么?

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

也就是說,這里有很多灰色區域:

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

我使用的一些經驗法則:

  • 如果狀態與組件具有相同的生命周期,則該狀態屬於組件(因此,狀態在掛載組件之前不需要存在,並且在掛載組件之后可以將其忘記)
  • 如果在關閉和重新打開應用程序時需要記住狀態,則最好將其放入商店中(與服務器和/或本地存儲進行交換)
  • 如有疑問,請僅從組件中的狀態開始:它可以使狀態更加本地化(針對組件),並使代碼更易於管理。 在稍后的階段,您始終可以將狀態移動到商店。

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

這值得商.。 例如,redux提出了一個模式,其中ALL狀態屬於商店。 我個人認為在許多情況下這是不切實際的。 當我有任何理由要在商店中存儲例如按鈕狀態時,這種情況很少見。 但是有時候這可能是有利的。 當您的整個應用程序都為無狀態時,測試絕對容易。

所有內容保存在助焊劑存儲中可能某些應用程序有益。

因此,首先,您應該嘗試確定您的應用是否像這樣。

  1. 如果不確定某個狀態是否屬於助焊劑存儲庫,那么很可能不屬於該狀態。
  2. 您會知道何時需要助焊劑 並且,當您對這種應用程序體系結構是否適合您的理解達到一定水平時,您可能也會知道最初問題的答案。

但是,當然,最好有某種特定的指導,也許只是一個心理指導,告訴您何時在組件內保持狀態,何時不保持狀態。

我會遵循以下指南:

  • 這種狀態純粹與UI相關嗎? 然后,您可能不需要將其保存在商店中。
  • 該狀態是否在組件之外的其他任何地方共享 如果不是,則不要將其放在商店中。 在組件內部很好。
  • 此狀態可以保留在URL中嗎? 如果是這樣,則不要將其放在商店中。 把它放在URL中! 它可能是輸入或當前打開的選項卡的搜索查詢。

所有這些都可能會有例外,但總的來說,我認為這與flux應用程序的原始想法非常吻合。


PS另外,我也應該說,有很多談話都說您應該(可以)將所有UI保留在不可變的狀態樹中。 這就是將redux引入許多人的方式。 我認為您應該理解,盡管這是一個很棒的概念,並且它使您可以保存/重播任何用戶交互,但這通常不是不必要的 ,並且不是Flux的主要思想。 而且redux本身是一個很棒的流量工具, 它不會強迫您將所有UI狀態保留在商店中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM