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

Как вы знаете, решение этой проблемы - Redux или Mobx-State-Tree (MST). Мне нравится функциональное программирование, особенно при написании кода внешнего интерфейса, поэтому я предпочитаю углубленно изучать Redux вместо MST, который больше похож на стиль ООП (объектно-ориентированного программирования). В этой статье я буду упрощать React Redux настолько сложным, насколько кажется, просто оставайтесь спокойными, дочитайте до конца с чашкой кофе и печеньем.

Понятие и терминология

Представьте, что вы посещаете очень большой торговый центр, подобный показанному выше, вы можете купить здесь все, что захотите, - телефоны, еду, одежду и т. Д. Вместо того, чтобы иметь рынок телефонов в месте A, продуктовый рынок в месте B и одежду. рынок в локации C, ура !!! с торговым центром у вас есть все типы рынков в одном месте.

Это работает так же с вашим пользовательским интерфейсом, вместо того, чтобы каждый компонент управлял своим собственным состоянием, как показано ниже.

Теперь у нас есть торговый центр или магазин под названием REDUX STORE, где все состояния (рынок одежды, продуктовый рынок и компонент рынка телефонов) или данные каждого компонента хранятся и могут быть извлечены или обновлены в любое время из любого места, здорово !!! поэтому компонент A (рынок телефонов) теперь находится в магазине или торговом центре, и если мне нужен телефон, я просто еду в торговый центр, не нужно передавать реквизиты компоненту A (рынок телефонов), чтобы получить телефоны, то же самое относится ко всем другим компонентам .

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

РЕДУКТОРЫ

Поскольку теперь у нас есть большой торговый центр или магазин redux, нам по-прежнему нужны продавцы для обслуживания каждого сегмента торгового центра. В Redux этих продавцов, обрабатывающих каждый сегмент торгового центра или магазина, называют РЕДУКТОРАМИ, они принимают ваш запрос и дают вам ответ, например

Я: мне нужен iPhone 5

Продавец: Привет, я Джон, я занимаюсь iPhone, какой цвет вам нужен, сэр?

ДЕЙСТВИЕ

Собираясь в торговый центр, я сделаю запрос на предмет, который мне нужен, устно или письменно. В Redux запрос, который вы делаете, содержащий ваш заголовок или тип и краткое описание, называется полезной нагрузкой ACTION или ACTION (которая представляет собой простой объект javascript)

ОТПРАВЛЯТЬ

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

СОЕДИНЯТЬ

CONNECT - еще один простой термин для понимания, для покупателя (компонента, которому нужны данные), чтобы получить товар в торговом центре, я должен ехать на машине до торгового центра. Поездка на машине или в торговый центр называется CONNECT в React-Redux. это просто способ получить информацию из магазина или отправить действия или полезную нагрузку в магазин. так что с помощью CONNECT я могу получить что-то из магазина, а также отправить действие.

СОЗДАЕМ НАШЕ ПРИЛОЖЕНИЕ ДЛЯ ПРОДАЖ ОБУВИ REACT REDUX

Для этого приложения мы будем работать с приложением React, поэтому откройте свой cmd и создайте его.

npx create-react-app shoesshop

подробнее здесь: React app

если вы это сделали, установите следующие зависимости

npm install redux react-redux redux-thunk redux-devtools-extension или yarn add redux react-redux redux-thunk redux-devtools-extension

Внутри папки src создайте следующую папку:

  1. Папка компонентов: в этой папке находятся все наши компоненты. создать AddShoes.jsx, ViewShoes.jsx, EditShoes.jsx
  2. Папка контейнера: в этой папке находятся все наши контейнеры. создайте Ad.jsx, ViewShoesCont.js, EditShoesCont.js.

КОНТЕЙНЕРЫ. Представьте на секунду беременную женщину, которая сама ест, гуляет и принимает лекарства, а ребенок просто проверяет показатели ее жизненно важных функций. В React контейнеры Redux (беременные матери) представляют собой оболочки для компонентов, они взаимодействуют с хранилищем, получают все данные и даже отправляют действия, а затем визуализируют и передают результат в качестве свойств компонента. Эта передовая практика помогает сохранить ваш компонент легким и свободным от логики.

3. Папка действий: в этой папке находятся все наши действия или создатели действий.

СОЗДАТЕЛИ ДЕЙСТВИЙ. Создатели действий представляют собой простые функции JavaScript, возвращающие действие.

4. Папка reducer: в этой папке находятся все наши редукторы redux.

РЕДУКТОРЫ (техническое определение): являются функциями Javascript, которые принимают ПРЕДЫДУЩЕЕ состояние приложения, а также ДЕЙСТВИЕ и возвращают новое или следующее состояние. Следовательно, они являются чистыми функциями.

5. Папка страниц: в этой папке находятся все наши страницы. создайте внутри файл Home.jsx, Sales.jsx, dashboard.jsx.

ИНТЕГРАЦИЯ REDUX ДЛЯ РЕАКТИРОВАНИЯ ПРИЛОЖЕНИЯ

В папке Reducer добавьте файлы rootReducer.js и shoeReducer.js.

Создаваемому нами приложению нужен только один редуктор (продавец в нашем торговом центре), он (shoeReducer) обрабатывает все транзакции, связанные с обувью.

Поэтому, если вы создаете приложение, в котором есть несколько концепций, вам понадобится больше редукторов для обработки каждой из них. Я надеюсь создать такое приложение в моей следующей статье об обработке операций Async / Sync в React-Redux.

в rootReducer.js добавьте приведенный ниже код

сначала мы импортировали наш shoeReducer, а затем импортируем combReducer из redux. с combReducers мы можем объединить все наши редукторы приложений. он принимает объект (пары ключ-значение), поэтому в торговом центре (магазин redux) наш shoeReducers идентифицируется с shoesStore, как показано выше.

в shoeReducer.js добавьте приведенный ниже код

Помните, что редукторы в redux - это чистые функции javascript. Его первый параметр - это состояние, а второй - объект действия.

в redux состояние должно быть неизменным, поэтому вы никогда не выполняете state.name, state [0] .user.country, вы только возвращаете новое или следующее состояние, используя такие методы, как filter, map, синтаксис распространения (…) и т. д., который не изменяет исходный массив, а возвращает новый.

в корневом каталоге в index.js импортируйте следующие модули

redux: мы импортируем createStore, который позволяет нам фактически создавать магазин, поэтому рассматривайте его как инженера-строителя в redux. applyMiddleware - это оболочка, которая позволяет нам выполнять вызовы API с помощью redux

rootReducer: мы импортируем наш файл rootReducer.js, который мы создали выше.

thunk: thunk помогает нам в вызове API, это просто промежуточное ПО, которое делает это возможным.

provider: поставщик, как и в React Context API, делает доступными данные в нашем магазине для каждого компонента в приложении.

composewithdevtools: это помогает нам визуализировать наше хранилище redux в браузере, используя ее расширение для браузера.

Теперь мы используем наши импортированные функции для фактического создания хранилища и обертывания нашего корневого компонента (App.js) с помощью Provider.

добавьте следующие коды:

Затем хранилище переменных назначается createStore, принимая сначала наш rootReducer и composewithdevtools, оборачивая наше промежуточное ПО thunk.

ВЫВОД

Это не конец учебника, а только начало, Redux - это всегда большая тема, которую нужно подробно осветить с нуля в одной статье. В моей следующей статье «Визуализация магазина React-Redux в браузере» я завершу работу над этим приложением, а также покажу вам, как визуализировать магазин в вашем браузере.

Репо статьи: https://github.com/armstrong99/Simplifying-React-Redux

Большое спасибо за чтение.