【发布时间】:2023-03-07 05:37:01
【问题描述】:
我正在学习使用 useSWR 从 Firebase 获取数据并使用它来设置状态的课程。但是,当我尝试控制台记录数据时,我得到未定义并且屏幕显示正在加载。这有什么理由吗。我什至复制了讲师使用的完全相同的代码(API 链接除外)。
import { useEffect, useState } from 'react';
import useSWR from 'swr';
function LastSalesPage() {
const [sales, setSales] = useState();
// const [isLoading, setIsLoading] = useState(false);
const { data, error } = useSWR(
'https://nextjs-2021-default-rtdb.firebaseio.com/sales.json'
);
console.log('Data:', data);
useEffect(() => {
if (data) {
const transformedSales = [];
for (const key in data) {
transformedSales.push({
id: key,
username: data[key].username,
volume: data[key].volume,
});
}
setSales(transformedSales);
}
}, [data]);
if (error) {
return <p>Failed to load.</p>;
}
if (!data || !sales) {
return <p>Loading...</p>;
}
return (
<ul>
{sales.map((sale) => (
<li key={sale.id}>
{sale.username} - ${sale.volume}
</li>
))}
</ul>
);
}
export default LastSalesPage;
【问题讨论】:
-
你是在全局定义 fetcher 方法吗?可以分享一下fetcher的代码吗?
-
课程中没有提到全局添加 fetcher,所以我没有添加。但是添加一个 fetcher 函数似乎可以解决问题
标签: reactjs firebase firebase-realtime-database next.js