不可变的 js 地图人口

Immutable js Map population

我正在尝试填充不可变 JS 映射。 给定一个字段数组和一个表单,例如

{form: 'Register', fields: ['name','firstname']}

我想得到类似的东西:

{ form :
        { name: {
               value: '',
               hasFeedback: false
              },
          firstname: {
                value: '',
               hasFeedback: false
              }
        }
}

我当前的代码:

let newState = state;   
fields.forEach((field) => {
      newState = newstate.setIn([form, field, 'value'], '');
      newState = newstate.setIn([form, field, 'hasFeedback'], false);
    });     
return newState;

我是整个不可变事物的新手:这是填充不可变映射的正确方法吗?我要打破任何关于不变性的约定吗?这是最优雅的方式吗?

我不知道有任何约定,但最好先创建所需的结构,然后使用 Immutable.fromJS 转换它。像您现在所做的那样,逐一应用突变会产生一些不必要的开销。

可能重构您的代码:

var form = fields.reduce((acc, f) => {
        acc.form[f] = {
            value: '',
            hasFeedback: false
        };
        return acc;
    }, {form: {}});

var immutableForm = Immutable.fromJS(form);