채팅 목록 : 마지막 메시지 렌더링

마이페이지 : 모바일 작업

Invalid Hook Call Warning 에러 공식 문서
위 공식문서에 따르면 이러한 에러는 3가지 이유를 갖고 있다.
- You might have mismatching versions of React and React DOM
: React와 React DOM 버전이 16.8.0 이하의 경우
- You might be breaking the Rules of Hooks
: React의 훅 룰을 어겼을 경우
- You might have more than one copy of React in the same app
: React나 React package 중복 설치의 경우
✔️ 나의 경우 2번 React 훅 룰을 어겼을 경우
조건부로 실행될 수 있어 규칙을 위반const MyPost = async () => {
const { data: { session } } = await supabase.auth.getSession();
if (session) {
const { data } = await supabase.from("Users").select("*").eq("id", session?.user.id);
if (data) {
setMyId(data[0].id);
}
}
const getPostsQuery = useQuery({
queryKey: ["posts", myId],
queryFn: async () => {
const posts = await getPosts({ myId });
return posts;
},
});
return ...
}
비동기 작업을 useEffect와 함께 사용
const MyPost = () => {
const [myId, setMyId] = useState("");
const [session, setSession] = useState("");
const supabase = createClient();
const router = useRouter();
useEffect(() => {
const getSessionData = async () => {
const {
data: { session },
} = await supabase.auth.getSession();
if (session) {
const { data } = await supabase.from("Users").select("*").eq("id", session?.user.id);
if (data) {
setMyId(data[0].id);
}
}
};
getSessionData();
}, []);
const getPostsQuery = useQuery({
queryKey: ["posts", myId],
queryFn: async () => {
const posts = await getPosts({ myId });
return posts;
},
});
return (...)
}
export default MyPost
✅ 함수형 컴포넌트에서 async를 직접 사용하면 React의 훅(Hook) 규칙을 위반하게 되어 "Invalid Hook Call" 에러가 발생할 수 있음
✅ 훅을 사용할 때는 async를 직접 사용하기보다는 useEffect나 useQuery와 같은 React의 훅을 활용
무엇을 했는지 무엇을 하고 있는지 모르는 정신과 시간의 방에 있는 것 같다;;
그만큼 기록이 중요한데