next.js 用户数据在useEffect钩子中的useUser中不可用

g9icjywg  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(111)

我尝试使用Supabase的useUser钩子来获取用户,然后使用用户ID构造查询,但页面第一次加载时,我得到一个运行时错误:

Unhandled Runtime Error
TypeError: Cannot read properties of null (reading 'id')

Source
pages/users/[id].js (52:30) @ id

  50 |   .select()
  51 |   .eq("user_id", id)
> 52 |   .eq("follower_id", user.id);

当我刷新时,它工作正常(我假设是因为useUser钩子有时间获取用户)。

import { useEffect, useState } from "react";
import supabase from "../../lib/supabase";
import { useUser } from "@supabase/auth-helpers-react";

function User({ props }) {
  const [follows, setFollows] = useState(false);
  const user = useUser();

  const checkFollowStatus = async () => {
    const { data, error } = await supabase
      .from("follows")
      .select()
      .eq("user_id", id)
      .eq("follower_id", user.id);
    if (!error && data) {
      console.log(data);
      setFollows(true);
    } else {
      setFollows(false);
    }
  };

  useEffect(() => {
    checkFollowStatus();
  }, []);
dba5bblo

dba5bblo1#

在调用checkFollowStatus之前,您需要检查user是否存在,请参阅以下示例https://supabase.com/docs/guides/auth/auth-helpers/nextjs#client-side-data-fetching-with-rls
在您的案例中:

useEffect(() => {
    if (user) checkFollowStatus();
  }, [user]);

相关问题