Javascript 如何使用钩子从react native中的firebase实时数据库读取数据
下面是我所做的Javascript 如何使用钩子从react native中的firebase实时数据库读取数据,javascript,react-native,firebase-realtime-database,react-native-flatlist,react-native-firebase,Javascript,React Native,Firebase Realtime Database,React Native Flatlist,React Native Firebase,下面是我所做的 useEffect(() => { database() .ref(`/User/`) .on('value', function(snapshot) { const list = []; snapshot.val(doc => { const { name, email} = snapshot.val(); list.push({
useEffect(() => {
database()
.ref(`/User/`)
.on('value', function(snapshot) {
const list = [];
snapshot.val(doc => {
const { name, email} = snapshot.val();
list.push({
id: doc.id,
name,
email,
});
});
setUsers(list);
setLoading(false);
console.log('User data: ', snapshot.val());
});
}, [userId]);
它会在控制台上显示来自数据库的信息,但不会显示在应用程序上,为firebase firestore执行此操作效果良好,但不会将任何信息加载到应用程序页面
下面是我如何使用flatlist和list.item标记在应用程序中显示数据库中的数据
<FlatList
data={users}
ItemSeparatorComponent={() => <Divider />}
keyExtractor={item => item.id}
renderItem={({ item }) => (
<TouchableOpacity
onPress={() => navigation.navigate('Room', { thread: item })}
>
<List.Item
title={item.name}
description={item.email}
titleNumberOfLines={1}
titleStyle={styles.listTitle}
descriptionStyle={styles.listDescription}
descriptionNumberOfLines={1}
/>
</TouchableOpacity>
)}
}
keyExtractor={item=>item.id}
renderItem={({item})=>(
导航('Room',{thread:item})}
>
)}
/>
我使用的是react-native和firebase的最新版本,您不应该再次将回调传递给
snapshot.val()
应该是:
ref.once('value',函数(快照){
forEach(函数(userSnapshot){
var userKey=userSnapshot.key;
var userData=userSnapshot.val();
//userData['id']=userKey;
push(userData);
});
});
你也可以试试这个库
这就是成功的原因,平面列表需要一个id才能通过,非常感谢那些帮助完成好捕获的人。1) 它是
snapshot.forEach
实际上,不是snapshot.val
和2)您需要获取迭代器的val()
,否则每次都会得到/User/name
和/User/email
。users.push(id,userData);这就是有效的方法,感谢您在列表随时更新时所做的澄清,它形成了另一个数组,添加到以前的数组中,我如何使它使用更新后的数组重新生成一个数组information@RaphaelInyang可以在snapshot.forEach之前清空数组;类似于users=[]
database()
.ref(`/User/`)
.once('value', function(snapshot) { snapshot.forEach(function(userSnapshot) {
const id = userSnapshot.key;
const userData = userSnapshot.val();
userData['id'] = id;
users.push(id, userData); });});