我的还原状态如下:
const state = fromJS({
books: {
"book1": {
"name": "name1"
},
"book2": {
"name": "name2"
},
"book3": {
"name": "name2"
}
}
});
我正在尝试创建一个选择器,该选择器将为我提供JS对象形式的书集。
export const booksSelector = state => state.get('books');
我将此选择器用作:
const mapStateToProps = state => ({
books: booksSelector(state),
});
但是它返回Map-我已经检查过文档和其他放置的东西,在这里我不应该做任何toJS()。有什么方法可以创建适当的选择器,该选择器实际上会将映射转换为对象?我有很多将使用booksSelector的组件,似乎我可能不得不在每个组件中附加books.toJS(),这有点奇怪。重新选择库没有太大帮助。
答案 0 :(得分:0)
如果要将Map转换为JS对象,那么唯一的方法是toJS()
。您可以将其转换为集合(Immutable Lists
),然后将其传递给每个组件。您可以使用不可变的API列表函数进行各种处理。
export const booksSelector = state => state.get('books').toList();
我觉得将不可变对象转换为JS对象不是一个好主意。这是某种反模式,因为那些不可变的对象指的是原始状态。因此,如果将那些Immutable类型转换为组件中的JS对象,则意味着可以从组件中更改状态,这显然不是一件好事。