【发布时间】:2021-10-30 20:48:39
【问题描述】:
我使用打击代码从火力基地获取数据:
import firebase from 'firebase';
import 'firebase/database'
firebase.database().ref().child('users').on('value',(snapshot)=>{
if(snapshot.exists()){
snapshot.forEach((datasnapshot)=>{
data.push({key: datasnapshot.key.toString()})
})
} else {
data.push({key: 'No one has written yet'})
}
});
var data = [];
export default data;
后来我尝试导入变量数据显示如下:
import React from 'react';
import {StyleSheet, Text, StatusBar, View, TouchableOpacity, ScrollView } from 'react-native';
import firebase from 'firebase';
import 'firebase/database'
import data from './getdata';
export default function Index({navigation}) {
return (
<View style={styles.container}>
<Text style={{color: '#000000', fontSize: 30, fontWeight: 'bold', marginTop: StatusBar.currentHeight}}>Index</Text>
<ScrollView>
{data.map((item,key)=>{
if(item.key == "No one has written yet"){return(<Text key={key} style={styles.item}>{item.key}</Text>)}
else{
return(
<TouchableOpacity key={key} onPress={()=>navigation.navigate('Details',item.key)}>
<Text style={styles.item}>{item.key}</Text>
</TouchableOpacity>
)
}
})}
</ScrollView>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
item: {
marginTop: 10,
fontSize: 20,
fontWeight: 'bold',
color: '#000000',
textAlign: 'center'
}
});
问题是它不显示在“数据”数组被“push()”函数更新后存储的数据,直到我再次保存它并在“expo go”应用程序中刷新代码。
这是应用打开时最初显示的图像:
【问题讨论】:
-
加载数据是一个异步操作,当你的
export default data;运行时,data.push({key: datasnapshot.key.toString()})还没有运行,所以你返回一个空数组。解决方案是将数据存储在状态中,并在您从数据库获得更新时对其进行更新。例如:stackoverflow.com/a/64211296/209103 和 stackoverflow.com/questions/65469282/…
标签: javascript reactjs react-native firebase-realtime-database