Есть несколько проблем с вашим кодом, во-первых, я бы сохранил availableActivities
в состоянии вашего компонента, если вы хотите охватить его таким образом.Во-вторых, когда вы вызываете функцию async
, вы должны использовать await
для своих обещаний, третье и самое важное AsyncStorage.getItem(this.availableActivities)
это похоже на опечатку, но AsyncStorage
пары значений ключа должны быть строками.
Вот обновление вашего кода, которое, я думаю, обеспечит необходимую вам функциональность:
addAvailableActivity = async () => {
try {
let activities = await AsyncStorage.getItem('availableActivities')
let { newActivity } = this.state
if (activities != null) {
activities = JSON.parse(activities)
activities.push(newActivity)
await AsyncStorage.setItem( 'availableActivities', JSON.stringify(activities) )
}
} catch (error) {
console.warn(error)
}
}
displayAvailableActivities = () => {
let activities = await AsyncStorage.getItem('availableActivities')
console.warn(JSON.parse(activities))
}
обратите внимание, что я изменил объявления функций, это не обязательно, ноэто препятствует тому, чтобы они были связаны с вашим конструктором.async / await
является альтернативным синтаксисом .then
, который намного чище и проще для чтения.Чтобы проверить, вернул ли AsyncStorage значение, лучше всего проверить его по null
и, наконец, я исправил опечатку в вашей последней функции.Дайте мне знать, если у вас есть какие-либо вопросы или я пропустил оценку