Пользовательские данные недоступны с помощью useUser в хуке useEffect

Я пытаюсь использовать хук useUser из Supabase, чтобы получить пользователя, а затем построить запрос, используя идентификатор пользователя, но при первой загрузке страницы я получаю ошибку времени выполнения:

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.info(data);
      setFollows(true);
    } else {
      setFollows(false);
    }
  };

  useEffect(() => {
    checkFollowStatus();
  }, []);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перед вызовом user необходимо проверить наличие checkFollowStatus, см. этот пример https://supabase.com/docs/guides/auth/auth-helpers/nextjs#client-side-data-fetching-with-rls

В твоем случае:

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

Другие вопросы по теме