javascript - 在 React-native 的异步存储中扩展和显示数组
问题描述
我正在尝试将用户输入添加到 AsyncStorage 中的特定数组。我不确定我当前的代码是否正在执行此操作。我无法通过“alert()”显示它,目前我收到此错误:
the bind value at index 1 is null"
async addAvailableActivity(){
try {
AsyncStorage.getItem('availableActivities')
.then(activities => {this.availableActivities = JSON.parse(activities)})
} catch (error) {
alert('Couldnt load activities!')
}
let newActivity = this.state.newActivity
this.availableActivities.push(newActivity)
try {
AsyncStorage.setItem('availableActivities', JSON.stringify(this.availableActivities))
} catch (error) {
alert('Couldnt add activity!')
}
}
async displayAvailableActivities(){
AsyncStorage.getItem(this.availableActivities).then(activities => {alert(activities)})
}
解决方案
您的代码存在一些问题,首先,availableActivities
如果您想像这样定义它的范围,我会将其存储在您的组件状态中。其次,当你调用一个函数时,async
你应该使用await
你的 Promise,第三也是最重要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
,最后,我修复了您最后一个函数中的错字。如果您有任何问题或我错过了分数,请告诉我
推荐阅读
- redux - 保护页面免受 Nextjs 中未登录用户的影响
- asp.net - 如何从 Visual Studio 代码本地运行 asp.net WebForms 发布的站点
- flutter - 如何制作颤振图表折线图?
- recaptcha-v3 - Oracle ADF 中的 Google ReCaptcha 实施
- swiftui - SwiftUI 大小以适应或自动换行导航标题
- reactjs - 我是否正确理解了 next-redux-wrapper 的行为?
- java - 在哪里可以找到适用于 Java 的 Google App Engine API 发行说明
- android - 使用 viewBinding 时 SetTheme 不起作用
- javascript - next-redux-wrapper 中的空状态
- php - 如何在不破坏图像、CSS 和 JavaScript 的情况下实现友好的 URL?