我尝试使用Redux在状态中设置一个布尔值来显示/隐藏一个元素。
每当我分派一个布尔值时,就会显示以下错误:
- 在状态 * 中检测到不可序列化的值,这很奇怪,因为布尔值是完全可序列化的?
Todo.js
import { useSelector, useDispatch } from "react-redux";
export default function Planner() {
const dispatch = useDispatch();
function createHandleClickOpen() {
dispatch(createDialogOpen(true));
}
createHandleClickOpen绑定在按钮的onClick()方法上。
Plannerstore.js
import { createSlice } from "@reduxjs/toolkit";
export const plannerSlice = createSlice({
name: "planner",
initialState: {
createDialogOpen: false,
},
reducers: {
createDialogOpen: (state) => (value) => {
state.createDialogOpen = value;
},
},
});
// Action creators are generated for each case reducer function
export const { createDialogOpen } = plannerSlice.actions;
export default plannerSlice.reducer;
Store.js
import { configureStore } from "@reduxjs/toolkit";
import plannerSlice from "../../feature/planner/plannerStore";
export default configureStore({
reducer: {
planner: plannerSlice,
},
});
2条答案
按热度按时间dgenwo3n1#
你的减速器出了问题。
您应该使用action有效负载来检索您分派的值:
omhiaaxx2#
这里的具体问题是减速器写错了。
您已经:
这意味着它是"一个以
state
为参数的函数,并返回一个以value
为参数的函数"。reducer的结果是它返回的结果(或者在RTK + Immer的情况下,是你在
state
中"变异"的结果),所以这里的问题是你返回了一个函数,而函数是不可序列化的。另一个问题是,我们不用
value
来描述reducer的任何参数,参数是(state, action)
,对于createSlice
,通常重要的是action.payload
字段。如另一条评论所述,正确的语法应该是: