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'))时,进一步从存储中检索数据会遇到问题。