Reactjs ImmutableJS映射到javascript对象

Reactjs ImmutableJS映射到javascript对象,reactjs,redux,immutability,immutable.js,Reactjs,Redux,Immutability,Immutable.js,我有一个像这样的重复状态: const state = fromJS({ books: { "book1": { "name": "name1" }, "book2": { "name": "name2" }, "book3": { "name": "name2" } } })) 我正在尝试创建一个选择器,它将以JS对象的形式为我提供一组书籍 export const booksSelector =

我有一个像这样的重复状态:

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(),这有点奇怪。重新选择库没有多大帮助。

如果要将该映射转换为JS对象,则唯一的方法是
toJS()
。您可以将其转换为集合(
不可变列表
),然后将其传递给每个组件。您可以使用不可变的API列表函数进行各种处理

export const booksSelector=state=>state.get('books').toList()


我觉得将不可变对象转换为JS对象不是一个好主意。它是一种反模式,就像那些引用原始状态的不可变对象一样。因此,如果您将这些不可变类型转换为组件中的JS对象,那么这意味着您可以从组件中改变状态,这显然不是一件好事

确实有帮助吗?不是真的-他们每个人都在他们的组件中使用映射,我想避免这种情况,因为我有很多组件要更新(不仅仅是渲染函数,而且所有其他函数都必须使用.map或.toJS()),我不确定我是否理解。集合是指列表和数组。你能澄清你所说的收集是什么意思吗