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

React中如何将数组对象动态绑定到input输入框并提交至后端

问题原因

  • 渲染输入项时遍历的是初始静态数组myArr,不是存储修改后数据的state变量input,输入框的value也绑定了myArr的原始值,导致state更新不会同步到视图,输入修改的内容也不会正确同步到提交用的state中
  • price字段为数字类型,直接存储输入的字符串会导致后端接收的字段类型错误

修正代码

把渲染部分的遍历源替换为state的input变量,可选补充数字类型转换逻辑,完整代码如下:

const myArr = [
  { product: 'egg', price: 5, id: 1 },
  { product: 'cake', price: 3, id: 2 }
]

const [input, setInput] = useState(myArr)

const changeHandler = (id) => event => {
  const { name, value } = event.target;
  setInput(prev => prev.map((el) => el.id === id
    ? {
        ...el,
        // 对price字段做数字类型转换
        [name]: name === 'price' ? Number(value) : value,
      }
    : el,
  ));
};

const submitForm = (e) => {
  e.preventDefault();
  const printOut = input
  console.log({print:printOut});
  try {
    axios.post('/products/print', printOut)
  } catch (error) {
    console.log(error);
  }
}

return (
  <form onSubmit={submitForm}>
    {/* 遍历源改为state的input变量 */}
    {input.map(x=>(
      <div key={x.id}>
        <input name='product' value={x.product} onChange={(e) =>changeHandler(x.id)(e)}  />
        <input name='price' value={x.price} onChange={(e)=> changeHandler(x.id)(e)} />
      </div>
    ))}
    <input type="submit" value="Submit" />
  </form>
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:15:03