如何将项目推入useState数组中的对象数组?

时间:2020-03-19 00:00:54

标签: arrays reactjs react-hooks

我有一个数组,其中的对象也包含数组。如何使用useState将元素推到对象内部的该数组?

const [list, updateList] = useState([defaultList]);

const defaultList = [
  {
    "name":"Element 1",
    "subList": [{"name": "Element 1"}]
  }
]

在这种情况下,如何更新subList?

2 个答案:

答案 0 :(得分:1)

假设您要基于索引将项目追加到特定列表项的子列表中:

function appendSublistItemForItemAtIndex(newItem, index) {
  updateList([
    ...list,
    [index]: {
      ...list[index],
      subList: [
        ...list[index].subList,
        newItem
      ]
    }
  ])
}

然后在组件需要的任何地方调用此函数(某些回调,在useEffect挂钩中等)

答案 1 :(得分:1)

如果阵列中有一项,则必须使用新数据或修改过的数据重新创建阵列。

updateList(state => {
  const stateCopy = [...state]

  stateCopy[index] = {
    ...stateCopy[index],
    subList: [...state[index].subList, newItem]
  }

  return stateCopy
})

更新:

如果要根据商品名称进行更新。

updateList(state => {
  const stateCopy = [...state]
  const indexOfName = stateCopy.findxIndex(item => item.name === name)

  stateCopy[indexOfName] = {
    ...stateCopy[indexOfName],
    subList: [...state[indexOfName].subList, newItem]
  }

  return stateCopy
})