Автор оригинала: 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