Redux Immutable JS-merge从数组创建映射对象列表

Redux Immutable JS-merge从数组创建映射对象列表,redux,react-redux,immutable.js,Redux,React Redux,Immutable.js,我正在使用redux和immutablejs,并试图创建一个reducer函数 我遇到了一些意想不到的行为 const a = new Immutable.Map({ numbers: [{id: 1},{id: 2}] }); const b = a.merge( { numbers: [{id: 4},{id: 5}] } ); 以下是a和b a.get("numbers"); [Object, Object] b.get("numbers"); List {size

我正在使用redux和immutablejs,并试图创建一个reducer函数

我遇到了一些意想不到的行为

const a = new Immutable.Map({
  numbers: [{id: 1},{id: 2}]
});

const b = a.merge(
  {
    numbers: [{id: 4},{id: 5}]
  }
);
以下是
a
b

a.get("numbers");
[Object, Object]
b.get("numbers");
List {size: 2, _origin: 0, _capacity: 2, _level: 5, _root: null…}
b.get("numbers").get(0);
Map {size: 1, _root: ArrayMapNode, __ownerID: undefined, __hash: undefined, __altered: false} 
我没想到
numbers
是一个不变的地图对象列表

在我的应用程序中,我使用redux将初始状态设置为:

const initialState = new Immutable.Map({
  error: null,
  isBusy: false,
  films: []
});
我使用减速机,当我取胶卷时,我尝试按如下方式合并它们:

return state.merge({
        isBusy: false,
        films: action.payload,
        error: null
      });
这会导致react组件中出现问题,因为
胶片
最初是一个对象数组,然后它们会变成一个不变的贴图列表

我应该创建不同的初始状态,还是应该使用不同类型的合并?还是别的什么


谢谢

我认为您试图做的不是合并整个地图对象,至少不应该在您所说的情况下,它应该是更新(concatmerge):


通过在代码中执行merge,由于“merge”的性质,您正在覆盖现有的键,因为在合并中键是相同的;“数字”。

我确实希望数字被覆盖,这不是问题所在。问题是,电影最初是一个对象数组,然后在合并后成为一个不变的贴图列表。如何将它们保持为一个对象数组?这就是为什么要在顶部使用Map。贴图不会将内部对象转换为贴图。如果需要,请使用I.fromJS(),它可以将对象深度转换为映射,将数组转换为ListHanks,这会有所帮助。是否可以在保留普通数组和对象的同时合并它们?
const a = new Immutable.Map({
  numbers: [{id: 1},{id: 2}]
});

const b = a.update("numbers", numbers =>
  numbers.concat([{id: 4},{id: 5}])
  // or
  numbers.merge([{id: 4},{id: 5}])
);