2017-05-29 55 views
0

AsyncStorage不讓我覆蓋或刪除數據。AsyncStorage無法正常工作與Android本身的反應

這是我的數據

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: [], 
    } 
]; 

以下功能,我想保存和檢索AsyncStorage。

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); 
} 

我的渲​​染功能包含以下

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)} 
       />); 

沒有什麼錯的狀態和道具。註釋掉所有的AsyncStorage內容並記錄狀態和道具的結果。

我認爲這裏的主要問題是由AsyncStorage.getItem引起的。沒有這個方法,所有的功能和東西都按預期工作。我試着把它放在componentWillUpdate和componentWillMount中,得到了相同的結果。我究竟做錯了什麼?

有人請幫忙。

回答

0

當您調用AsyncStorage.getItem('allData')時,您從promise中返回的第一項是錯誤對象。第二項將是你想要的數據。

試試這個:

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

感謝您指出了這一點。傻我。 –

相關問題