使用 useState 和 spread 语法创建对象数组

Create an array of objects with useState and spread syntax

我正在尝试使用循环和扩展语法创建一个非常简单的数字数组, 目标:

    const number = props.numberProp


    const [numbers, setNumbers] = useState([
        {numberName: 1, key: 1},
        {numberName: 2, key: 2},
        {numberName: 3, key: 3},
        {numberName: 4, key: 4},
    ])

但它不起作用,我的循环似乎可以正常工作,但它没有将值分配给数组。

const number = props.numberProp

const [numbers, setNumbers] = useState([])

let i = 0;
while(i < number){
    setNumbers(...numbers, {numberName: i, key: i})
    i++      
}

我查找了教程和视频,但未能解决我的问题。

当您设置新值时,请确保您也添加了以前的值

const number = props.numberProp;

const [numbers, setNumbers] = useState([]);

const nums = [];
for (let i = 0; i < number; i++) {
  nums.push({ numberName: i, key: i });
}
setNumbers((numbers) => [...numbers, ...nums]);

这里有两件事:

  • 您在 setNumbers
  • 中忘记了 [
  • 设置状态是异步的,因此您必须使用 setNumbers 提供的先前值:
setNumbers(prev=> [...prev, {numberName: i, key : i}])