【问题标题】:Change object nested property value using lodash in react在反应中使用 lodash 更改对象嵌套属性值
【发布时间】:2022-01-14 13:30:16
【问题描述】:

我需要通过遍历属性数组来动态更改对象的嵌套属性

import {set} from 'lodash';

const [request, setRequest] = useState(someDefaultProps);

const someFun = (properties) => {
    let newRequest = {};

    properties.forEach(({property, value}) => {
        newRequest = set(request, property, value);
    })
    
    setRequest(newRequest);
}

通过 usestate 更改请求后,应该执行一个新请求,但没有任何反应,因为 usestate 没有触发。

我还尝试使用 lodash/fp 中的 set 函数,虽然现在请求有效,但应用程序的行为非常奇怪。在这种情况下,即使经过一些更改,请求数据也是旧的。例如,有一个单选按钮,当您单击它时,请求对象中的 someFlag 字段应设置为 false,这就是发生的情况。但是,如果您开始在输入字段中输入内容,请求对象的另一个属性会发生变化,并且 someDefaultProps 中的旧值会设置在 someFlag 字段中,尽管 someFlag 在输入期间不应更改。

感谢您的帮助

【问题讨论】:

  • “应该执行一个新请求”是什么意思?

标签: javascript reactjs lodash


【解决方案1】:

lodash 库的大部分功能已经在现代版本的 JS 中

有时值得学习新东西而不是与库集成作斗争。

const [request, setRequest] = useState(someDefaultProps);

const someFun = (properties) => {
    const newRequest = {...request}; // make sure to create new instance and not use the original state
    properties.forEach(({property, value}) => {
        newRequest[property] = value
    })
    setRequest(newRequest);
}

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多