【问题标题】:useSWR return { null, null } for valid requestuseSWR return { null, null } 表示有效请求
【发布时间】:2021-09-29 20:14:55
【问题描述】:

我正在尝试在我的 next.js 项目中使用 useSWR 向 Firebase 实时数据库发出请求,但由于某种原因,它总是为 dataerror 变量返回 null

import useSWR from 'swr';

const LastSales: NextPage = () => {
  const [sales, setSales] = useState<Sale[]>([]);

  const { data, error } = useSWR(
    'https://my-app-12345-default-rtdb.firebaseio.com/sales.json'
  );

  useEffect(() => {    
    if (!data) return;

    const salesArr = [];
    for (const key in data) {
      salesArr.push({
        id: key,
        username: data[key].username,
        volume: data[key].volume,
      });
    }

    setSales(salesArr);
  }, [data]);

  if (error) return <p>Failed to load.</p>;
  if (sales.length === 0) return <p>Loading...</p>;

  return <div>Sales List</div>

使用fetch 发出相同的请求非常有效,但占用的代码行数是原来的 10 倍。为什么dataerror 都等于null

【问题讨论】:

    标签: reactjs typescript firebase-realtime-database next.js swr


    【解决方案1】:

    根据doc,您需要有一个fetcher 来定义它的调用方式。

    const fetcher = (url) => fetch(url).then((res) => res.json());
    
    export default function App() {
      const { data, error } = useSWR(
        "https://api.github.com/repos/vercel/swr",
        fetcher
      );
    

    【讨论】:

    • 成功了,谢谢。奇怪,在线课程的老师说这是可选的。
    • 可能有办法让它成为可选的,但默认情况下不是。如有任何疑问,请查看在线版本,它应该是最新的。你也能接受答案吗,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2017-03-12
    • 2016-03-31
    • 2023-03-07
    相关资源
    最近更新 更多