javascript - 如何更新 React Hooks 中对象数组中的状态 `onChange`

标签 javascript reactjs react-hooks

我已经检索了使用useState存储在对象数组中的数据,然后将数据输出到表单字段中。现在我希望能够在输入时更新字段(状态)。

我见过人们更新数组中属性的状态的示例,但从未见过更新对象数组中状态的示例,所以我不知道该怎么做。我已将对象的索引传递给回调函数,但我不知道如何使用它来更新状态。

// sample data structure
const data = [
  {
    id: 1,
    name: 'john',
    gender: 'm'
  }
  {
    id: 2,
    name: 'mary',
    gender: 'f'
  }
]

const [data, setData] = useState([]);

const updateFieldChanged = index => e => {
  console.log('index: ' + index);
  console.log('property name: '+ e.target.name);

  setData() // ??
}

return (
  <React.Fragment>
    {data.map((data, index) => {
      <li key={data.name}>
        <input type="text" name="name" value={data.name} onChange={updateFieldChanged(index)} />
      </li>
    })}
  </React.Fragment>
)

最佳答案

具体操作方法如下:

// sample data structure
/* const data = [
  {
    id:   1,
    name: 'john',
    gender: 'm'
  }
  {
    id:   2,
    name: 'mary',
    gender: 'f'
  }
] */ // make sure to set the default value in the useState call (I already fixed it)

const [data, setData] = useState([
  {
    id:   1,
    name: 'john',
    gender: 'm'
  }
  {
    id:   2,
    name: 'mary',
    gender: 'f'
  }
]);

const updateFieldChanged = index => e => {
  console.log('index: ' + index);
  console.log('property name: '+ e.target.name);
  let newArr = [...data]; // copying the old datas array
  // a deep copy is not needed as we are overriding the whole object below, and not setting a property of it. this does not mutate the state.
  newArr[index] = e.target.value; // replace e.target.value with whatever you want to change it to

  setData(newArr);
}

return (
  <React.Fragment>
    {data.map((datum, index) => {
      <li key={datum.name}>
        <input type="text" name="name" value={datum.name} onChange={updateFieldChanged(index)}  />
      </li>
    })}
  </React.Fragment>
)

关于javascript - 如何更新 React Hooks 中对象数组中的状态 `onChange`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55987953/

相关文章:

javascript - ClickAwayListener 的回调函数在执行中途停止

javascript - 如何在 Context 内的 useEffect Hook 中传递依赖项

javascript - 关于如何为我的网络应用程序使用 Google 登录的清晰示例/文档

reactjs - react 引导:Dropdown.item,onSelect 返回一个空目标

javascript - React 组件从一个移动到另一个的动画

javascript - React 代码无法在渲染之前设置全局上下文

javascript - 作为函数的 Prop 是否属于 useEffect 依赖数组?

javascript - Chrome无法解析单行JSONP对象

javascript - 如何使用分页显示选项卡的项目

javascript - 事件属性是否总是在事件监听器之前触发?