2017-09-07 15 views
0

Ich möchte Häuser in einem Array mit AsyncStorage speichern. Jedes Array-Element repräsentiert ein Hausobjekt. Und jedes Hausobjekt hat eine Breite, eine Länge und eine Hausnummer. Ich bin mir nicht sicher, wie ich das darstellen soll. Es scheint mir, dass AsyncStorage nicht geeignet ist, dynamische Objekte zu speichern, die programmgesteuert aktualisiert werden können. Ich möchte in der Lage sein, weitere Häuser hinzuzufügen und einige Häuser zu löschen. Im Grunde versuche ich, einige Häuser zu markieren und sie aus den Lesezeichen zu löschen, wenn der Benutzer klickt. Kann jemand helfen?Native AsyncStorage reagieren

+0

ich upvoted Ihre Frage auf Null zurück :) Es ist eine Wand des Textes ist, aber ich denke, es ist eine kluge Frage gegeben, wie AsyncStorage in der RN-Dokumentation dokumentiert. Sie müssen Strings speichern, aber Sie können sie tatsächlich stringifizieren und aktualisierte Felder zusammenführen, siehe 'AsyncStorage.mergeItem()'. Die Antwort auf Ihre Frage ist auch sehr gut gemacht. – agm1984

Antwort

2

AsyncStorage ist absolut perfekt dafür.

Beginnend mit der Struktur Ihrer Häuser, würde ich ein Array erstellen, die Objekte speichert, die ein einzelnes Haus darstellen.

const houses = [ 
    { 
    number: 1, 
    latitude: 51.5033, 
    longitude: -0.119519 
    } 
] 

Speichern auf AsyncStorage

Wenn Sie Ihre Sammlung AsyncStorage schreiben wollen, würden Sie so tun, wie folgt:

AsyncStorage 
    .setItem('@houses', JSON.stringify(houses)) 
    .then(houses => console.log(houses) 

static setItem(key: string, value: string, callback?: ?(error: ?Error) => void)

Sie auch async/await verwenden können, wenn Ihr Projekt ist darauf ausgerichtet, es zu unterstützen.

von AsyncStorage Lesen

Ihre Sammlung von AsyncStorage Rücklesen wird einfach über getan:

AsyncStorage 
    .getItem('@houses') 
    .then(houses => console.log(JSON.parse(houses))) 

Sie die Antwort in Ihrem Zustand einstellen könnten, wie Sie bitte.

ein bestimmtes Haus Löschen

Das hängt ganz davon ab, wie Sie Ihre App einrichten. Gehst du zu map durch jedes Haus und erstelle eine Listenkomponente zum Beispiel?

enter image description here

(Sorry über die Grenze auf der rechten Seite zu verlieren)

Wenn ja, könnten Sie:

houses.map(house => (
    <View> 
    <Text>Number: {house.number}</Text> 
    <Text>Latitude: {house.latitude}</Text> 
    <Text>Longitude: {house.longitude</Text> 
    <Button onPress={() => this.deleteHouse(house.number)}/> 
    </View> 
)); 

Dann erstellen Sie eine deleteHouse Funktion, die damit umgehen wird.

const deleteHouse = (number) => { 
    const { houses } = this.state; // Assuming you set state as previously mentioned 
    const newHouses = houses.filter((house) => house.number != number); 
    this.setState({houses: newHouses},() => saveHouses); 
} 

Und schließlich ein saveHouses es zurück zu AsyncStorage zu synchronisieren. Die Funktion löscht AsyncStorage und speichert dann die neuen Häuser.

const saveHouses =() => { 
    const { houses } = state; 
    AsyncStorage 
    .removeItem('@houses') 
    .then(() => { 
     AsyncStorage 
     .setItem('@houses', JSON.stringify(houses)) 
     .then(houses => console.log(houses) 
    }); 
} 
0

Sie benötigen eine SQLite-Alternative wie Realm, es ist kostenlos, schnell und einfach zu programmieren, mit dieser werden Sie Tonnen von Stunden Arbeit sparen, auch wenn Sie benötigen, können Sie Abfragen, aktualisieren und löschen Sie Objekte.

Verwandte Themen