Я пытаюсь внедрить @reduxjs/toolkit в свой проект, и в настоящее время я столкнулся с проблемой использования оператора распространения.
const initialState: AlertState = {
message: '',
open: false,
type: 'success',
};
const alertReducer = createSlice({
name: 'alert',
initialState,
reducers: {
setAlert(state, action: PayloadAction<Partial<AlertState>>) {
state = {
...state,
...action.payload,
};
},
},
});
Когда я присваиваю состояние новому объекту, мой магазин не обновляется. Но если я изменю редуктор на код
state.message = action.payload.message || state.message;
state.open = action.payload.open || state.open;
Но это не очень удобно. Так есть ли способ использовать оператор спреда?
В этом случае вы должны вместо этого вернуть новый объект из функции:
setAlert(state, action: PayloadAction<Partial<AlertState>>) {
return {
...state,
...action.payload,
};
},
Вы можете изучить больше примеров в документации. Также помните об этом правиле:
вам нужно убедиться, что вы либо изменяете аргумент состояния, либо возвращаете новое состояние, но не то и другое одновременно.
спасибо миллион за этот ответ и объяснение. Я никогда не понимал этого, и это никогда не было ясно из стандартной документации для меня. Кудо навсегда. ;-)
Мне потребовались часы, чтобы понять, что я смешиваю мутацию и создаю новое состояние с помощью оператора распространения. Судя по малому количеству просмотров этого вопроса, я боюсь, что есть еще люди, которые ищут решение 🤣