Firebase 反应本机数据显示在console.log上,但不显示在屏幕上
有时应用程序运行良好。 但我不知道为什么,有时候firebase的数据给我的是空白屏幕而不是数据。 在我重新打开应用程序后,它会工作 比如说,, 我的其中一页:Firebase 反应本机数据显示在console.log上,但不显示在屏幕上,firebase,react-native,google-cloud-firestore,Firebase,React Native,Google Cloud Firestore,有时应用程序运行良好。 但我不知道为什么,有时候firebase的数据给我的是空白屏幕而不是数据。 在我重新打开应用程序后,它会工作 比如说,, 我的其中一页: useEffect( () => { const subscriber = firestore() .collection('Trails') .onSnapshot(querySnapshot => { //const querySnapshot = await f
useEffect( () => {
const subscriber = firestore()
.collection('Trails')
.onSnapshot(querySnapshot => { //const querySnapshot = await firebase.firestore().collection('users').get();
const trails = [];
console.log('subscribe')
if (querySnapshot)
querySnapshot.forEach(async documentSnapshot => {
trails.push({
...documentSnapshot.data(),
key: documentSnapshot.id,
});
console.log("trails test", trails)
});
setTrails(trails);
setLoading(false);
});
return () => {subscriber()};
}, []);
我使用useEffect从数据库中获取数据,然后将其显示出来,同样-有时给我空白,有时效果很好
我想发布应用程序,但我对这个bug不满意
对不起我的英语,我甚至不知道如何更好地描述这个问题
有人能给我指点迷津吗?也许我的useEffect做得不好?我认为你应该使用调试
我认为使用中的return有一个问题,component卸载时会调用effect return。以下是我如何处理异步数据获取的示例:
...
const [data, setData] = useState([]);
const isCurrentView = useRef(true);
useEffect(() => {
if (isCurrentView.current === true) {
const asyncFetch = async () => {
const response = await fetch(...something) //here some Asynchronous Call Like(axios, fetch)
setData([...response]);
};
asyncFetch();
}
return () => {
isCurrentView.current = false;
};
}, []);
...
我不能100%确定这是否是最好的方法,但我在一些地方看到过类似的代码,所以我选择了这种方法。问题解决了:
setTrails在作用域下,它不断刷新空数据
querySnapshot.forEach(async documentSnapshot => {
trails.push({
...documentSnapshot.data(),
key: documentSnapshot.id,
});
setTrails(trails); // <<<~~~~ put the set in this scope.
});
setLoading(false);
});
querySnapshot.forEach(异步文档快照=>{
推({
…documentSnapshot.data(),
关键字:documentSnapshot.id,
});
setTrails(trails);//谢谢,我会试试这个,标记也会出现问题,但一旦用户重新启动应用程序,它就会工作:它会抓取,出现,然后消失(就像我做了两次asyncFetch()一样?)