更新数组中对象的值

时间:2019-07-31 19:13:34

标签: javascript reactjs react-hooks

如何通过挂钩状态设置更新特定ID的标题。在这里:

const NotesContainer = ({

}) => {
  const [notesDummyData, setNotesDummyData] = useState([
    {
      id: '5',
      title: 'Sauna',
    },
    {
      id: '7',
      title: 'Finland',
    },
  ]);

  const onChangeItemName = (newTitle, oldTitle, itemId) => {

    //Update a new title here for id 7

  };

找不到setState挂钩的任何示例。

3 个答案:

答案 0 :(得分:1)

您可以使用Array.map()。对于每个项目,检查id是否等于itemId。如果是这样,请展开物品,然后更换title。如果没有,请返回原始项目:

const onChangeItemName = (title, itemId) => {
  setNotesDummyData(notesDummyData.map(o => o.id === itemId ? ({
    ...o,
    title
  }) : o));
};

答案 1 :(得分:1)

只需映射各个项目,如果id等于所选的id,则只需修改值:

 const onChangeItemName = (newTitle, oldTitle, itemId) => {
      setNotesDummyData(notesDummyData.map(x => {
           if(x.id !== itemId) return x
           return {...x, title: newTitle}
      }))
 }

答案 2 :(得分:0)

使用React Hook更新数据很容易,但是setState()无法正常工作,因此[notThis, thisOne(setNotesDummyDate)]可以正常工作来更新数据。

const [notesDummyData, setNotesDummyData] = useState([
    {
      id: '5',
      title: 'Sauna',
    },
    {
      id: '7',
      title: 'Finland',
    },
  ]);

使用React Hook方法更新数据:

const onChangeItemName = (newTitle, oldTitle, itemId) => {
       setNotesDummyDate = useState([
    {
      id: itemId, // Update
      title: newTitle,
    },
    {
      id: itemId, // Update
      title: newTitle,
    },
  ]);
 }

仍然好奇,study here about useState()

为您加油!