2016-04-25 3 views
5

Как новичок Redux, учитывая (идею) несколько большего применение я представляю себе корень редуктор, подобный:Как вы очищаете состояние Redux?

const rootReducer = combineReducers({ accounting, crm, sales }) 

состояния приложения в этом случае будет содержать бухгалтерский учет, CRM, и продажи, даже если пользователь является используя только одну часть приложения. Это может быть выгодным, например, в качестве кеша при переключении между учетными записями и CRM, но вы, вероятно, не хотите сохранять все данные всех открываемых ранее просмотров, то есть полное возможное дерево состояний без каких-либо обрезков, внутри приложения навсегда или даже инициализировать все дерево до его начального состояния при загрузке.

Есть ли идиомы, узоры или библиотеки, которые решают это, или я что-то упускаю?

В качестве частичного решения, которое решает удерживающего все данные, я представляю себе что-то вроде сброса части состояния в исходное состояние при переходе от отдельных частей приложения приведены некоторые декларативные правила, такие как:

  • установить accounting = {} (опосредованно, через действия, такие как ACCOUNTING_LEAVING), когда <Accounting/> получает componentWillUnmount
  • удаления/комплект crm.mail = {} когда <MailEditor/> принимает componentWillUnmount

Я не видел примеров, которые каким-либо образом очищают государство. Многие примеры «list + detail view» хранят состояние, подобное { list: [...], detail: {...} }, но при переключении на подробный просмотр список не очищается, не нумеруется и не удаляется. Это приятно, когда я могу вернуться к просмотру списка через пару минут, но не при использовании приложения с 9 по 5 без публикации данных.

ответ

4

Несколько связанных мысли:

  • Если вы ждете десятки или сотни мегабайт данных, которые будут сохраняться в вашем магазине, вы, вероятно, беспокоясь об этом слишком рано. Напишите свое приложение, сравнительный тест, а затем оптимизируйте.
  • Отправка действий для очистки частей магазина полностью действительна и разумна.
  • Мое Redux addons ecosystem catalog может иметь некоторые перечисленные библиотеки, которые были бы полезны. В частности, страницы Component State и указывают на некоторые библиотеки, которые выполняют такие функции, как динамическое добавление и удаление редукторов из вашего магазина и состояние сброса.
  • Вы также можете быть заинтересованы в моей коллекции высококачественных React and Redux tutorials.

В целом, как вы организуете свое состояние, когда вы его обновляете, и то, что вы обновляете, зависит от вас. Redux просто предоставляет шаблон и правила для процесса обновления.

+0

(Другой) Полезный список, почти сразу же приводит меня к реакции-ui, который, похоже, справляется с удалением состояния аналогичным образом (на компонентеWillUnmount); Я буду исследовать некоторые библиотеки, чтобы найти (или добавить ...) один подходящий для моих вариантов использования. Компонентный подход для управления редукторами и государством, по-видимому, решается по-разному (по крайней мере, столько, сколько существует мнений относительно того, что должно быть в состоянии). –

+3

Подождите, вы говорите мне, что разные разработчики имеют разные идеи о том, как это делать? Я в шоке, _shocked_!:) – markerikson

+0

Я как раз в процессе расследования Redux и очень смущен этим. Мне кажется логичным, что в большом многозадачном приложении вы вообще не хотите, чтобы состояние сохранялось в браузере _after_ пользователь оставил «страницу». Сохранение состояния в компонентах означает, что вам не нужно беспокоиться об этом - состояние уничтожается вместе с компонентом, но, по-видимому, его размещение в хранилище Redux требует значительных накладных расходов с точки зрения явного управления его жизненным циклом. Это заставляет меня сильно наклониться от Redux и _towards - компонентный подход к управлению государством. Что мне не хватает? –

Смежные вопросы