我有像这样的不可变地图
Immutable.fromJS({
sortingOnFields: false,
items: [],
selectedItems: [],
columnsConfigs: {
meta: {},
columns: {}
},
});
如何将项目列表复制到selectedItems列表。
这return state.set('selectedItems', state.get('items'));
将无法正常完成工作
props.listing.get('selectedItems').includes(Immutable.fromJS(item));
其中Immutable.fromJS(item)
来自'items'列表,它返回false。
我试过这个有效,但看起来有点太多了
return state.set('selectedItems', Immutable.fromJS(state.get('items').toJS()));
任何更好解决方案的想法?
答案 0 :(得分:0)
问题在于您的测试。您 在两个键上成功设置了相同的列表。您正在检索items
处的值,这是一个列表,并且您将设置与selectedItems
处的值完全相同的列表。
即使 正在运行,您的测试也无法正常工作。你写道:
props.listing.get('selectedItems').includes(Immutable.fromJS(item));
该行说明:在selectedItems
获取列表。现在使用fromJS方法创建一个全新的Immutable对象。 selectedItems中的List是否包含新的Immutable对象?答案是否定的,因为您刚刚从头开始创建该项,因此它绝对不会包含在selectedItems
的列表中。
如果每个项目都是原始值,您可以像这样检查:
props.listing.get('selectedItems').includes(item);
如果每个项目都是一个对象,那么你是否将它转换为一个Immutable对象?如果没有,那么您可以传递对该项目的引用,如上所述。如果您确实将其转换为Immutable对象,请确保将引用传递给includes
方法的正确Immutable等效项。