我正在尝试用来自多个数组的数据生成按钮。
其中一个数组是动态的,它在constructor()中生成。
问题是,当我试图导航到屏幕时,我收到一条错误消息,说"索引1处的绑定值为空"。错误没有指向我代码中的任何一行,相反,它说这个问题与sqlite和asyncstorage有关。
我不知道为什么会发生这种情况,但可能与generatedData状态没有正确初始化有关。
我不知道该怎么办才能解决这个问题,任何帮助都将不胜感激。
下面是代码:
import React, { Component } from 'react';
import {
Text,
View,
TouchableOpacity,
} from 'react-native';
class DataApp extends Component {
constructor() {
super()
this.state = {
dataLocalIds: [
"data1Data",
"data2Data",
"data3Data",
"data4Data",
"data5Data",
"data6Data"
],
dataLabel: [
"[ data 1 ]",
"[ data 2 ]",
"[ data 3 ]",
"[ data 4 ]",
"[ data 5 ]",
"[ data 6 ]",
],
generatedData: [],
}
this.state.dataLocalIds.map((value, index) => {
this.data = this.getDatas(value);
})
}
async getDatas(value) {
try {
const value = await AsyncStorage.getItem(value).then(val => {
let jsonInit = {};
jsonInit[value] = value;
let newArray = this.state.generatedData;
newArray.push(jsonInit);
this.setState(generatedData: newArray);
return JSON.parse(val)
});
return value
} catch (err) {
throw err
}
}
renderScreen = () => {
var myData = JSON.parse(this.state.generatedData);
return (
{this.state.dataLabel.map((item, index) => {
return(
<TouchableOpacity onPress={}>
<Text>{this.state.generatedData[index] === "{}" ? item : "foo: " + generatedData.foo + " / bar: " + generatedData.bar}</Text>
</TouchableOpacity>
)
})}
);
}
render() {
return (
this.renderScreen()
);
}
}
export default DataApp;
4条答案
按热度按时间xxhby3vn1#
我有这个问题,这是因为我已经发送空值到
AsyncStorage.getItem()
,当我改变它。它解决了。eni9jsuy2#
当您尝试在应用程序启动/注册之前使用
AsyncStorage
时,可能会出现此问题。如果是这样,尝试将调用
AsyncStorage
的代码移到componenDidMount
/useEffect
钩子(在执行此逻辑时,可以呈现加载/空视图)。eaf3rand3#
但是我在使用一个 Package AsyncStorage的库时也遇到了同样的错误,这个库叫做react-native-simple-store,问题是我试图使用一个还没有准备好的变量从存储中获取数据(它是空的/未定义的)。这个变量只有在渲染后的某个时间后才会准备好。所以我所做的是添加一个if条件,如果它的空值不做任何事情,当状态改变并且组件重新呈现时,变量现在就绪,因此它将进入if语句并访问存储。
osh3o9ms4#
首先你应该
import {AsyncStorage} from 'react-native'
那么你必须定义一个唯一的键
const ASYNC_STORAGE_COMMENTS_KEY = 'ANYTHING_UNIQUE_STRING'
调用
AsyncStorage.setItem
时,第一个参数应为ASYNC_STORAGE_COMMENTS_KEY
,第二个参数应为使用stringify的json数据例如
AsyncStorage.setItem(ASYNC_STORAGE_COMMENTS_KEY, JSON.stringify(data));
并用于获取
const your_var = await AsyncStorage.getItem(ASYNC_STORAGE_COMMENTS_KEY);