我正在尝试为我的应用程序中的票据对象写减速器,我使用createSlice为它这样:
export const ticketSlice = createSlice({
name: 'ticket',
initialState: { value: null },
reducers: {
ticketSet: (state, action) => {
state.value = action.payload;
},
ticketSetCategory: (state, action) => {
state.value.category = action.payload;
}
}
});
一切都很好,但是在useSelector中使用state.ticket.value不太方便。我更喜欢国家。车票代替它。所以我把减速器改成这样:
export const ticketSlice = createSlice({
name: 'ticket',
initialState: {},
reducers: {
ticketSet: (state, action) => {
state = action.payload;
},
ticketSetCategory: (state, action) => {
state.category = action.payload;
}
}
});
之后,存储停止工作。票的值总是一个空对象。我做错了什么?
state = anything
在一个由immerp驱动的reducer中永远都不是一个有效的语句,因为它既没有改变的状态,也没有返回一个新值。
简短的回答是,您希望这里的return action.payload
取代现有的状态。
有关更多细节,请参阅我们文档中关于此主题的扩展描述:
https://redux-toolkit.js.org/usage/immer-reducers resetting-and-replacing-state