reactjs - 反应 setstate 不更新对象数组
问题描述
我正在尝试更新对象数组,但即使将正确的值传递给函数,该数组仍然是空白的。如果我尝试添加第二个对象,那么以某种方式添加了第一个对象,我不确定我做错了什么。
const [qualifications, setQualifications] = useState([{}]);
function handleAddQualification(values: any) {
console.log(values);
console.log(qualifications);
setQualifications((prev) => {
return [...prev, values];
});
console.log(qualifications);
}
我传递的值被正确记录,随后的 2 个资格日志都显示一个空的对象数组。
我简化了对象,所以在我的屏幕截图中我添加了“一个”并且值记录正确,但资格数组保持空白。如果我添加第二个“二”条目,那么由于某种原因,它会将“一”添加到数组中。
请分享一些关于这里发生了什么的见解?
解决方案
这是事件循环如何工作的示例:)
在你的情况下:
- 打电话
handleAddQualification
- 日志
values
,qualifications
- 作为异步操作添加
setQualifications
到队列 - 再次记录
qualifications
与步骤 3 相同的结果 - 这里可以处理之前添加的队列中的任务
setQualifications
setQualifications
更新qualifications
看看这里以更好地理解https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop
推荐阅读
- html - 使用 Jest 对 V-If 进行单元测试
- sql - 如果子查询没有与查询连接,则无法使用不存在关键字
- android - 如何从右侧创建一个工作表幻灯片,就好像它是一个底部工作表对话框?
- android - 带有活动和 PagerView2 的 Android 导航
- java - minecraft forge java.lang.IllegalArgumentException:具有相同密钥的多个条目
- javascript - 在对象数组中查找“albumId”属性最大值为 3 的对象,例如 100,99,98
- python - 如何显示没有特定部分的变量?
- azure - Azure 管道:SqlAzureDacpacDeployment 无法执行
- angular - 更改 mat-date-picker-toggle 中按钮的 aria-label
- reactjs - 在钩子中反应 js .bind(this)