【问题标题】:Using React hooks, how to update the state of part of an object in an array of objects使用 React 钩子,如何更新对象数组中部分对象的状态
【发布时间】:2020-02-18 22:27:08
【问题描述】:

如果我使用 React hooks 有以下状态:

const [users, setUsers] = useState([
        {
            user: "Bob",
            cost: 25,
        },
{
            user: "Paul",
            cost: 30,
        },
    ])

我可以像这样映射状态:

{users.map((user, index) => (
                                <div key={index}>
                                        <input
                                            type="text"
                                            value={user.user}
                                            name="user"
                                            onChange={handleFoo(index)}
                                        />
                                        <input
                                            type="number"
                                            value={user.cost}
                                            name="cost"
                                            onChange={handleFoo(index)}
                                        />


                                </div>
                            ))}

然而,当只编辑一个输入时,我正在努力更新状态。

const handleFoo = index => e => {
        const { name, value } = e.target
        let newArr = [...users]
        newArr[index] = {[name]: value }
        setUsers(newArr)
    }

上面的 semi 工作,但它只更新一个参数。使用上述状态将按以下方式更新(例如)

[
        {
            user: "Bob",
            cost: 25,
        },
{
            cost: 30,
        },
    ]

如何传播 [index] 并只更新我需要的部分?

一个。

【问题讨论】:

    标签: reactjs react-hooks gatsby


    【解决方案1】:

    只需要在添加更新的属性之前使用扩展语法复制旧用户即可:

    newArr[index] = {
     ...users[index],
     [name]: value 
    }
    

    【讨论】:

    • 谢谢。对于 ref 代码是/是 newArr[index] = { ...users[index], [name]: value, } setUsers(newArr)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多