【发布时间】:2018-04-04 16:08:12
【问题描述】:
我正在尝试将一组对象保存在异步存储中,这些对象将呈现为列表。用户将能够向数组中添加新项目并更新和删除每个项目。
目前,在保存数据时,我发现我的对象数组只包含 1 个对象,并且每次添加新对象时,都会覆盖以前的对象。
也许这与用于创建每个项目的密钥有关,但我不确定在使用 Async 时如何自动生成唯一密钥?
随后,当将 async 设置为 state 时,我在渲染列表时只有 1 项要循环。
List.js
constructor(props) {
super(props);
this.state = {
data: []
};
}
onLoad = async () => {
try {
const data = [];
const item = await AsyncStorage.getItem('@foods');
const d = JSON.parse(item);
const { title } = d;
data.push({ title });
this.setState({ data });
console.log(this.state);
} catch (error) {
alert('Error', 'There was an error while loading the data');
}
}
render() {
return (
<View>
<FlatList
data={this.state.data}
renderItem={({ item }) => <Text>{item.title}</Text>}
/>
</View>
);
}
AddItem.js 标题(处于状态)由用户输入设置
constructor(props) {
super(props);
this.state = {
title: ''
};
}
saveData = () => {
const { title } = this.state;
const data = {
title
};
AsyncStorage.setItem('@foods', JSON.stringify(data));
alert('save success');
}
我的对象数组应该如下所示:
const list = [
{
title,
description,
servingSize,
servingNum
},
{
title,
description,
servingSize,
servingNum
}
.....etc
]
【问题讨论】:
-
您尝试过 Promise.all 吗?这是最简单的方法
-
@RaajNadar 我会在哪里包含它?
-
等等,我给你举个例子!
-
那么你知道数组中插入了多少项或设置以及获取两者都是动态的吗??
-
@RaajNadar 是的,两者都是动态的,用户应该能够创建、更新和删除任意数量的项目(出于性能原因,我想在未来对其进行限制)
标签: reactjs react-native