Возврат состояния "From JS" VS возвращает состояние объекта Plain JS в React-Redux - PullRequest
1 голос
/ 02 августа 2020

В документации react-redux это написано в разделе PROS immutable. js, что:

Компоненты будут заменены -render, когда они не должны, и отказываться от рендеринга, когда они должны, и отследить ошибку, вызывающую проблему рендеринга, сложно, поскольку некорректный рендеринг компонента не обязательно является тем, чьи свойства были случайно изменены.

Эта проблема в основном вызвана возвратом измененного объекта состояния из редуктора Redux. С Immutable. JS этой проблемы просто не существует, что устраняет целый класс ошибок из вашего приложения.

Это, вместе с его производительностью и богатым API для обработки данных, является причиной Immutable. JS стоит затраченных усилий.

Пожалуйста, поясните следующие неоднозначности с подходящими небольшими примерами.

  1. Я не понимаю, что будет в случае, когда компонент будет отображаться, когда он не должен и не должен отображаться, когда должен.
  2. Кроме того, я не понимаю, когда нам следует использовать Immutable. JS при возврате данных из редуктора (это довольно тревожный синтаксис). Почему мы не можем просто вернуть простой простой объект JavaScript? Приведите пример в условиях непрофессионала.
  3. В документации я также прочитал, что нам следует ИЗБЕГАТЬ .toJS() в mapStateToProps, тогда как мы должны получить доступ к состоянию, возвращаемому редуктором в компоненте, если мы не должны использовать .toJS() дюйм mapStateToProps?

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Redux, а также immutable.js - архитектурное усложнение. Какую проблему вы собираетесь решить с помощью Redux? Если вы уже приняли решение относительно инструмента управления состоянием и собираетесь углубиться в него.

Неизменяемость в основном связана с требованием реализации редукторов как чистых функций. Здесь immutable.js может помочь «пересчитать» ссылку на все состояние независимо от того, какая его часть была изменена. Но это набор неизменяемых структур данных. Чтобы передать их в виртуальный DOM, вы должны преобразовать их toJS. Готовы ли вы заплатить за такую ​​«проверку» во время выполнения с дополнительными осложнениями и возможными проблемами с производительностью.

Может быть, лучше настроить ESLint так, чтобы во время компиляции проверки неизменяемости везде в вашем коде. Я имею в виду такие места, как:

const state = { foo: { bar: { baz: 'plugh' } } };
state.foo.bar.baz = 'Do not do that cause React do not track such changes at all)';
0 голосов
/ 02 августа 2020

Кстати, попробуйте Mobx Может быть, он подойдет вам больше, чем Redux. Менее функциональный и более структурный / классический

...