我有一个现有的数组myItems和项目列表,从API (数组itemsFromApi)获取并呈现为一个Flatlist。我想把每个项目(不是一个项目数组)存储到一个现有的数组中,并将它保存在本地.
我想做的是:
将数组myItems存储为值。
我所拥有的:
重新呈现数组myItems存储数组是空的,但AsyncStorage只有一个项。
这是代码的和平:
// Array myItems, where i'd like to store the data
const [myItems, setMyItems] = useState([]);
// Array of data from api
const [itemsFromApi, setItemsFromApi] = useState([]);
// Fetch items from API and render it as a Flatlist, works good
const getItems = async () => {
const response = await api.get('/...');
setItemsFromApi(response.data)
};
<FlatList
data={itemsFromApi}
keyExtractor = { (item, index) => index.toString() }
renderItem={({ item })=>{
return (
<TouchableOpacity>
<Text>{item.id}</Text>
<Text>{item.title}</Text>
<Button title="Add" onPress={()=>{addItem(item))} />
</TouchableOpacity>
)
}}
/>
// Save fetched items to array myItems
const addItem = (item) => {
setMyItems([...myItems, item]);
storeData();
};
// trying to store array myItems using AsyncStorage
const storeData = async (myItems) => {
try {
await AsyncStorage.setItem('STORAGE_KEY', JSON.stringify(myItems));
Alert.alert('Saved', 'Successful');
} catch (error) {
Alert.alert('Error', 'There was an error.')
}
};
// trying to retrieve data
const retrieveData = async () => {
try {
const value = await AsyncStorage.getItem('STORAGE_KEY');
if (value !== null) {
console.log(JSON.parse(value))
}
} catch (error) {
console.log(error)
}
return null;
};
我肯定做错了什么,但我不明白是什么。提前感谢!
发布于 2019-12-14 20:02:50
我找到了解决办法。
它是:
const addItem = (item) => {
setMyItems([...myItems, item]);
storeData();
};
修改:
const addItem = (item) => {
myItems.push(item); // <- Here is the trick
storeData();
setMyContacts([...myItems]);
};
当我只设置
setMyContacts([...myItems , item])
时,setMyContacts([...myItems])
.发布于 2019-12-13 19:13:05
使用下面的代码。
<FlatList
data={itemsFromApi}
keyExtractor = { (item, index) => index.toString() }
renderItem={({ item })=>{
return (
<TouchableOpacity>
<Text>{item.id}</Text>
<Text>{item.title}</Text>
<Button title="Add" onPress={()=>{setMyItems([...myItems, item]))} />
</TouchableOpacity>
)
}}
/>
https://stackoverflow.com/questions/59326288
复制相似问题