2016-04-07 1 views
6

Je souhaite stocker une liste d'éléments avec AsyncStorage. La liste sera mise à jour au fil du temps.Enregistrer une liste avec React Native AsyncStorage: plusieurs clés ou une?

Voici un exemple d'un état, la liste peut être:

[ 
    { 
    name: "Alice", 
    email: "[email protected]" 
    }, 
    { 
    name: "Bob", 
    email: "[email protected]", 
    address: "30 Madison Ave., NY" 
    } 
] 

Maintenant, il semble qu'il ya deux options pour stocker cette liste:

  1. magasin chaque contact sous sa propre clé
  2. magasin toute la liste sur une touche

Il y a des avantages à un ou l'autre pproach - ce qui est préféré dans React Native?

+3

Tenir compte en utilisant une bibliothèque de base de données comme [Royaume] (https://realm.io/docs/react-native/latest/). Il présente de nombreux avantages par rapport à AsyncStorage pour les données plus complexes que la clé/valeur. – David

Répondre

4

Je pense que cela dépend de la façon dont vous prévoyez d'utiliser, d'accéder et de mettre à jour les données. Il existe plusieurs méthodes asyncstorage que vous pouvez utiliser pour vous faciliter la tâche.

Si vous décidez d'aller sur la route des clés, jetez un oeil à multiSet et multiGet, ce qui vous permet de récupérer plusieurs clés dans un seul appel de fonction. Et getAllKeys vous évitera de "garder la trace de toutes les clés que vous avez créées", résolvant ainsi les deux problèmes mentionnés par Fredrick Motte.

Pour mettre à jour de nombreuses clés en un seul appel, consultez multiMerge qui est une méthode très puissante, similaire à mergeItem mais plusieurs clés à la fois. Donc, vous voyez que vous pouvez vraiment aller n'importe quelle route. Si vous divisez vos données en plusieurs clés, alors vous voudrez probablement passer du temps à vous familiariser avec les méthodes que j'ai mentionnées plus haut.

Et la suggestion de David de donner un coup d'oeil à Relm pourrait aussi avoir de la valeur pour vous, encore une fois ... selon votre besoin.

3

Pour faciliter l'utilisation, je stockerais la liste dans son ensemble; depuis lors, vous n'avez pas besoin de garder une trace de toutes les clés que vous avez créées pour chaque contact individuellement; et les charger/les sauvegarder sera plus facile (un seul appel de fonction au lieu de boucler tous vos contacts).

Mais c'est surtout une préférence personnelle; il n'y a aucune contrainte réelle pour l'une des deux méthodes.

1

Je voudrais ajouter aux deux bonnes réponses de Chris et Frederick: cela dépend de la taille de votre liste, et la taille de vos documents.

Aller avec une liste dans son ensemble est beaucoup plus facile à gérer, mais pas à l'échelle (le calcul deviendra plus lourd avec la taille de votre valeur globale). aller avec une clé par élément ajoute de la complexité mais échelles.

Personnellement, j'ai commencé avec tout en une seule clé, et maintenant je suis en train de refactoriser d'avoir un document par clé, parce que lorsque je traite des centaines de gros documents, les performances se dégradent clairement. Et si vous manipulez des milliers ou des dizaines de milliers d'éléments, je pense que vous devriez opter pour une base de données appropriée comme sqlite ou realm (mais le débogage est un problème pour le moment dans le domaine).

serait intéressé de connaître les véritables limites de asyncStorage, je l'ai lu quelque part, il était quelques méga-octets à moins que vous demandez dans votre config native pour augmenter