【问题标题】:Using immutability-helper in React to set a value of a (maybe nested) object在 React 中使用 immutability-helper 设置(可能是嵌套的)对象的值
【发布时间】:2018-01-11 17:24:28
【问题描述】:

我有这些代码:

var update=require('immutability-helper');

var state = {
  step: 1,
  fields: {
    type: '',
    name: '',
    subtype: '',
    team: '',
    agreement: ''
  }
};

function assignAttribute(attr, value) {
  var temp = update(state, {
    [attr]: {$set: value}
  });

  state = temp;
};

console.log(state); // -> { step: 1, fields: { type: '', name: '', subtype: '', team: '', agreement: '' } }
assignAttribute('step', 3);
console.log(state); // -> { step: 3, fields: { type: '', name: '', subtype: '', team: '', agreement: '' } }
assignAttribute('fields.type','superType');
console.log(state); // -> { step: 3, fields: { type: '', name: '', subtype: '', team: '', agreement: '' }, 'fields.type': 'superType' }

我想要的是最后一行如下:

{ step: '3', fields: { type: 'superType', name: '', subtype: '', team: '', agreement: '' } }

主要问题似乎是在assignAttribute函数中[attr]不再用作点符号 我该怎么办?

【问题讨论】:

    标签: javascript json reactjs nested immutability


    【解决方案1】:

    我找到了解决方法(但不是正确的解决方案)

    使用 lodash/fp:

    var _=require('lodash/fp');
    
    var state = {
      step: 1,
      fields: {
        type: '',
        name: '',
        subtype: '',
        team: '',
        agreement: ''
      }
    };
    
    function assignAttribute(attr, value) {
      var temp = _.set(attr, value, state);
    
      state = temp;
    };
    

    由于 _.set 是不可变的,我现在得到了我要找的东西 :-)

    【讨论】:

      猜你喜欢
      • 2017-07-13
      • 2018-12-12
      • 1970-01-01
      • 2021-02-21
      • 2021-09-03
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多