Javascript 无法从调度程序更新Redux状态
我有一个自定义挂钩,如下所示:Javascript 无法从调度程序更新Redux状态,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我有一个自定义挂钩,如下所示: const cl = ["table", "chair", "book"]; export function useClass() { const [class, setClass] = useState({ pl: cl[0] }); const dispatch = useDispatch(); const customFunction = () => { let coun
const cl = ["table", "chair", "book"];
export function useClass() {
const [class, setClass] = useState({ pl: cl[0] });
const dispatch = useDispatch();
const customFunction = () => {
let counter = 0;
let ClassInterval = setInterval(() => {
counter++;
setClass({ pl: cl[Math.floor(Math.random() * cl.length)] });
if (counter > 4) {
clearInterval(gameInterval);
dispatch(AddStudents(class.pl, "1"))
}
}, 200);
};
return { class, customFunction };
因此,我使用这个定制钩子的目的是在特定时间后从表中生成一个随机值,然后当它完成时,它将使用react redux
将其发送到存储,但问题是,当我使用redux dev tools
来控制台存储或检查它时,它总是给我一个错误的值,你知道为什么会这样吗
编辑
我的减速机如下:
case ADD_CLASS:
return {
...state,
classes: state.classes.map((class) => {
if (player.id === action.id) {
return { ...player, cl: action.cl };
} else {
return player;
}
}),
};
这里是devtools的最终状态,它是初始状态,但添加了错误的值:
以及使用挂钩的部件:
const RenderIcon = () => {
return (
<img
src={
class.pl === "table"
? Table
: class.pl === "chair"
? Chair
: Book
}
/>
);
};
// same component
React.useEffect(()=> {
console.log(class.pl) // correct value with the rendered icon
console.log(mystore) // wrong value
})
const RenderIcon=()=>{
返回(
);
};
//相同组件
React.useffect(()=>{
console.log(class.pl)//使用呈现的图标更正值
console.log(mystore)//值错误
})
您得到了什么样的结果?你期望什么?你也在清除gameInterval,这是另一个interval还是你弄错了ClassInterval?当我在另一个组件中记录结果时,它会显示我需要的正确值,但当我将该操作分派到状态时,它不会给我正确的值,因此,我认为可能有一个问题,这个自定义钩子是刚刚从setClass
设置的class.pl
不是class.pl
的问题,您希望在调度AddStudents
操作时会出现几行吗?React状态更新是异步的,并且在渲染周期之间进行处理。您已经有了devtools,那么调度什么以及在调度时会发生什么变化?如果发送了错误的内容,则显示完整的发送代码;如果状态未正确写入,则显示reducer代码;如果两者都正确,则显示如何从日志中的状态中选择值。我已对问题添加了更改,您可以看一看吗?