Различия в подходах неизменяемости Vuex и Redux - PullRequest
3 голосов
/ 03 августа 2020

Поиграв с Vuex и осознав, насколько легко изменить состояния с помощью обработчика мутации с простым присваиванием, я сейчас работаю с redux и узнал, что redux делает упор на неизменяемость, но делает кодирование немного более подробным. Теперь возникает вопрос:

  1. почему redux делает упор на неизменность, а vuex нет?
  2. почему redux кажется более популярным, хотя вы можете сделать то же самое с vuex с большим количеством, намного более простое кодирование?
  3. Каковы плюсы и минусы этих двух разных подходов?

Удивительно, но я не могу найти информации об этом по inte rnet.

1 Ответ

4 голосов
/ 03 августа 2020

Чтобы ответить на вопросы, вам нужно знать, как они оба работают. Veux имеет состояние, которое является наблюдаемым / реактивным , поэтому установка state.something будет запускать что-либо, наблюдающее за state.something.

Состояние Redux - это «нормальный» объект данных javascript (без методов на объекте и не использовать прототип). Когда действие отправляется, то новое состояние создается с помощью redux, и response-redux запускает все функции mapStateToProps или useSelector и сравнивает текущий результат с последним (используя ссылочное сравнение, так что {} !== {}. Если есть изменение, тогда response-redux повторно отобразит этот компонент.

Чтобы теперь ответить на ваши вопросы:

  1. Состояние Veux - это не просто объект, и добавлено множество слушателей чтобы указать, что, когда вы сделаете state.newValue='new value', он запустит все эти прослушиватели. Redux должен сравнить предыдущее значение с текущим, и наиболее эффективный способ сделать это - ссылочное сравнение. Поэтому вам нужно сгенерировать новое состояние, в котором все неизменные реквизиты все еще указывают на ту же ссылку, что и раньше, но измененные реквизиты указывают на другую ссылку.

  2. React / Redux использует функциональный подход, а vue / veux - объектно-ориентированный подход. Почему он популярен, возможно, потому, что React Redux существует дольше и имеет лучше поддерживаемую экосистему. Функциональное программирование стало более популярным в последнее время, поскольку использовать даже после десятилетий попыток, все еще очень сложно написать хороший код в объектно-ориентированном режиме (параллелизм). Лучшее, что может придумать дядя Боб, - это «У класса должна быть только одна причина для изменения». и написав в соответствии с этим правилом, вы получите класс, который имеет только метод, который может быть выполнен с помощью функции. Проблема с объединением связанных данных и поведения в классе заключается в том, что позже это отношение может измениться позже или вы обнаружите, что способ, которым вы их связали, не отражает того, что необходимо реализовать в реальном мире.

  3. Их трудно выучить, и они хорошо справляются с задачей, я считаю, что сокращенный способ легче отслеживать и предсказывать, что происходит в сложных базах кода (сложные требования, а не ненужная сложность), и их легче тестировать, но в конце концов это просто личные предпочтения.

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