Оба ваших редуктора в настоящее время не правы. Вы видите «правильное» поведение для showModal
только случайно.
Похоже, вы используете Redux Starter Kit. Поскольку внутри Immer используется Immer, есть два способа обновить состояние:
- «Мутировать» содержимое внутри значение
state
- Создатьновое неизменяемое-обновленное значение самостоятельно и верните его.
Ни один из ваших редукторов на самом деле не делает это правильно.
Назначение state = something
внутри редуктора не изменяет содержимоеstate
, и это не , возвращающее новое значение. Вместо этого он просто меняет то, на что указывает локальная переменная state
в этой функции.
Кроме того, нет поля state.initialState
.
Если работает showModal
, этотолько случайно, возможно потому, что оператор присваивания также неявно возвращает результат присваивания.
То, что вы должны делать, выглядит примерно так:
const initialState = {
visible: false,
selectedExpenseId: null
};
export const modal = createSlice({
slice: "modal",
initialState,
reducers: {
showModal(state, {payload}) {
return {visible: true, selectedExpenseId: payload};
},
hideModal(state) {
return initialState;
}
}
});
Обратите внимание, что вы могли бы также написать такие редукторы, как:
showModal(state, {payload}) {
state.visible = true;
state.selectedExpenseId = payload;
}
(Источник: я сопровождающий Redux, и я написал Redux Starter Kit.)