Javascript ReactJS,Hooks-如何在.map()函数之后设置状态?

Javascript ReactJS,Hooks-如何在.map()函数之后设置状态?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我试图用数组中的值更改状态。例如: const [state, setState] = useState({}); const test = [1, 2, 3]; test.map((item, i) => { setState({ ...state, [`item-${i}`]: item }); }); 目前的状态是: item-2: 3 我想要实现的是: item-0: 1, item-1: 2, item-2: 3 我尝试过

我试图用数组中的值更改状态。例如:

const [state, setState] = useState({});
const test = [1, 2, 3];
        test.map((item, i) => {
          setState({ ...state, [`item-${i}`]: item });
        });
目前的状态是:

item-2: 3
我想要实现的是:

item-0: 1,
item-1: 2,
item-2: 3
我尝试过几种方法(看起来都很相似),但效果是一样的:/有人知道如何解决吗


谢谢

您可以使用以下方法更新状态:

test.forEach((item, i) => {
   setState(state => ({...state, [`item-${i}`]: item}));
});

您可以使用set state的功能版本和reduce来实现这一点:

  setState(prevState => {
    return test.reduce((acc, next, i) => {
      return {
        ...acc,
        [`item-${i}`]: next
      },
    }, prevState);
  });

这样做的优点是只需一次调用即可完成,而且更易于阅读。

不要在循环中设置状态<代码>const newState={…oldState};test.forEach((项目,i)=>newState['item-'+i]=项目);设置状态(newState)我希望您的示例比一个填充了
item-N
键的对象更复杂,因为您实际上是在复制数组的功能:)