我正在尝试填充一个不可变的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;
我对整个不可变的事物都是新手:这是填充不可变地图的正确方法吗?我是否违反了任何关于不变性的约定?这是最优雅的方式吗?
答案 0 :(得分:2)
我不知道任何约定,但最好先创建所需的结构,然后使用Immutable.fromJS
进行转换。像你现在一样,逐个应用突变会产生一些不必要的开销。
可能重构您的代码:
var form = fields.reduce((acc, f) => {
acc.form[f] = {
value: '',
hasFeedback: false
};
return acc;
}, {form: {}});
var immutableForm = Immutable.fromJS(form);