2017-08-03 47 views
0

我有一个状态的部分在Immutable集合的帮助下管理。 例如,如何将纯JS对象转换为Immutable集合?

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。有人遇到同样的问题吗?请帮助解决它

回答

1

反序列化它我已经成功使用了transit-immutable-js库。

docs

“交通是一个序列化格式,它建立在JSON的顶部,以提供更丰富的类型,是可扩展的,这使得它一个很好的选择很容易提供系列化和deserialisation能力。为Immutable的类型。“

用法示例与记录:

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 
1

我相信你需要序列化您的收藏与JSON.stringify()之前将其设置为localStorage。在从localStorage获取它之后,您可以使用JSON.parse()

+0

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