2017-09-18 3 views
0

J'ai essayé d'enregistrer un tableau, j'ai essayé de suivre la documentation, mais a lamentablement échoué. Comment dois-je l'écrire afin qu'il ne me donne pas divers avertissements et erreurs.AsyncStorage React Native enregistrer un tableau

Erreurs:

  • obtenu un [objet Object] lorsque je tente de définir l'élément
  • Vous avez un objet au lieu d'un tableau
  • Tentative d'affecter à lire la propriété ne
  • attendu une chaîne, a obtenu un tableau

Voici le code: App.js

import React from 'react'; 
 
import { StyleSheet, Text, View, TextInput, ScrollView, TouchableOpacity, KeyboardAvoidingView, AsyncStorage } from 'react-native'; 
 
import Note from './app/components/note'; 
 

 
export default class App extends React.Component { 
 

 
    state = { 
 
    noteArray: [], 
 
    noteText: '', 
 
    } 
 

 
    render() { 
 

 
    let notes = this.state.noteArray.map((val, key) => { 
 
     return <Note key={key} keyval={key} val={val} deleteMethod={()=>this.deleteNote(key) } /> 
 
    }); 
 

 
    return (
 
     <KeyboardAvoidingView behavior="padding" style={styles.container}> 
 

 
     <View style={styles.header}> 
 
      <Text style={styles.headerText}>Tasker</Text> 
 
     </View> 
 

 
     <ScrollView style={styles.scrollContainer}> 
 
      {notes} 
 
     </ScrollView> 
 

 
     <View style={styles.footer}> 
 
      <TouchableOpacity onPress={this.addNote.bind(this)} style={styles.addButton}> 
 
      <Text style={styles.addButtonText}>+</Text> 
 
      </TouchableOpacity> 
 

 
      <TextInput style={styles.textInput} placeholder='Enter Task...' placeholderTextColor='white' 
 
      underlinedColorAndroid='transparent' onChangeText={(noteText) => this.setState({noteText})} 
 
      value={this.state.noteText}></TextInput> 
 
     </View> 
 

 
     </KeyboardAvoidingView> 
 
    ); 
 
    } 
 

 
    addNote() { 
 
    if (this.state.noteText) { 
 
     var d = new Date(); 
 
     this.state.noteArray.push({'date' : d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate(), 'note' : this.state.noteText}); 
 
     this.setState({noteArray: this.state.noteArray}); 
 
     this.setState({ noteText: '' }); 
 
    } 
 

 
    
 
    //AsyncStorage.setItem() How do I write it so no errors occur 
 
    alert({noteArray: this.state.noteArray}) 
 
    }

Remarque supplémentaire: L'erreur est sur App Expo sur mon téléphone Android et iOS

Merci à l'avance!

+0

'addNote()' est incorrect. Vous devriez considérer «cet état» comme immuable. Faites-en une copie et modifiez la copie, puis 'setState' avec la copie une seule fois. –

+0

comment je fais ça? s'il vous plaît pouvez-vous me fournir un guide ou un code? Im toujours un noob à ce –

+1

Google? Voici [un] (https://github.com/facebook/immutable-js/wiki/Immutable-as-React-state) –

Répondre

1

Les tableaux et autres objets doivent être enregistrés en tant que chaînes dans AsyncStorage.

AsyncStorage.setItem('arrayObjKey', JSON.stringify(myArray)); 

Aussi, si vous devez mettre à jour les valeurs dans le tableau utiliser AsyncStorage.multiMerge

De REACT-native docs:

Fusionne une valeur clé existante avec une valeur d'entrée, en supposant les deux valeurs sont JSON stringifiés. Retourne un objet Promise.

+0

La seule amélioration que je pourrais suggérer est d'inclure une partie du code OP (Original Poster's) à montrez comment cela correspond à leur exemple, car il/elle a mentionné qu'ils sont débutants. – ContinuousLoad