You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何正确更新useState定义的对象内多个指定字段

问题原因

你现在的写法之所以只生效最后一个字段更新,是因为React的state更新是异步批量处理的,你在循环里多次调用setProblems时,每次展开的problems都是当前这次回调触发时的旧值,后面的更新操作会直接覆盖前面的修改,最终只剩下最后一次更新的结果。

解决方案

你可以选择下面任意一种写法实现批量更新:

  • 方法一:使用state更新的函数式写法,每次取最新的state值修改
    .catch((error) => {
      Object.keys(error.response.data).forEach((err) => {
        setProblems(prev => ({ ...prev, [err]: true }));
      });
    });
    
  • 方法二(更推荐,仅触发一次state更新,性能更好):先组装好完整的新对象,再一次性更新state
    .catch((error) => {
      const updatedProblems = { ...problems };
      Object.keys(error.response.data).forEach(err => {
        updatedProblems[err] = true;
      });
      setProblems(updatedProblems);
    });
    
  • 方法三(更简洁的写法):先批量生成要更新的错误字段,再合并到原对象
    .catch((error) => {
      const errorUpdates = Object.fromEntries(
        Object.keys(error.response.data).map(err => [err, true])
      );
      setProblems({ ...problems, ...errorUpdates });
    });
    

内容的提问来源于stack exchange,提问作者some nooby questions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 05:15:02