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中,得到了相同的结果。我究竟做错了什么?
有人请帮忙。
感谢您指出了这一点。傻我。 –