2017-08-03 2 views
0

J'ai des parties d'un état géré à l'aide de collections immuables. Par exemple,Comment convertir un simple objet JS en une collection 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() 

Je sauverai aussi mon état dans un localStorage, de sorte que le problème est quand récupérer l'état de localStorage Je ne sais pas comment convertir l'objet JS revenir à une collection imbriquée (par exemple: enregistrement contenant un champ qui est une liste). J'ai déjà essayé d'utiliser la méthode Immutable.fromJS() mais apparemment cela ne fonctionne pas pour Record s. Quelqu'un at-il fait face au même problème? S'il vous plaît aider à résoudre le problème

Répondre

1

J'ai eu du succès en utilisant la bibliothèque transit-immutable-js.

De l'docs:

« Transit est un format de sérialisation qui construit au-dessus de JSON pour fournir un ensemble de types plus riches Il est extensible, ce qui en fait un bon choix pour fournir facilement des capacités de sérialisation et désérialisation. pour les types Immutable. "

Exemple d'utilisation avec des disques:

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

Je crois que vous devez sérialiser votre collection avec JSON.stringify() avant de le définir à localStorage. Après l'avoir récupéré de localStorage, vous pouvez le désérialiser avec JSON.parse()

+0

Désolé pour vous misguiding, mais je l'ai déjà fait ça. Le problème est que lorsque je récupère l'état de localStorage, il est renvoyé comme un objet JS. Ainsi, j'ai de la difficulté à extraire des données du magasin lorsque j'ai conçu ma méthode 'mapStateToProps' pour gérer les collections immuables (par exemple' filter: state.filter.get ('filter')) ' – kg2152