Immutable.js添加新数据

时间:2016-12-08 21:43:24

标签: immutable.js

我想将用户的所有搜索保存为对象的关键字(搜索字段):

  beforeState = fromJS({
      showFilter: false,
      loading: false,
      error: false,
      search: fromJS({})
    })

  afterState = fromJS({
      showFilter: false,
      loading: false,
      error: false,
      search: 
         key1: [{}, {},...],
         key2: [{}, {}, {}...]
})

新数据:

const searchText = 'test'
const data = [{object1}, {object2},....]

const expectedResult = state

搜索必须是不可变的,因为它可以改变。 key1,key2 ......不需要,因为一旦他们开始改变就不会发生变化。

两个问题:

我想我需要在searchKey中使用fromJS函数才能得到一张地图,我的意思是,fromJS函数不会嵌套地图

var t = beforeState.get('search').constructor.name; 
console.log(t) //gets Map but without fromJS gets Object

但是由于key1,key2中的数组不能变异,因此不需要另一个来自.JS的数组。是这样吗?

如何在搜索字段中插入key1,key2 ..值?

1 个答案:

答案 0 :(得分:0)

使用mergeDeep,似乎没问题:

var boxes = Immutable.fromJS({
  box1: {
    id:1
  },
  box2: {
    id:2
  },
  search: Immutable.fromJS({box3: {z:7}})
});

var data = Immutable.fromJS({
  search: {
      box3: {id:3}
  }
});


var newBoxes = boxes.mergeDeep(data);
console.log(newBoxes.get('search').toJS());