Javascript 如何将普通JS对象转换为不可变集合?

Javascript 如何将普通JS对象转换为不可变集合?,javascript,reactjs,redux,react-redux,immutable.js,Javascript,Reactjs,Redux,React Redux,Immutable.js,我在不可变集合的帮助下管理状态的某些部分。 比如说, const FolderModel = Record({ id: null, name: '', items: List() }) const DocsModel = Record({ folder1: new FolderModel({ id: 1, name: 'Избранное' }), folder2: new FolderModel({

我在不可变集合的帮助下管理状态的某些部分。 比如说,

const FolderModel = Record({
    id: null,
    name: '',
    items: List()
})

const DocsModel = Record({
    folder1: new FolderModel({
        id: 1,
        name: 'Избранное'
    }),
    folder2: new FolderModel({
        id: 2,
        name: 'Отложенное'
    }),
    folder3: new FolderModel({
        id: 3,
        name: 'Топ тендеры'
    })
})

const initialState = new DocsModel()
我还将我的状态保存在
localStorage
中,因此问题是当从
localStorage
检索状态时,我不知道如何将JS对象转换回嵌套集合(例如,包含列表字段的记录)。
我已经尝试过使用
Immutable.fromJS()
方法,但显然它对
Record
s不起作用。有人面临同样的问题吗?请帮助解决此问题

我相信在将集合设置为本地存储之前,您需要使用
JSON.stringify()
序列化集合。从localStorage取回后,您可以使用
JSON.parse()

对其进行反序列化。我认为在将集合设置为localStorage之前,您需要使用
JSON.stringify()
对其进行序列化。从localStorage取回后,您可以使用
JSON.parse()
对其进行反序列化。我已经成功地使用了该库

从:

“Transit是一种序列化格式,它构建在JSON之上,以提供更丰富的类型集。它是可扩展的,这使得它成为一个很好的选择,可以轻松地为不可变的类型提供序列化和反序列化功能。”

使用记录的示例:

var FooRecord = Immutable.Record({ a: 1, b: 2, }, 'Foo'),
    foo = new FooRecord(),
    serialize = transit.withRecords([FooRecord]),
    json = serialize.toJSON(foo);

console.log(json); //=> json string of your data

我已经成功地使用了lib

从:

“Transit是一种序列化格式,它构建在JSON之上,以提供更丰富的类型集。它是可扩展的,这使得它成为一个很好的选择,可以轻松地为不可变的类型提供序列化和反序列化功能。”

使用记录的示例:

var FooRecord = Immutable.Record({ a: 1, b: 2, }, 'Foo'),
    foo = new FooRecord(),
    serialize = transit.withRecords([FooRecord]),
    json = serialize.toJSON(foo);

console.log(json); //=> json string of your data

很抱歉误导了你,但我已经这么做了。问题是,当我从localStorage获取状态时,它将作为普通JS对象返回。因此,当我设计我的
mapstatetops
方法来处理不可变的集合(例如
filter:state.filter.get('filter'))时,我在从存储中进一步检索数据时遇到了问题。
很抱歉,我已经这样做了。问题是,当我从localStorage获取状态时,它将作为普通JS对象返回。因此,当我设计
mapstatetops
方法来处理不可变的集合(例如
filter:state.filter.get('filter'))时,进一步从存储中检索数据会遇到问题。