zustand로 유저정보 전역관리하기 (supabase)

Ji Won·2024년 1월 16일
2

TODAY I LEARNED

목록 보기
12/20
post-thumbnail

프로잭트를 하면서 zustand를 처음 써보게 되었다.

user정보 여부에따라 header를 바꿔줄려고 사용하게 되었는데 기록해보고자 한다.
본인은 next.js와 typescript, supabase를 사용중이다.

일단 useAuth.ts 파일을 훅 안에 만든다.

import { User } from '@supabase/supabase-js';
import { create } from 'zustand';


export type AuthStore = {
  user: User | null;
  setUser: (user: User | null) => void;

};


// user =>기본값  
const useAuth = create<AuthStore>((set) => ({
  user: null,
  setUser: (user) => set(() => ({ user })),
 
}));

export default useAuth;

.
setUser를 이용해서 user정보를 user에 넣어줄것이다.

필자의 경우 supabase에서 user 정보를 계속 추적해주는 onAuthStatechange를 최상위 컴포넌트에서 사용해줬다.

useEffect(() => {
    supabase.auth.onAuthStateChange((event, session) => {
      console.log(event, session);

      if (session) {
        setUser(session.user);
      } else {
        setUser(null);
      }
    });
  }, []);

와 같이 작성해줬는데 session이 있을경우(로그인 한 유저가 있을 경우) setUser를 사용해서 유저정보를 zustand로 넘겨줄 수 있도록 했으며 session이 없을 경우 null을 다시 넣어줄 수 있도록 했다.

처음엔 localstorage를 사용하고자 했는데 server와 client의 렌더링 순서때문인지 오류가 발생해서 프로잭트에서 사용하고 있는 지도api가 나타나지 않는 현상이 발생하길래 수정하게 되었다.
next.js, zustand 공부를 좀 더 해야할 것 같다 ㅠ 편리하지만 어렵다..!ㅠ

profile
1인분 하고 싶은 코린이

0개의 댓글