如何使用 useState 更新数组中对象的值?

How to update value in an object in an array using useState?

我想使用 useState 将 David 和 Brian 的年龄更新为 25 岁,但遇到错误:

TypeError: employees.map is not a function.

谁能建议我该怎么做?

import React, { useState, useEffect } from 'react';

function App() {

    const [employees, setEmployees] = useState([]);

    useEffect(() => {
        setEmployees([
            { name: 'David', age: 40 },
            { name: 'Brian', age: 35 }
        ]);
    }, []);

    employees.map((value) => {
        setEmployees({ ...employees, age: 25 });
    });

    console.log(employees)
    
    return (
        <div>
            This is App component
        </div>
    );
};

export default App;

主要问题是您在 setEmployees() 中使用对象 {} 而不是 []。函数 .map() 只能用于数组。来自文档:

The map() method creates a new array populated with the results of calling a provided function on every element in the calling array.

如果您想向该数组添加一个新元素,您应该使用 as:

setEmployees(prevState => [
   ...prevState,
   { name: 'New Guy', age: 25 }
]);

要更新所有值,您可以使用 .map(),如下所示:

setEmployees(prevState => prevState.map(e => ({
   ...e,
   age: 25
});

查看下面的实例:

const data = [
  { name: 'David', age: 40 },
  { name: 'Brian', age: 35 }
]

const result = data.map(e => ({...e, age: 10}))

console.log(result)