简体   繁体   English

调用 API 后 useState 不更新数组

[英]useState not updating Array after calling API

I have my code as follows:我的代码如下:

const ManageModules: React.FC < IProps > = ({
    history
  }) => {
    const [CurrentlyRegisteredModules, setCurrentlyRegisteredModules] = useState(null as unknown as any[])
    const [SelectedModule, setSelectedModule] = useState(null as unknown as any);

    useEffect(() => {
          userModuleService.addUserModule(SelectedModule.id)
            .subscribe(res => {                 
              setCurrentlyRegisteredModules(x => {
                x.push(new RegisteredModules(res.data));
                return x;
              });
            });
        })
  },
  [SelectedModule]);

 useEffect(() => {
    console.log('Current Reg Change');
}, [CurrentlyRegisteredModules]);
}

Everytime SelectedModule changes, the effect listening to it runs fine and returns a value.每次SelectedModule更改时,监听它的效果运行良好并返回一个值。 I then push the result to array CurrentlyRegisteredModules using setCurrentlyRegisteredModules .我然后将结果推到使用setCurrentlyRegisteredModules阵列CurrentlyRegisteredModules。

However, the problem I am facing is that the effect listening to CurrentlyRegisteredModules is not triggered but when i inspect CurrentlyRegisteredModules in console, it shows that the result was added to the area.但是,我面临的问题是未触发收听CurrentRegisteredModules的效果,但是当我在控制台中检查CurrentRegisteredModules时,它显示结果已添加到该区域。

Can anyone identify what I could be doing wrong.任何人都可以确定我可能做错了什么。

Change following code更改以下代码

setCurrentlyRegisteredModules(x => {
  x.push(new RegisteredModules(res.data));
  return x;
});

to

setCurrentlyRegisteredModules(x => {
  let newX = [...x]
  newX.push(new RegisteredModules(res.data));
  return newX;
});

Do not mutate x .不要改变x

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM