Я создал свое первое приложение React с хранилищами с сохранением состояния "нормальным" способом, и теперь я рассматриваю использование неизменяемого глобального состояния, которое используется в Este starterkit.
- Состояние всех хранилищ хранится вместе в единой неизменной структуре данных.
- Компоненты не имеют состояния, но имеют доступ к данным в их render() на основе функции хранения хранилища.
- Магазины также являются апатридами, но изменяют состояние глобального приложения для своего домена с помощью курсора.
- Компонент приложения верхнего уровня прослушивает изменения состояния и повторно отображает все дерево компонентов.
- Компоненты реализованы как "чистые", что означает, что они должны использовать mustComponentUpdate для эффективного определения того, что они могут быть пропущены при повторном рендеринге.
Это упрощает структуру приложения несколькими способами:
- Компоненты не прослушивают магазины, а также не копируют данные хранилища в их локальное состояние. Они просто захватывают состояние своего хранилища на каждом рендере.
- Глобальное состояние всегда является снимком всего приложения, что упрощает отладку и добавление таких функций, как отмена тривиальности.
- Глобальное состояние упрощает изоморфную визуализацию.
Я только читаю положительные вещи об использовании неизменяемых данных с React, и рекомендуется избегать состояния в компонентах, поэтому я задаюсь вопросом, есть ли какие-либо недостатки. Я понял, что должно быть, потому что в противном случае я не понимаю, почему это не рекомендуется, как способ структурирования приложений React.
Неизменяемость для меня нова, так же как и какие-либо предостережения, о которых я должен знать, если я начну использовать этот подход в сложном приложении реального мира?
Единственное, что я могу придумать, это использование forceUpdate(), поскольку Este использует его, поскольку я читал, что это синхронная функция. Например, Morearty, похоже, откладывает обновления к следующему кадру анимации для их пакетной обработки, но я рассматриваю это как детальную/оптимизационную реализацию, а не некоторую наследующую сторону подхода неизменяемого единого состояния.