reactjs 使用React通过表单输入更改对象数组中对象的值

j5fpnvbx  于 2022-11-22  发布在  React
关注(0)|答案(2)|浏览(126)

大家 好 , 我 是 一 个 新 的 React , 我 试图 使 一 个 锻炼 跟踪 器 , 但 我 已经 成为 顽固 的 尝试 捕捉 输入 的 练习 , 我 喜欢 的 方式 , 你 可以 看到 许多 注解 掉 的 代码 块 , 我 认为 我 错过 了 一些 基本 的 useState 可能 ?
这 是 我 使用 状态

const [formData, setFormData] = useState({
    title: "",
    date: "",
    exercises: [{ Exercise: "benchpress", Reps: "5", Sets: "5" }],
  });

中 的 每 一 个
这 与 标题 和 日期 一起 工作 , 但 我 尝试 了 许多 方法 , 都 无法 让 它 与 exercise 数组 中 的 对象 一起 工作
这 是 表单 输入 上 的 onChange 函数

const updateForm = (e) => {
    setFormData((currentFormData) => ({
      ...currentFormData,
      [e.target.name]: e.target.value,
    }));

格式
我 尝试 过 的 所有 解决 方案 都 只是 将 全新 的 对象 添加 到 exercises 数组 中 , 或者 只是 将 名称 + 值 添加 到 原始 对象 的 标题 和 日期 旁边 。

0lvr5msh

0lvr5msh1#

setFormData(formData.map((line, i) => {
    line.title= "";
    line.date="",
    line.exercises.map((lineExerc, j) => {
        lineExerc.name = e.target.value;
     });
return line;
}));
368yc8dk

368yc8dk2#

嘿,尝试这样做,它将更新您的练习名称,您可以添加更多的输入字段,以更新更多的值

import * as React from 'react'
const Comp = () => {
  const [formData, setFormData] = React.useState({
    title: '',
    date: '',
    exercises: [{ Exercise: 'benchpress', Reps: '5', Sets: '5' }]
  })

  React.useEffect(() => {
    console.log('gg', formData)
  }, [formData])
  const handle = (e, type) => {
    console.log('gg', e)
    setFormData({
      title: formData.title,
      date: formData.date,
      exercises: [
        {
          Exercise: type === 'E' ? e : formData.exercises[0].Exercise,
          Reps: type === 'R' ? e : formData.exercises[0].Reps,
          Sets: type === 'S' ? e : formData.exercises[0].Sets
        }
      ]
    })
  }

  return (
    <>
      <input onChange={(e) => handle(e.target.value, 'E')} />

      <input placeholder="rep" onChange={(e) => handle(e.target.value, 'R')} />
      <input onChange={(e) => handle(e.target.value, 'S')} />
    </>
  )
}

不是最好的方法,但它的工作对于一个数组有大量的对象/字段,你应该使用Map,而不是硬编码

相关问题