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

React中onSubmit提交异常:首次提交返回空数据第二次才生效

问题根因

React 的setState是异步批量更新的,在同一个函数作用域内调用setUserInput后,userInput状态不会立刻生效,此时访问到的仍然是更新前的旧值,也就是初始的空对象{ userName: "", userText: "" }。

第一次提交时,你往comments数组中插入的是还没更新的旧userInput,所以拿到空数据。等提交函数执行完成后,userInput状态才会更新为你本次输入的内容,第二次提交时你用到的userInput就是第一次输入的内容,所以表现为第二次提交才返回正确内容,本质是状态更新滞后了一次。

修复方案

你已经通过ref拿到了输入的实时值,不需要依赖userInput状态来更新评论列表,直接用拿到的输入值构造新评论对象插入即可,修改提交函数代码如下:

const submitHandler = (event) => {
  event.preventDefault();
  const enteredName = nameInput.current.value;
  const enteredText = commentText.current.value;
  // 直接构造新评论对象,不依赖旧的state值
  const newComment = { userName: enteredName, userText: enteredText };
  setUserInput(newComment);
  setComments(prevComments => [...prevComments, newComment]);
};

如果后续业务没有单独使用userInput状态的需求,你甚至可以直接删除userInput相关的状态声明,精简代码。

内容的提问来源于stack exchange,提问作者David Abramov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:05