反应本机 array.map 与 asyncstorage.getItem
react-native array.map with asyncstorage.getItem
我一直在尝试使用本机反应从异步存储中检索数据。
这是我到目前为止所做的:
import React, { Component } from 'react';
import {
Text,
} from 'react-native';
class GetData extends Component {
constructor() {
super()
this.state = {
dataLocalIds: [
"data1Data",
"data2Data",
"data3Data",
"data4Data",
"data5Data",
"data6Data"
],
}
this.state.dataLocalIds.map((value, index) => {
this.data = this.getDatas(value, index);
})
}
async getDatas(value, index) {
try {
const value = await AsyncStorage.getItem(value).then(val => {
return JSON.parse(val)
});
return value
} catch (err) {
throw err
}
}
renderScreen = () => {
return (
<Text> Hello World </Text>
);
}
render() {
return (
this.renderScreen()
);
}
}
export default GetData;
问题是:应用程序崩溃并出现错误,“索引 1 处的绑定值为空”。
Stacktrace 没有指向我的代码中的行。相反,它指向 sqlite 和 asyncstorage。
我真的不知道如何解决这个问题。帮助将不胜感激。
嗨,MacFlyer,您尝试过使用 multiget (https://facebook.github.io/react-native/docs/asyncstorage.html#multiget) 吗?
可能是由于您的 getData() 方法的参数名称是 value 并且您在 try 块中声明了一个新变量 const value。
当值被传递给 AsyncStorage 时,如果发现声明了一个变量(JS 解析和标记化阶段)但它的值为 undefined
,它会搜索对直接作用域(try 块)的引用。所以 undefined
被传递给 AsyncStorage.getItem 方法。
尝试重命名其中之一。
1) this.myFunction = this.myFunction.bind(this)
在构造函数中我认为可以解决。
你还有一个问题。
Getdatas 函数是异步的并且 returns promise
2)
const promises = this.state.dataLocalIds.map((value, index) => this.getDatas(value, index));
const [data1, data2, ] = await Promise.all(promises)
3) 名为 value
的变量已经在 geDatas 作用域
中声明
尝试修复并告知我们
试试这样的东西:
constructor(){
super();
this.state={...}
this.getDataFromAsyncStorage()
}
async getDataFromAsyncStorage() {
let dataArray = [];
for (let value of this.state.localIds){
let data = await AsyncStorage.getItem(value);
dataArray.push(data)
}
this.data = dataArray;
}
我一直在尝试使用本机反应从异步存储中检索数据。
这是我到目前为止所做的:
import React, { Component } from 'react';
import {
Text,
} from 'react-native';
class GetData extends Component {
constructor() {
super()
this.state = {
dataLocalIds: [
"data1Data",
"data2Data",
"data3Data",
"data4Data",
"data5Data",
"data6Data"
],
}
this.state.dataLocalIds.map((value, index) => {
this.data = this.getDatas(value, index);
})
}
async getDatas(value, index) {
try {
const value = await AsyncStorage.getItem(value).then(val => {
return JSON.parse(val)
});
return value
} catch (err) {
throw err
}
}
renderScreen = () => {
return (
<Text> Hello World </Text>
);
}
render() {
return (
this.renderScreen()
);
}
}
export default GetData;
问题是:应用程序崩溃并出现错误,“索引 1 处的绑定值为空”。
Stacktrace 没有指向我的代码中的行。相反,它指向 sqlite 和 asyncstorage。
我真的不知道如何解决这个问题。帮助将不胜感激。
嗨,MacFlyer,您尝试过使用 multiget (https://facebook.github.io/react-native/docs/asyncstorage.html#multiget) 吗?
可能是由于您的 getData() 方法的参数名称是 value 并且您在 try 块中声明了一个新变量 const value。
当值被传递给 AsyncStorage 时,如果发现声明了一个变量(JS 解析和标记化阶段)但它的值为 undefined
,它会搜索对直接作用域(try 块)的引用。所以 undefined
被传递给 AsyncStorage.getItem 方法。
尝试重命名其中之一。
1) this.myFunction = this.myFunction.bind(this)
在构造函数中我认为可以解决。
你还有一个问题。
Getdatas 函数是异步的并且 returns promise 2)
const promises = this.state.dataLocalIds.map((value, index) => this.getDatas(value, index));
const [data1, data2, ] = await Promise.all(promises)
3) 名为 value
的变量已经在 geDatas 作用域
尝试修复并告知我们
试试这样的东西:
constructor(){
super();
this.state={...}
this.getDataFromAsyncStorage()
}
async getDataFromAsyncStorage() {
let dataArray = [];
for (let value of this.state.localIds){
let data = await AsyncStorage.getItem(value);
dataArray.push(data)
}
this.data = dataArray;
}