首页 > 解决方案 > 如何使用useState更新数组中对象的值?

问题描述

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

类型错误: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;

标签: javascriptarraysreactjsreact-hooksuse-state

解决方案


主要问题是您使用的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)


推荐阅读