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代码;如果两者都正确,则显示如何从日志中的状态中选择值。我已对问题添加了更改,您可以看一看吗?