reactjs - 调用 API 后 useState 不更新数组
问题描述
我的代码如下:
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]);
}
每次SelectedModule更改时,监听它的效果都会运行良好并返回一个值。然后,我使用setCurrentlyRegisteredModules将结果推送到CurrentRegisteredModules数组。
但是,我面临的问题是没有触发收听CurrentRegisteredModules的效果,但是当我在控制台中检查CurrentRegisteredModules时,它显示结果已添加到该区域。
谁能确定我可能做错了什么。
解决方案
更改以下代码
setCurrentlyRegisteredModules(x => {
x.push(new RegisteredModules(res.data));
return x;
});
到
setCurrentlyRegisteredModules(x => {
let newX = [...x]
newX.push(new RegisteredModules(res.data));
return newX;
});
不要变异x
。
推荐阅读
- javascript - 我想在特定的数据点使用 mathjax 和 react native render html 。我使用了自定义 HTML 标签,但在标签内找不到数据
- angular - Angular Sat-popover - 弹出框内的可点击内容和悬停
- flutter - 颤振 setFlashMode(FlashMode.always) 不起作用
- solidity - 如何对其他人隐藏 tokenURI 值
- postgresql - 如何在 PostgreSQL 中“添加约束 *index name* unique ((case...))”?
- java - JVM 在加载 Java Service Wrapper 的应用程序时退出
- ruby-on-rails - 使用关系数据更新时Rails活动记录N + 1查询问题
- powershell - PowerShell JSON 文件格式输出
- vuejs3 - VUE3 :: 如何不在历史中保存路线
- c - 如果在驱动程序中看不到预防性抢占,则认为是关键代码