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

React中获取多输入框值到对象时仅保留最后输入值的问题

解决React多输入框值仅保留最后一项的问题

问题原因

你当前的代码每次更新dataItem时,都是创建一个全新的空对象,只存入当前修改的输入框的索引和值,然后直接替换掉原有的dataItem。这就导致之前输入的所有数据都被覆盖了,最终只能保留最后一次修改的那一项。

解决方案

更新state时,需要保留原有对象的所有数据,再合并新修改的键值对。推荐使用React的函数式更新方式,这种方式能确保你拿到最新的state状态,避免异步更新带来的问题:

修改getMultipleInputValue函数:

function getMultipleInputValue(index, e) {
  // 函数式更新,prev是最新的dataItem状态
  setDataItem(prev => ({
    ...prev, // 展开原有对象,保留所有已存数据
    [index]: e.target.value // 添加/更新当前输入框的值
  }))
}

如果你习惯先复制原有对象再修改,也可以这么写(但函数式更新更稳妥):

function getMultipleInputValue(index, e) {
  let newObj = {...dataItem}; // 复制原有对象
  newObj[index] = e.target.value; // 修改当前项
  setDataItem(newObj);
}

修改后完整代码

function App() {
  const [dataItem, setDataItem] = useState({});
  let arr = [1, 2, 3, 4, 5];
  
  function getMultipleInputValue(index, e) {
    setDataItem(prev => ({
      ...prev,
      [index]: e.target.value
    }))
  }

  function getDtat() {
    console.log("dataItem", dataItem)
  }

  return (
    <>
      {arr.map((data, index) => {
        return (
          <input type='text' name={index} key={data} onChange={(e) => 
          getMultipleInputValue(index, e)} />
        )
      })}
      <button onClick={() => getDtat()}>Click here</button>
    </>
  );
}

export default App;

现在点击按钮,就能看到dataItem里保存了所有输入框的索引和对应值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:22:54