Автор оригинала: Sunny R Gupta.
Не так давно веб-приложения были написаны исключительно на стороне сервера. Весь тяжелый тяжелый подъем был выполнен сервером. Единственная цель клиента состояла в том, чтобы сделать генерируемые HTML/CSS и иногда отправлять XMLHTTPREQUEST для отслеживания некоторых переменных.
В конце концов, с переплетением библиотек JavaScript, таких как jQuery, и постоянный толчок от сообщества, браузеры начали конкурировать на производительности. Это привело к беспрецедентному росту в методах силовых инженерных технологий.
Весь веб-сайты написаны в JavaScript, серверы начали поддерживать JS (Node.js), и был нажимается для изоморфных веб-приложений.
Около 2013 года первая версия реагирования была выпущена. В конце концов он стал самыми популярными фронтальными каркасами выбора для тысяч разработчиков в сотнях компаний.
По мере увеличения сложности веб-приложений многие побочные эффекты выскочили. Изредка разработчик забудет привязать правильный слушатель или вызвал неправильный слушатель – все состояние приложения было беспорядок.
Введите, redux.
Redux – это реализация потока. Набор шаблонов, которые Facebook последовали за собственные приложения.
У него есть три принципа:
- Имеет один источник правды – вся информация, которую приложение гласит, должно произойти от этого объекта. Мы могли бы назвать этот объект, магазин.
- Магазин должен быть только для чтения – I.E. Приложение может прочитать только данные из магазина.
- Любая модификация в магазине должна выполняться чистыми функциями.
Давайте сделаем перерыв и понимаю, какие чистые функции есть.
Рассмотрим сумматор, который принимает две переменные и возвращает сумму. Эта функция вернет одинаковое значение x, если входы являются A и B. В каком-то состоянии не будет возвращать функцию другого значения. Такие функции являются чистый Отказ
Пример функции, которая не является чистой, была бы математика .random в JS. Это возвращает другое значение каждый раз.
Другое правило для чистых функций состоит в том, что они не должны пытаться изменить либо входные параметры. Они могут использовать только входы только для создания нового значения, а не модифицировать/чтение от любого другого значения. (например, значение из глобальной области не должно читать/модифицировать во время выполнения)
Возвращаясь к redux, когда мы применяем вышеприведенные три принципа, мы по сути, мы по сути убрали много неопределенностей и сложностей из нашего применения.
Любая модификация состояния приложения может быть гарантировано, что может иметь ожидаемое поведение, и все другие зависимые компоненты могут теперь прочитать новое значение магазина (мы можем автоматизировать слушать каждое изменение, подписавшись на магазин для обновлений, больше на это позже. Несомненно
Эти чистые функции называются Редукторы Отказ Они получают действия и предыдущее состояние магазина и возврат следующего состояния. Для всех практических целей предыдущее состояние рассматривается как неизменный.
Действия являются объектами с помощью свойства типа, установленные на них и любую дополнительную информацию о том, что редуктор может потребоваться в отношении этого действия. Например, действие для Add_todo
будет включать новый объект TODO, который должен быть добавлен в магазин.
Действия созданы внутри Диспетчеры Отказ Диспетчеры могут потенциально делать асинхронные задачи, такие как IO или сети, прежде чем они отправляют действие или даже между двумя действиями.
Диспетчеры могут напрямую можно вызвать от интервала интервалов взаимодействия пользователей или предварительно определенным интервалом.
Надеюсь, у вас есть лучшее теоретическое понимание redux сейчас. Не стесняйтесь добраться до меня, если вы хотите позвать и получить руки с некоторым кодом.