Структура Redux в веб-приложении React

Что такое Redux?
Redux — это инструмент управления состояниями, используемый при построении сложных веб-приложений с помощью javascript-фреймворков. React-Redux создан специально для фреймворка react и поддерживается командой Redux.

Почему React-Redux так важен?
Инструмент управления состоянием, такой как React-Redux, необходим при создании больших или сложных приложений, требующих согласованной структуры данных, представляющей состояние приложения, из которой можно читать и в которую можно записывать данные. Это позволяет легко отслеживать передачу данных между компонентами.

Нужна ли она вам?
Если вы создаете веб-порталы или любые веб-приложения с интенсивным использованием данных, то да, она вам понадобится для управления данными, отправляемыми и получаемыми с сервера за определенное время.

В статье показано, как настроить и структурировать react-redux для удобства использования. По сути, это шаблонный код, необходимый для начала работы.

Давайте приступим
В React-Redux есть три основных компонента

  • хранилище
  • действия
  • редукторы
  • Store — как следует из названия, это как бы хранилище, в котором находятся все наши данные. То есть здесь хранятся все наши состояния.

Действия — как следует из названия, действия — это инструкции, которые пользователь отдает редуктору для записи или получения данных из хранилища. Они представляют собой объекты с двумя основными свойствами: {type: «DO_THIS», payload: dataObject} .

Редукторы — редукторы представляют собой функции, которые принимают действия от приложения, выполняют действие и возвращают новое состояние, основанное на этом действии

Установка
npm i redux react-redux redux-thunk

создайте папку store в каталоге /src
В каталоге /src/store добавьте файл index.js в папку store
В каталоге /src добавьте папку Actions
В /src добавьте папку Reducers

Это должно выглядеть примерно так:

В /src/actions/ файлы действий создаются в соответствии с модулями, чтобы сгруппировать схожие задачи. Например, AuthenticationActions.js — может содержать signInAction(); logoutAction(); BlogActions.js — может содержать getBlogPostAction(); deleteCommentAction(); updateBlogPostAction(); и т.д..
Для данного примера мы создадим файл TestAction.js, который будет получать пользователей с сайта https://jsonplaceholder.typicode.com/users.

В файле /src/actions/TestAction.js,

	
export const getAllPosts = () => {
  return (dispatch) => {
    //   fetch placeholder data from jsonplaceholder
    fetch("https://jsonplaceholder.typicode.com/users")
      .then((response) => response.json())
      .then((result) =>
        //dispatch response to the store
        dispatch({ type: "DO_THIS", payload: result })
      );
  };
};

В каталоге /src/reducer/ создайте файл TestReducer.js, в котором можно создать несколько редукторов для обработки состояния определенных модулей нашего приложения.
Создадим функцию Test Reducer, принимающую два параметра,

  • state (по умолчанию устанавливается исходное состояние) и action
  • Используйте switch для проверки типа действия и последующего обновления состояния.

В файле /src/reducer/TestReducer.js

	
const initialState = {
  users: null,
};

export default function TestReducer(state = initialState, action) {
  switch (action.type) {
    case "DO_THIS":
      return {
        ...state,
        users: action.payload,
      };
    default:
      return state;
  }
}

В каталоге /src/reducer/ создайте файл index.js для объединения всех редукторов в папке Reducer. Redux предоставляет нам функцию combineReducer для объединения всех редукторов в приложении.

  • const reducer = combineReducer({});

В файле /src/reducer/TestReducer.js,

	
import { combineReducers } from "redux";
import TestReducer from "./TestReducer";

const reducers = combineReducers({
  Test: TestReducer,
  //other reducers come here...
});

export default reducers;

В файле /src/store/index.js создайте хранилище для всех созданных редукторов.

	
import { applyMiddleware, createStore } from "redux";
import thunk from "redux-thunk";
import reducers from "./Reducers";

//thunk middleware is used to intercept actions so as to make API call before dispatching result to reducer
const store = createStore(reducers, applyMiddleware(thunk));

export default store;

В Index.js глобально предоставьте хранилище приложению

	
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import { Provider } from "react-redux";
import store from "./store";

ReactDOM.render(
  
    
  ,
  document.getElementById("root")
);

Структура файла Store должна выглядеть следующим образом

Чтобы собрать все воедино

В App.js,

импортируем хук useDispatch для диспетчеризации действия, которое будет получать пользователей с удаленного сервера
это действие на монтируемом компоненте,
/src/App.js

В src/components/Users.js,

  • Доступ к данным в TestReducer с помощью хука useSelector
  • Сопоставление данных для отображения списка пользователей
Alt Text

Получим результат!

View

Примечание: Существует несколько способов структурировать эту систему, это лишь довольно простой способ быстро приступить к работе. Надеюсь, это поможет вам быстро начать работу :).

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии