ImmutableJS映射到javascript对象

时间:2019-09-23 04:23:57

标签: reactjs redux immutability immutable.js

我的还原状态如下:

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

1 个答案:

答案 0 :(得分:0)

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

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

我觉得将不可变对象转换为JS对象不是一个好主意。这是某种反模式,因为那些不可变的对象指的是原始状态。因此,如果将那些Immutable类型转换为组件中的JS对象,则意味着可以从组件中更改状态,这显然不是一件好事。