Почему редуктор должен вернуть новое состояние? - PullRequest
0 голосов
/ 14 марта 2019

Почему редуктор должен вернуть новое состояние, в чем причина. Почему мы не можем вернуть обновленное состояние?Это тот шаблон, которому мы должны следовать или как? Также, пожалуйста, дайте мне знать, что ngrx и redux они совершенно разные?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Обе библиотеки стремятся управлять состоянием, которым манипулируют только определенными, предопределенными способами; редукторы - это доступ, который они предоставляют государству.

Ограничивая способность напрямую манипулировать состоянием, они облегчают понимание того, как достигнуто определенное состояние; всегда можно достичь определенного состояния, отправляя те же самые действия снова, и данное состояние может быть достигнуто только в результате действий, отправленных состоянию (по крайней мере, это идеал - нечистые * редукторы потенциально могут привести к другому состояния, достигаемые от тех же действий).

Если мы представим менеджера состояний, который позволяет функциям манипулировать состоянием, что требуется для возврата измененной версии исходного состояния, то будет гораздо сложнее понять, как было достигнуто данное состояние, так как хранилищем можно было управлять в любой точке любой функцией.

Эта статья дает хороший обзор ключевых идей, стоящих за приставкой, и объясняет , почему redux делает то, что делает. Вот соответствующие части для вашего вопроса:


Состояние только для чтения

Единственный способ изменить состояние - это создать действие, объект, описывающий произошедшее.

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


Изменения производятся с использованием чистых функций

Чтобы указать, как дерево состояний преобразуется с помощью действий, вы пишете чистые редукторы.

Редукторы - это просто чистые функции, которые принимают предыдущее состояние и действие и возвращают следующее состояние. Не забудьте возвращать новые объекты состояния, вместо того, чтобы поменять предыдущее состояние. Вы можете начать с одного редуктора и по мере роста вашего приложения разделить его на более мелкие редукторы, которые управляют определенными частями дерева состояний. Поскольку редукторы - это просто функции, вы можете контролировать порядок их вызова, передавать дополнительные данные или даже создавать многоразовые редукторы для общих задач, таких как нумерация страниц.


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


* Функция нечистой функции будет выполнять одно или несколько из следующих действий:

  1. Состояние доступа, отличное от переданных аргументов
  2. Манипулировать аргументами, которые были переданы
  3. Содержит побочный эффект - то, что влияет на состояние вне его
0 голосов
/ 14 марта 2019

В обеих библиотеках они возвращают новое измененное состояние или исходное состояние

Просто просматриваю официальные документы Редуктор NgRX и Редуктор Redux

Редуктор NGRX

Редукторы в NgRx отвечают за обработку переходов из одного состояния в другое в вашем приложении.

Функции редуктора являются чистыми функциями в том смысле, что они выдают одинаковый выход для данного входа. Они не имеют побочных эффектов и обрабатывают каждый переход состояния синхронно. Каждая функция-восстановитель принимает последнее отправленное действие, текущее состояние и определяет, возвращать ли новое измененное состояние или исходное состояние

Редукс Редуктор

Редукторы определяют, как изменяется состояние приложения в ответ на действия, отправленные в хранилище.

Независимо от схемы управления состоянием, вам необходимо изменить состояние с помощью редукторов, поскольку действия являются источником информации для магазина. Они являются точками входа для взаимодействия с магазинами в NgRx и 'redux', более того в Vuex.

Что касается реализации библиотеки управления состоянием, я полагаю, что они оба следуют одному и тому же принципу Actions, Reducer, для обновления асинхронного состояния. Там могут быть некоторые, возможно, они могут иметь разные функции.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...