Я прошел через определения двух как:
Чистые функции - это те, которые не пытаются изменить свои входы и всегда возвращают один и тот же результат для одних и тех же входов.
пример
function sum(a, b) {
return a + b;
}
И нечистая функция это та, которая меняет свой собственный вход.
пример
function withdraw(account, amount) {
account.total -= amount;
}
Определения и фрагменты кода взяты из официальных документов ReactJ .
Теперь, может кто-нибудь сказать мне, как я могу сделать некоторые ошибки в React / Redux , чтобы использовать нечистые функции там, где требуются чистые функции?
javascript
reactjs
redux
MuhammadUmarFarooq
источник
источник
window.getElementById
т.д., поэтому запуск одной и той же функции с одинаковыми параметрами может иметь разные результаты в зависимости от побочных эффектов. Который, где излишек потерпит неудачу.Ответы:
Реагируйте, и
Redux
оба нуждаются в чистых функциях в сочетании с неизменностью, чтобы работать предсказуемым образом.Если вы не выполните эти две вещи, ваше приложение будет иметь ошибки, наиболее распространенными из которых являются
React/Redux
неспособность отслеживать изменения и невозможность повторного рендеринга при вашихstate/prop
изменениях.С точки зрения React рассмотрим следующий пример:
Состояние удерживается объектом состояния, который имеет только добавленное свойство. Это приложение отображает свойство приложения. Он не всегда должен отображать состояние, когда что-то происходит, но должен проверять, произошло ли изменение в объекте состояния.
Таким образом, у нас есть функция эффектов,
pure function
которую мы используем, чтобы влиять на наше состояние. Вы видите, что он возвращает новое состояние, когда состояние должно быть изменено, и возвращает то же самое состояние, когда никаких изменений не требуется.У нас также есть
shouldUpdate
функция, которая с помощью оператора === проверяет, совпадают ли старое и новое состояние.Чтобы сделать ошибки с точки зрения React, вы можете сделать следующее:
Вы также можете делать ошибки, устанавливая состояние напрямую и не используя
effects
функцию.Выше не должно быть сделано, и только
effects
функция должна использоваться, чтобы обновить состояние.С точки зрения React, мы называем
effects
какsetState
.Для Redux:
combineReducers
Утилита Redux проверяет изменения ссылок.connect
Метод React-Redux генерирует компоненты, которые проверяют изменения ссылок как для корневого состояния, так и для возвращаемых значений изmapState
функций, чтобы увидеть, действительно ли обернутый компонент должен повторно визуализироваться.pure functions
имел побочных эффектов, чтобы вы могли правильно переключаться между различными состояниями.Вы можете легко нарушить вышеперечисленные три, используя нечистые функции в качестве восстановителей.
Следующее взято непосредственно из документов Redx:
Это называется редуктором, потому что это тип функции, который вы передадите
Array.prototype.reduce(reducer, ?initialValue)
.Очень важно, чтобы редуктор оставался чистым. То, что вы никогда не должны делать внутри редуктора:
Учитывая те же аргументы, он должен вычислить следующее состояние и вернуть его. Без сюрпризов. Никаких побочных эффектов. Нет вызовов API. Нет мутаций. Просто расчет.
источник
Проще говоря, состояние не может быть видоизменено. Новый экземпляр состояния должен быть возвращен каждый раз, когда есть изменение, так
Этот код не является правильным:
Этот код, когда он написан как чистая функция ниже, возвращает новый экземпляр массива, но не изменяет сам фактический массив. По этой причине вы должны использовать библиотеку, такую как immer, для обработки неизменяемости.
источник
Вы можете сделать чистые функции нечистыми, добавив вызовы API или написав коды, которые приводят к побочным эффектам.
Чистые функции всегда должны быть точными и не требующими пояснений, и не должны требовать от вас указания 3 или 4 других функций, чтобы понять, что происходит.
В случае React / Redux
Это не должно быть сделано . Все, что требуется для функции соединения или функции-редуктора, должно быть передано через аргумент или записано в его функции. Это никогда не должно получить снаружи.
источник