React Typescript - 将字符串数组中的更多元素添加到 useState 数组

React Typescript - Add more elements from a string array to useState array

有没有办法使用新的字符串数组将更多元素推送或添加到 useState 数组?我只能使用下面的函数添加一个字符串。我尝试循环字符串数组并更新,但它似乎只在最后一个元素时更新 initialList.list 。我需要将字符串数组中的所有元素推送到 initialList.list

const [initialList, setinitialList] = useState({ listName: "List 1", list: ['One', 'Two', 'Three'] });


let multiElements:string[] = ['Four', 'Five', 'Six']

        multiElements.forEach(e => {
          setinitialList({
            listName: initialList.listName,
            list: [...initialList.list, e]
          })
        })

虽然您可以为 setter 使用回调:

setinitialList(initialList => ({

将数组与 concat 合并一次更有意义,而不是同步调用状态 setter 这么多次:

setinitialList({
  ...initialList,
  list: initialList.list.concat(multiElements)
});

就我个人而言,我还建议将状态分开 - 毕竟这些使用的是钩子,而不是 class 状态:

const [list, setList] = useState(['One', 'Two', 'Three']);
const [listName, setListName] = useState("List 1");

那么你只需要做

setList(list.concat(multiElements);

如果你想访问以前的状态,你想传递一个以以前的值作为参数的函数。见 React Hooks API docs.

const [initialList, setInitialList] = useState({
  listName: 'List 1',
  list: ['One', 'Two', 'Three'],
});

// You don't need to type the variable here - TypeScript can infer it
const multiElements: string[] = ['Four', 'Five', 'Six'];

setInitialList((prevState) => ({
  listName: initialList.listName,
  list: [...prevState.list, ...multiElements],
}));

这里的关键是展开之前的状态,同时展开要添加到数组中的multiElements