reactjs - 我无法使用 Hooks 在 React Native 的屏幕上显示从 Firebase 实时数据库获得的数据
问题描述
我最近开始在 React Native 中使用 Hooks,我正在尝试从 Firebase 实时数据库中获取数据并将其呈现在 FlatList 中。数据通过 console.log 以对象数组的形式显示在控制台上,但并未呈现在屏幕上。我究竟做错了什么?如何使其正常工作?
我的代码:
import React, { useState, useEffect } from "react";
import { StyleSheet, View, Text, FlatList, ActivityIndicator } from 'react-native';
import firebase from '@firebase/app';
import '@firebase/database';
export default function QuestList({ navigation }) {
const title = navigation.getParam('title');
const [data, setData] = useState([]);
useEffect(() => {
const db = firebase.database();
db.ref('/questionnaires/')
.on('value', snapshot => {
//const response = snapshot.val();
//console.log('value', snapshot.val());
const response = snapshot.val();
//console.log(response);
const keys = Object.keys(response);
const questWithKeys = keys.map(id => {
return { ...response[id], id }
});
setData(questWithKeys);
console.log(questWithKeys);
//return { data: questWithKeys };
});
}, []);
/*async() => {
useEffect(() => {
const db = firebase.database();
db.ref('/questionnaires/')
.on('value', snapshot => {
console.log(snapshot.val());
});
});
}*/
return (
<View>
<Text style={{fontSize: 10}}>{data.title}</Text>
<FlatList
data={data}
renderItem={({ item, index }) => (
<View index={index}>
<Text >{item.title}</Text>
</View>
)}
keyExtractor={item => item.id}
numColumns={2}
showsVerticalScrollIndicator={false}
/>
</View>
);
}
解决方案
我在实时数据库中遇到了类似的问题。我必须运行通过 foreach 循环接收到的快照,将每个 snapshot.val() 推送到一个新数组。我不确定为什么要修复它,但它对我有用。
推荐阅读
- python-3.x - 信使发送 API
- jquery - 滚动时向导航栏添加一个类(transp.background)使文本也transp
- java - 如何使用 cxf-codegen-plugin 和 Apache Camel
- meteor - Meteor Helper 使用基于反应变量的查询
- azure - 我们可以使用 ARM 模板在 Manifest 下仅为 API 服务添加应用角色吗?
- optimization - SummingMergeTree 按元组分区
- php - Vue.js Axios.post 将变量发送到 php,但我无法访问这些变量
- android - 是否有一个简单的活动示例可以在 Android Studio 项目中集成 Play Services 排行榜和成就?
- swift - 在 xib 文件中对自定义 tableviewcell 进行单元测试
- java - 如何在 Spring Cloud DataFlow 中注册应用程序?