【问题标题】:Object spread operator: Set property to be updated via payload [duplicate]对象扩展运算符:设置要通过有效负载更新的属性[重复]
【发布时间】:2019-03-11 10:02:03
【问题描述】:

代码sn-p:

updateSelectedAreaColor: (state, payload) => {
state.selectedArea = { ...state.selectedArea, color: payload };
},

我正在使用有效负载更新对象 state.selectedArea 的属性 color。我不想硬编码要更新的属性,而是想通过我的 payload 设置属性。
例如:

updateSelectedAreaColor: (state, payload) => {
state.selectedArea = { ...state.selectedArea, payload.target: payload.value };
},

但是,此代码会引发错误。有谁知道我如何设置要通过有效负载更新的值?

【问题讨论】:

    标签: javascript object ecmascript-6 vuex


    【解决方案1】:

    动态属性放在括号中:

     updateSelectedAreaColor: (state, payload) => {
        state.selectedArea = { ...state.selectedArea, [payload.target]: payload.value };
     },
    

    不过我更喜欢:

     updateSelectedAreaColor: (state, payload) => {
       state.selectedArea = { ...state.selectedArea,  ...payload};
     },
    

    这样,您可以轻松地同时更改多个道具:

     updateSelectedAreaColor(this.state, { color: "green", backgroundColor: "red" });
    

    【讨论】:

    • 为什么要改变state
    • @arup 为什么不呢?!
    • 因为你不应该。
    • 对不起,我应该说清楚我指的是 vuex。我已经添加了标签。谢谢你的回答!
    • @JonasWilms 我同意你的看法。但是对我来说变异对象感觉非常错误。无论如何,感谢您花时间写答案并清除您的想法和我的误解。 :)
    猜你喜欢
    • 2017-06-12
    • 2017-06-12
    • 1970-01-01
    • 2021-01-17
    • 2018-09-04
    • 2021-07-07
    • 2020-03-18
    • 2019-01-07
    • 2018-01-31
    相关资源
    最近更新 更多