Рубрики
Без рубрики

Как создать редуктор Redux по соглашению

Откройте для себя функциональный JavaScript был назван одним из лучших новых функциональных книг по программированию BookAuthority! Redux – это очень популярное государственное управление библиотекой. Он упрощает оригинальную архитектуру потока, сочетая все магазины и диспетчера в одном объекте магазина. Redux способствует использованию функционального программирования для управления

Автор оригинала: FreeCodeCamp Community Member.

Откройте для себя функциональный JavaScript был назван одним из Лучшие новые функциональные программирования книги BookAuthority !

Redux – это очень популярное государственное управление библиотекой. Он упрощает оригинальную архитектуру потока, сочетая все магазины и диспетчера в одном объекте магазина.

Redux способствует использованию функционального программирования для управления состоянием. Он представляет концепцию функции редуктора.

Поток данных

Давайте посмотрим на поток данных в магазине Redux.

Действие – это простой объект, который содержит всю информацию, необходимую для этого действия.

Action Creator – это функция, которая создает объект действий.

Редуктор

Редуктор – это чистая функция, которая принимает состояние и действие в качестве параметров и возвращает новое состояние.

Может быть много редукторов, управляющих частями корневого состояния. Мы можем объединить их вместе с Коммуникаторы () Утилита функция и создайте корневой редуктор.

Вот как Тодос Редуктор может выглядеть так:

import matchesProperty from "lodash/matchesProperty";
function todos(todos = [], action) {
 switch (action.type) {
  case "add_todo":
    const id = getMaxId(todos) + 1;
    const newTodo = { ...action.todo, id };
    return todos.concat([newTodo]);
  case "remove_todo":
    const index = todos.findIndex(matchesProperty("id",
                                  action.todo.id));
    return [...todos.slice(0, index), ...todos.slice(index + 1)];
  case "reset_todos":
    return action.todos;
  default:
    return state;
  }
}
export default todos;

Государство В этом случае это список до DOS. Мы можем подать заявку на свои действия, такие как add_todo , Remove_todo , RESET_TODOS Отказ

Редуктор по Конвенции

Я хотел бы избавиться от Переключатель заявление в редукторе. Функции должны быть маленькими и делать одно.

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

function remove_todo(todos, action) {
  const index = todos.findIndex(matchesProperty("id",
                                action.todo.id));
  return [...todos.slice(0, index), ...todos.slice(index + 1)];
}

function reset_todos(todos, action) {
  return action.todos;
}

function add_todo(todos, action) {
  const id = getMaxId(todos) + 1;
  const newTodo = { ...action.todo, id};
  return todos.concat([newTodo]);
}

redux-действия

Я хотел бы объединить все эти небольшие функции вместе, чтобы создать оригинальную функцию редуктора. Мы можем использовать Распространение () Утилита функция из redux-actions за это.

import { handleActions } from "redux-actions";

const reducer = handleActions(
  { remove_todo, reset_todos, add_todo },
  []
);

export default reducer;

Функции сеттера будут работать по соглашению. Когда действие с типом Remove_todo приходит, letim_todo () Функция сеттера будет выполнена.

Вот пример кода на кодовой коробке Отказ

Откройте для себя функциональный JavaScript был назван одним из Лучшие новые функциональные программирования книги BookAuthority !

Для получения дополнительной информации о применении методов функциональных программиров в реакции посмотрите на Функциональный реагировать Отказ

Учить Функциональный реагировать в проекте, основанном на проекте, с Функциональная архитектура с реагированием и redux Отказ

Следуйте в Twitter