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