La récupération de données à partir de notre base de données locale n'est pas si différente de la récupération à partir d'un serveur Web, au lieu de
tendre la main à un serveur Web, nous tendons simplement la main à notre base de
données locale, mais c'est tout.
Commençons donc par écrire une fonction dans le fichier d'assistance db qui nous permet de récupérer les données de la base de données.
Pour cela, là-bas, j'exporterai une nouvelle constante, récupérera les lieux, qui devrait faire ce que le nom suggère, ne prend aucun argument et là bien sûr, je veux accéder
à ma base de données et obtenir tous les lieux. Je vais donc copier ce code ici à
partir de l'insertion avec la promesse et ainsi de suite, mais
la requête va changer maintenant et aussi les arguments, je n'ai besoin d'aucun argument car nous n'injecterons
aucun argument ici.
Au lieu de lancer l'insertion dans, nous devons exécuter une requête différente et ce sera
une requête très simple, je veux sélectionner tous les endroits dans ma table des endroits, ce qui se fait en exécutant select
* ce qui signifie que je veux obtenir toutes les colonnes, tous les champs dans cette base de données des endroits.
Maintenant, si vous connaissez un peu de SQL, vous pouvez maintenant ajouter une clause where pour indiquer où ID supérieur, par exemple et ainsi de suite, mais je ne
le ferai pas ici, je veux obtenir
tous les endroits, donc je vais exécuter cette requête et laisser le reste tel qu'il est et
maintenant nous devons simplement aller à nos actions et nous assurer que nous avons une action pour cela.
Donc, tout d'abord, je vais ajouter un nouvel identifiant ici,
un nouvel identifiant d'action, définir des lieux, tout comme nous l'avons fait dans le module HTTP pour définir les lieux que
nous avons récupérés à partir d'un serveur et avec cela, je peux créer un nouveau créateur d'action ici où je dis peut-être charger des endroits, où c'est le nom et dans
ce créateur d'action, je vais retourner cette fonction interne et j'utilise async attendre là-bas, donc cette fonction ressemble à ceci, où
à la fin bien sûr, nous envoyons une action objet où le type doit être défini et
où nous avons défini tous les emplacements que
nous avons chargés, mais bien sûr, c'est la partie qui manque. Nous obtenons les emplacements en exécutant cette fonction d'extraction des emplacements que je viens
de définir dans le fichier helpers, dans le fichier db, alors
importons-le à partir de là,
puis ici dans le créateur d'action de chargement des emplacements, nous pouvons exécuter des emplacements d'extraction comme celui-ci, ce renvoie une
promesse afin que nous puissions attendre
cela et encore une fois, nous obtenons notre résultat db ici.
Maintenant, nous pouvons également envelopper cela dans un bloc try catch pour nous assurer que nous interceptons toutes les erreurs qui pourraient se produire,
donc ici, si nous avons une erreur, je vais la jeter, nous
devons donc la gérer dans le composant en fait, je suis
ne le faisant pas ici, mais vous pouvez le gérer de la même manière que vous l'avez géré dans
le module HTTP par exemple et avec
cela ici finalement, également dans le bloc try, nous pouvons répartir les endroits que nous recherchons. Pour cela, il est important pour nous de comprendre à quoi ressemble le résultat
de la base de données.Je vais donc consolider le résultat
de la base de données de journal ici afin que nous puissions l'examiner et maintenant je veux exécuter des lieux de chargement dans mon
écran de liste des lieux car c'est là que j'ai besoin de tout les lieux, non?
Donc ici, j'importerai des actions étoiles comme lieux à partir du dossier de stockage et là, le fichier d'actions de lieux et nous devons envoyer une
action, donc j'importerai use dispatch de React Redux puis ici nous créerons cette fonction de répartition en
exécutant use répartir et maintenant lorsque ce composant se
charge, que nous pouvons finalement découvrir à l'aide de l'effet d'utilisation, je veux répartir cette
action de chargement de données.
Donc, ici, nous pouvons exécuter use effect et dans la fonction que nous transmettons à use
effect, je veux répartir les actions des lieux. loadPlaces, à
droite, comme ça. Maintenant, cela signifie que pour cet effet, nous avons une dépendance, c'est l'action de répartition qui
ne devrait jamais changer, donc cela ne
devrait s'exécuter qu'une seule fois lorsque le composant est créé, ce qui est exactement le comportement que je
veux ici.
Alors maintenant, l'action de chargement des lieux devrait être envoyée au démarrage de notre application et en effet,
elle a déjà démarré ici sur iOS et maintenant également sur Android et donc ici dans le journal, je
vois une sortie et c'est le journal Android et c'est le résultat de la charge
place l'action à la fin. Comme vous le voyez, c'est le résultat
de notre action de base de données, l'ID d'insertion n'est pas défini car nous n'avons pas inséré quelque chose, nous avons juste obtenu quelque chose.
Nous avons ce champ de lignes et c'est un autre objet qui a un champ _array qui contient un tableau d'objets
et à la fin, ce sont nos données de lieu, non?
Cet objet ici, ce sont nos
données de lieu, il a l'adresse, l'ID, imageUri et ainsi de suite.
C'est donc dans le résultat en lignes puis _array, c'est là que
vivent nos données.
C'est donc ce dont nous avons besoin dans le fichier d'actions de lieux ici lorsque nous distribuons nos lieux que nous
voulons afficher, que nous voulons
charger dans Redux, qui devrait être dbResult. Lignes. _array.
Maintenant, bien sûr, cela déclenche ensuite les actions de définition des lieux, alors maintenant dans le réducteur de lieux,
nous devons
nous en préoccuper, alors ici j'ajoute un cas, des lieux définis,
assurez-vous d'importer l'identifiant des lieux définis ici et dans les lieux définis Dans ce cas, je peux retourner un nouvel instantané d'état
où mes emplacements sont fondamentalement définis aux emplacements que j'ai récupérés de la base de données et
je le fais en le mettant en action. places parce que dans mon fichier d'actions, j'ai cette clé
places dans
le droit d'action qui est les
données de lieu chargées et là je veux juste mapper ce tableau dans un nouveau tableau pour transformer les données, pour transformer chaque endroit en un nouvel
endroit qui suit mon modèle de lieu où je convertis par exemple l'ID de l'endroit que nous avons chargé en une chaîne qui est facultative,
je veux juste vous montrer comment vous pouvez
également transformer ensuite les données si vous en avez besoin, vous pouvez le
faire avec la méthode map qui mappe ce tableau dans un nouveau tableau.
Donc
là je fais ça, je garde le titre cependant, je garde l'imageUri et je n'ai juste pas besoin d'adresse et de latitude et ainsi de suite
en ce moment, c'est
aussi pourquoi je mappe ceci pour que je puisse établir des données, donc
maintenant, je mappe ce tableau de lieux que je charge dans un nouveau tableau de lieux où je ne me soucie que de l'ID,
du titre et de l'imageUri.
Maintenant, avec cela, si nous enregistrons cela, nous devrions en fait être en mesure de voir nos lieux chargés ici sur Android, cet
endroit que nous avons stocké avant et en effet, le voici. C'est donc notre place, cette place
est chargée. Avec cela, nous pouvons
maintenant nous concentrer sur l'obtention de l'emplacement de l'utilisateur bien sûr.