2017-05-29 15 views
0

AsyncStorage lässt mich nicht überschreiben oder Daten entfernen.AsyncStorage funktioniert nicht ordnungsgemäß mit reagieren native auf Android

Dies ist meine Daten

const allData = [ 
    { 
    txnId: '012', 
    category: '', 
    time: 'Today, 2:00pm', 
    amount: 129, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '011', 
    category: '', 
    time: 'Today, 1:00pm', 
    amount: 20, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '010', 
    category: '', 
    time: 'Today, 10:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '009', 
    category: '', 
    time: 'Yesterday, 11:40pm', 
    amount: 649, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '008', 
    category: '', 
    time: 'Yesterday, 6:00pm', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '007', 
    category: '', 
    time: 'Yesterday, 11:30am', 
    amount: 2200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '006', 
    category: '', 
    time: 'Yesterday, 09:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '005', 
    category: '', 
    time: 'Yesterday, 10:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    {  
    txnId: '004', 
    category: '', 
    time: 'Yesterday, 09:00am', 
    amount: 200, 
    type: 'Personal', 
    images: [], 
    }, 
    { 
    txnId: '003', 
    category: 'Travel', 
    time: 'Today, 12:20pm', 
    amount: 2300, 
    type: 'Business', 
    status: 'Pending', 
    images: [], 
    }, 
    { 
    txnId: '002', 
    category: 'Food', 
    time: 'Today, 12:02pm', 
    amount: 1000, 
    type: 'Business', 
    status: 'Rejected', 
    images: [], 
    }, 
    { 
    txnId: '001', 
    category: 'Food', 
    time: 'Yesterday, 07:00am', 
    amount: 200, 
    type: 'Business', 
    status: 'Approved', 
    images: [], 
    } 
]; 

Folgende Funktionen sind, wo ich von AsyncStorage speichern möchten, und abzurufen.

componentDidMount() { 
AsyncStorage.getItem('allData').then(res => { 
    this.setState({ 
    allData: JSON.parse(res), 
    }); 
}); 
console.log(this.state.allData); 
} 

componentWillUnmount() { 
AsyncStorage.removeItem('allData'); 
AsyncStorage.setItem('allData', JSON.stringify(this.state.allData)); 
BackAndroid.removeEventListener('hardwareBackPress', this.handlesBackButton); 
} 

setCategory(index) { 
const newData = this.state.allData.map((item, i) => { 
    const value = item; 
    if (i === index) { 
    value.type = item.type === 'Personal' ? 'Business' : 'Personal'; 
    value.status = item.type === 'Personal' ? '' : 'Pending'; 
    value.category = item.type === 'Personal' ? '' : 'Select category'; 
    } 
    return value; 
}); 
AsyncStorage.mergeItem('allData', JSON.stringify(newData)); 
this.setState({ 
    allData: newData, 
}); 
console.log(this.state.allData); 
} 

meine Funktion machen enthält die folgenden

return (
       <Transactions 
        allData={this.state.allData} 
        setCategory={(index, category) => { 
        const newData = this.state.allData.map((item, i) => { 
         const value = item; 
         if (index === i) { 
         value.category = category; 
         } 
         return value; 
        }); 
        AsyncStorage.mergeItem('allData', JSON.stringify(newData)); 
        this.setState({ 
         allData: newData, 
        }); 
        console.log(this.state.allData); 
        }} 
        onChange={this.setCategory.bind(this)} 
       />); 

Es ist nichts falsch mit dem Staat und Requisiten. Das Kommentieren aller AsyncStorage-Sachen und das Protokollieren des Zustands und der Requisiten ergibt das erwartete Ergebnis.

Ich denke, dass das Hauptproblem hier von AsyncStorage.getItem verursacht wird. Ohne diese Methode funktionieren alle Funktionen und Dinge wie erwartet. Ich habe versucht, es auch in ComponentWillUpdate und ComponentWillMount zu setzen und habe das gleiche Ergebnis erhalten. Was mache ich falsch?

Jemand bitte helfen.

Antwort

0

Wenn Sie AsyncStorage.getItem ('allData') aufgerufen haben, ist das erste Objekt, das Sie vom Versprechen erhalten haben, das Fehlerobjekt. Der zweite Punkt sind die gewünschten Daten.

Versuchen Sie folgendes:

AsyncStorage.getItem('allData').then((error, res) => { 
    this.setState({ 
    allData: JSON.parse(res), 
    }); 
}); 
+0

Vielen Dank für den Hinweis. Wie dumm von mir. –

Verwandte Themen