๐Ÿ”ฅ Trouble Shooting - Tanstack Query์™€ Zustand ์ƒํƒœ ๊ด€๋ฆฌ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ

์Š˜ยท2025๋…„ 2์›” 23์ผ

๐Ÿ”ฅ Trouble Shooting

๋ชฉ๋ก ๋ณด๊ธฐ
18/23

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ œ ์ƒํ™ฉ

  • TestPage์—์„œ ์œ ์ € ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•จ
  • ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด user store ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง
  • Layout ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ˜๋ณต์ ์ธ API ํ˜ธ์ถœ ๋ฐœ์ƒ

๐Ÿค” ๋ฌธ์ œ ์ ‘๊ทผ

์ฒซ ๋ฒˆ์งธ ์‹œ๋„

// ๊ฐ ํŽ˜์ด์ง€๋งˆ๋‹ค ์ด๋ ‡๊ฒŒ ์ž‘์„ฑ
const TestPage = () => {
  const {user} = useAuthStore();  // ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ ๋ฐœ์ƒ!
}

undefined๊ฐ€ ์ฐํžˆ๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ..

๋‘ ๋ฒˆ์งธ ์‹œ๋„

// ์ด๋ ‡๊ฒŒ ๋„์ „..
const TestPage = () => {
  const {user:storeUser} = useAuthStore();
  const {data:userData} = useUser();
  const user = storeUser || userData;
}

์œ„์ฒ˜๋Ÿผ ํ•ด๊ฒฐํ•˜๋ ค ํ–ˆ์œผ๋‚˜..api๋ฅผ ๋‹ค์ค‘์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์›์น˜์•Š์•˜๋‹ค.
ํ .. ๋‹ค๋ฅธ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ? ์•„๋‹ˆ๋ฉด ์ƒ์œ„ ์š”์†Œ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ค˜๋ฒ„๋ฆฌ๋ฉด?

๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1. Layout์—์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ

const Layout = () => {
  const {user:storeUser, setUser} = useAuthStore();
  const {data:userData} = useUser();
  const currentUser = storeUser || userData;

  useEffect(() => {
    if(userData && !storeUser) {
      setUser(userData);
    }
  }, [userData]);

  return (
    <>
      <Header/>
      <Outlet context={currentUser}/>
      <Footer/>
    </>
  );
};

2. useUser ํ›… ๊ฐœ์„ ํ•˜๊ธฐ

const useUser = () => {
  const {token, setUser} = useAuthStore();
  
  return useQuery({
    queryKey: ['user'],
    queryFn: () => getUserProfile(token),
    onSuccess: (data) => {
      setUser(data)
    },
    staleTime: 1000 * 60 * 10,  // 10๋ถ„ ๋™์•ˆ ์žฌํ˜ธ์ถœ ๋ฐฉ์ง€
    enabled: !!token  // token์ด ์žˆ์„ ๋•Œ๋งŒ API ํ˜ธ์ถœ
  });
};

โœจ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด ์ 

  1. Layout ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „์—ญ์ ์œผ๋กœ ์œ ์ € ์ •๋ณด ๊ด€๋ฆฌ
  2. staleTime์œผ๋กœ ๋ถˆํ•„์š”ํ•œ API ํ˜ธ์ถœ ์ค„์ด๊ธฐ
  3. token ์œ ๋ฌด์— ๋”ฐ๋ฅธ ์กฐ๊ฑด๋ถ€ API ํ˜ธ์ถœ

๐Ÿš€ ์ด๋Ÿฐ ์ ์ด ํšจ์œจ์ ์ด์—์š”

  1. ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ๋™์ผํ•œ ์œ ์ € ์ •๋ณด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  2. ๋ถˆํ•„์š”ํ•œ API ํ˜ธ์ถœ ๊ฐ์†Œ
  3. ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ

โญ๏ธ ์ฐธ๊ณ 

๋‚˜์ค‘์— ๊ฐ ํŽ˜์ด์ง€์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ:

const Profile = () => {
  const user = useOutletContext();  // Layout์—์„œ ์ „๋‹ฌ๋œ ์ •๋ณด ์‚ฌ์šฉ
  ...
};
profile
์ฃผ๋‹ˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ์žฅ๊ธฐ ๊ธฐ๋ก๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€