【发布时间】:2019-08-14 21:44:37
【问题描述】:
我想将 React Hooks 功能与 Firebase 结合使用。但是现在设置数据时,结果仅在更新 DOM 时可见。 我当前的代码是:
import React, { useState, useEffect } from 'react';
import firebase, { getPivotFunction } from '../../firebase';
/**
* Return a styled component
*/
const ListCards = () => {
const [data, setData] = useState([]);
const userListsRef = firebase
.database()
.ref('userLists')
.child('1234d343f');
useEffect(() => {
(async function() {
try {
const response = await getPivotFunction(userListsRef, 'lists');
setData(response);
} catch (e) {
console.error(e);
}
})();
}, []);
/**
* Return all list cards
*/
return (
<ul>
{data.map(item => (
<li key={item.time}>dummy text</li>
))}
</ul>
);
};
第一次渲染页面时,不会显示“虚拟文本”,只有在触发更新时才会显示。
我的目标是在页面加载完成并且data 的长度不为 0 时让“虚拟文本”出现。
在这种情况下,getPivotFunction 包含:
/** Get FireBase data based on a pivot table */
const getPivotFunction = (ref, target) => {
let dataArray = [];
ref.once('value', userInfo => {
userInfo.forEach(function(result) {
firebase
.database()
.ref(target)
.child(result.key)
.on('value', snapshot => {
dataArray.push(snapshot.val());
});
});
});
return dataArray;
};
请告诉我
【问题讨论】:
-
你能显示你的文本组件吗
-
我更新了代码,所以不需要 Text 组件,但问题仍然存在
-
你为什么要在 useEffect 中那样使用异步函数?
-
@RonaldZwiers 行为似乎是正确的,只有当数据可用时,数据的长度才会大于零并显示虚拟文本,在此之前数组为空
标签: reactjs firebase firebase-realtime-database react-hooks