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

时间:2020-09-14 18:06:40

标签: javascript arrays reactjs react-hooks use-state

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

TypeError:employees.map不是函数。

谁能建议我该怎么办?

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;

1 个答案:

答案 0 :(得分:1)

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

map()方法创建一个新数组,其中填充了在调用数组中每个元素上调用提供的函数的结果。

如果要向该数组添加新元素,应将其用作:

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)