Das Abrufen von Daten aus unserer lokalen Datenbank unterscheidet sich nicht wesentlich vom Abrufen von Daten von einem Webserver. Statt
auf einen Webserver zuzugreifen, greifen wir nur auf unsere lokale Datenbank
zu, aber das war's.
Beginnen wir also damit, eine Funktion in die Datenbank-Hilfsdatei zu schreiben, mit der wir Daten aus der Datenbank abrufen können.
Dafür exportiere ich dort eine neue Konstante, rufe Orte ab, die das tun sollen, was der Name andeutet, keine Argumente akzeptiert und dort natürlich auf
meine Datenbank zugreifen und alle Orte abrufen möchte. Also kopiere ich diesen Code hier von
der Einfügestelle mit dem Versprechen und so weiter, aber die
Abfrage ändert sich jetzt und auch die Argumente. Ich brauche keine Argumente, da wir hier keine
Argumente einfügen.
Anstatt insert in auszuführen, müssen wir eine andere Abfrage ausführen. Dies ist
eine sehr einfache Abfrage. Ich möchte alle Stellen in meiner Orts-Tabelle auswählen. Dies erfolgt durch Ausführen von select
*, was bedeutet, dass ich alle Spalten und alle Felder abrufen möchte in dieser Datenbank von Orten.
Wenn Sie sich mit SQL auskennen, können Sie jetzt auch eine where-Klausel hinzufügen, um anzugeben, wo die ID größer ist, und so weiter. Ich werde dies hier jedoch
nicht tun. Ich möchte alle Stellen abrufen,
damit ich diese Abfrage ausführen kann und lassen Sie den Rest so wie er ist und
jetzt müssen wir nur noch zu unseren Aktionen gehen und sicherstellen, dass wir eine Aktion dafür haben.
Zunächst füge ich hier eine neue Kennung hinzu, eine
neue Aktionskennung, setze Orte, genau wie im HTTP-Modul zum Festlegen der Orte, die wir von einem Server abgerufen
haben, und damit kann ich einen neuen Aktionsersteller erstellen Hier, wo ich vielleicht Ladeorte sage, wo dies der Name ist und in diesem Aktionsersteller, werde ich diese
innere Funktion zurückgeben und dort asynchrone Warten verwenden, also sieht diese Funktion so aus, wo wir am Ende
natürlich eine Aktion auslösen Objekt, in dem der Typ Orte setzen soll und an dem
wir alle Orte setzen, die wir geladen
haben, aber das ist natürlich der Teil, der fehlt. Wir erhalten die Orte, indem wir diese Funktion zum Abrufen von Orten
ausführen, die ich gerade in der Hilfedatei und in der
dortigen Datenbank definiert habe.
Importieren wir sie also von dort und dann hier im Aktionsersteller zum Laden von Orten können wir solche Abruforte
ausführen gibt ein Versprechen zurück, damit
wir darauf warten können und wieder hier unser Datenbankergebnis erhalten.
Jetzt können wir dies auch in einen try catch-Block einschließen, um sicherzustellen, dass wir alle Fehler abfangen, die auftreten könnten.
Wenn wir also einen Fehler haben, werde ich ihn einfach
werfen, also müssen wir ihn tatsächlich in der Komponente
behandeln Wenn Sie das hier nicht tun, aber Sie könnten es genauso behandeln, wie Sie es zum
Beispiel im HTTP-Modul gehandhabt haben, und
damit können wir hier schließlich auch im try-Block die Stellen versenden, die wir abrufen. Dafür ist es wichtig, dass wir verstehen, wie
das Datenbankergebnis aussieht. Daher werde ich
das Protokoll-DB-Ergebnis hier trösten, damit wir es untersuchen können. Jetzt möchte ich Ladeorte in meinem
Ortslistenbildschirm ausführen, da ich dort alle benötige die Orte, richtig?
Hier importiere ich Sterne als Platzierungsaktionen aus dem Speicherordner und dort die Platzierungsaktionsdatei, und wir müssen eine Aktion auslösen. Daher importiere
ich den Verwendungsversand aus React Redux und erstelle hier diese Versandfunktion, indem wir die
Verwendung ausführen Versand und jetzt, wenn diese Komponente
geladen wird, was wir am Ende mit Hilfe des Nutzungseffekts herausfinden können, möchte
ich diese Datenladeaktion versenden.
Hier können wir also den Use-Effekt ausführen und in der Funktion, die wir an
den Use-Effekt übergeben, möchte ich Ortsaktionen auslösen. loadPlaces,
richtig, so. Das bedeutet, dass wir für diesen Effekt eine Abhängigkeit haben, nämlich die Versandaktion, die sich
niemals ändern sollte. Daher sollte diese
Aktion nur einmal ausgeführt werden, wenn die Komponente erstellt wird. Dies ist genau das Verhalten, das ich
hier möchte.
Jetzt sollte die Aktion zum Laden von Orten ausgelöst werden, wenn unsere App gestartet wird. Tatsächlich wurde
sie hier bereits unter iOS und jetzt auch unter Android gestartet. Daher sehe ich hier im Protokoll einige
Ausgaben und das ist das Android-Protokoll und das ist das Ergebnis von der Last
platziert Aktion am Ende. Wie Sie sehen, ist dies
das Ergebnis unserer Datenbankaktion. Die ID zum Einfügen ist undefiniert, da wir nichts eingefügt haben, sondern nur etwas.
Wir haben dieses Zeilenfeld und das ist ein anderes Objekt, das ein _array-Feld hat, das ein Array von
Objekten enthält, und am Ende sind das unsere Ortsdaten, oder?
Dieses Objekt hier, das sind unsere
Ortsdaten, es hat die Adresse, die ID, imageUri und so weiter.
Es ist also das Ergebnis in Zeilen und dann _array, dort
leben unsere Daten.
Das ist es, was wir in der Ortsaktionsdatei hier brauchen, wenn wir unsere Orte versenden, die wir anzeigen
wollen, die wir in Redux
laden wollen, das sollte dbResult sein. Reihen. _array.
Das löst dann natürlich die Aktionen für festgelegte Orte aus. Jetzt müssen wir uns im Ortsreduzierer darum kümmern.
Hier füge
ich einen Fall hinzu, setze Orte und stelle sicher, dass
du die eingestellte Ortskennung hier und an den festgelegten Orten importierst In diesem Fall kann ich einen neuen Status-Snapshot zurückgeben,
bei dem meine Orte im Wesentlichen auf die Orte festgelegt sind, die ich aus der
Datenbank erhalten habe, und dies durch Aktivieren. Orte, weil ich in meiner Aktionsdatei diesen Platzierungsschlüssel im
Aktionsrecht
habe, bei dem es sich um
die geladenen Ortsdaten handelt, und dort möchte ich dieses Array nur einem neuen Array zuordnen, um die Daten zu transformieren und jeden einzelnen Ort
in einen neuen Ort umzuwandeln folgt meinem Ortsmodell, in dem ich beispielsweise die ID des von uns geladenen Ortes in eine optionale Zeichenfolge
konvertiere. Ich möchte Ihnen nur zeigen, wie
Sie die Daten bei Bedarf auch transformieren können. Dies können Sie mit
der Kartenmethode tun Dadurch wird dieses Array einem neuen Array zugeordnet.
Da
mache ich das also, ich behalte den Titel, ich behalte das imageUri und ich brauche gerade keine Adresse und keinen Breitengrad und so
weiter. Deshalb ordne
ich dies auch zu, damit ich einige Daten erstellen kann Jetzt ordne
ich diese Reihe von Orten, die ich lade, einer neuen Reihe von Orten zu, an denen mir nur die ID, der Titel
und imageUri wichtig sind.
Wenn wir dies speichern, sollten wir tatsächlich sehen können, wie unsere Orte hier auf Android geladen werden, dem einen Ort,
den wir zuvor gespeichert haben, und tatsächlich ist er hier. Das ist also unser Platz, das
ist Platz geladen. Damit können wir
uns jetzt natürlich auch darauf konzentrieren, den Benutzerstandort zu ermitteln.