tgoop.com/rdclr_dev/45
Create:
Last Update:
Last Update:
Redux Toolkit createSlice — функция, которая помогает писать редьюсеры проще
Предлагаю взглянуть на демо крохотного приложения с использованием createSlice:
https://codesandbox.io/s/todo-list-logger-jwzwb?file=/src/index.tsx
Слева мы можем добавлять/удалять записи.
Справа отображается лог наших действий.
Вся логика реализована через 2 слайса:
contactsSlice https://codesandbox.io/s/todo-list-logger-jwzwb?file=/src/store/features/contactsSlice.ts
loggerSlice https://codesandbox.io/s/todo-list-logger-jwzwb?file=/src/store/features/loggerSlice.ts
Для создания слайса мы указываем название, начальное состояние и редьюсеры:
export const someSlice = createSlice({
name,
initialState,
reducers,
});
Кроме того, мы можем указать extraReducers, что бы «ловить» действия от других слайсов. см. loggerSlice
Как вы могли заметить, при описании редьюсеров мы «мутируем состояние». Но на самом деле это не так.
Redux Toolkit использует под капотом Immer (https://immerjs.github.io/immer/).
Который в свою очередь отслеживает все мутации, а затем возвращает новое (не мутированное) состояние.
Например, вот редьюсер без Immer:
function handwrittenReducer(state, action) {
return {
...state,
first: {
...state.first,
second: {
...state.first.second,
[action.someId]: {
...state.first.second[action.someId],
fourth: action.someValue
}
}
}
}
}
А вот с использованием Immer:
function reducerWithImmer(state, action) {
state.first.second[action.someId].fourth = action.someValue
}
Как я и сказал, это позволяет писать редьюсеры проще.
Любые вопросы и критика приветствуется.
Как вы реализовали бы функцию отмены конкретного действия в логгере (см. демо)?
#rdclr_frontend #React #product #read #library #redux
BY RDCLR.DEV

Share with your friend now:
tgoop.com/rdclr_dev/45