2017-05-29 43 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

感谢您指出了这一点。傻我。 –

相关问题