reactjs - 我正在取回数据,但数组长度返回为 0
问题描述
我正在尝试从 firebase 获取数据并正确控制日志,但数组显示长度为 0
useEffect(() => {
let items = [];
const unsubscribe = store
.collection('users')
.doc(user.uid)
.collection('redirects')
.onSnapshot(snapShot => {
snapShot.forEach(getPath => {
const { path } = getPath.data();
store.doc(path).onSnapshot(doc => {
const data = doc.data();
items.push({ ...data });
});
});
});
setDocs(items);
setIsLoading(false);
return () => unsubscribe();
}, []);
console.log(docs);
解决方案
尝试这样的事情:
您的 setState 调用应该在onSnapShot(()=>{})
回调中,因为它是异步的。你正在做的方式,你基本上是试图setDocs()
用一个空items
数组调用。
useEffect(() => {
let items = [];
const unsubscribe = store
.collection('users')
.doc(user.uid)
.collection('redirects')
.onSnapshot(snapShot => {
snapShot.forEach(getPath => {
const { path } = getPath.data();
store.doc(path).onSnapshot(doc => {
const data = doc.data();
items.push({ ...data });
});
});
setDocs(items);
setIsLoading(false);
});
//setDocs(items);
//setIsLoading(false);
return () => unsubscribe();
}, []);
推荐阅读
- ansible - 如何在通过命令行运行 ansible 角色时运行标记任务
- flutter - 无法在 Flutter 中使用 Google 电子邮件登录
- sql - 这个 CASE 语句中的 THEN 是做什么的?
- c# - 如何使一个场景中的不同按钮在点击时变为自己指定的场景?
- r - 有没有办法用 R 提取行名?
- python - 如何在 netCDF 文件中按维度过滤数据
- filter - 如何在 ag 网格过滤器中的应用按钮上编写单击事件
- rust - 使用 actix 启动计划任务并访问自己
- kubernetes - 无法通过 minikube 隧道访问应用程序
- java - 迭代器中每个项目的新线程