ํด๋น ๋ฐ์ดํฐ๋ฅผ ํ๋ก ํธ์์ ๊ด๋ฆฌํ๋๊ฒ ๋ง๋์ง,
๋ฐฑ์๋์์ ๊ด๋ฆฌํ๋์ง ๊ณ ๋ฏผํ๋๊ฒ ๊ฐํน ์์๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์ ์ ์น์์ ํํดํ ๊ฐ์์ง๊ฐ ํ์ฑํ ๋ ์ํ์์
๊ฐ์์ง ๊ด๋ จ ํ์ด์ง ์ ์ ์ ํน์ UI๋ฅผ ํ์ํด์ผํ๋ฉฐ ์ด๋๋ง ๊ฐ๋ฅํด์ผ ํ๋ค.
ํด๋น ๊ธฐํ ๋ด์ฉ์ ๋ดค์ ๋ ๋ ๊ฐ์ง ๊ณ ๋ฏผ์ ํ๊ฒ ๋์๋ค.
ํํด ์ ๋ฌด๋ฅผ ํ๋จํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ก ํธ์์ ๊ด๋ฆฌํ๋๊ฒ ๋ง์์ง ๋ฐฑ์๋์์ ๊ด๋ฆฌํ๋๊ฒ ๋ง์์ง ๊ณ ๋ฏผํ๊ฒ ๋์๊ณ
2๊ฐ์ง ์ ํ์ง๋ฅผ ์๊ฐํ๊ฒ ๋์๋ค.
๋ฉ์ธ ํ api๋ ํํด ์ ๋ฌด ๋ฐ์ดํฐ๋ฅผ ์ ์ผํ๊ฒ ๊ฐ์ง๊ณ ์์๋ค.
ํด๋น ๊ฐ์์ง ๊ด๋ จ ํ์ด์ง๋ฅผ ์ ์ํ๊ธฐ ์ํด์๋ ๋ฌด์กฐ๊ฑด ํ์ ๊ฑฐ์ณ์ผ ํ๊ธฐ์
useEffect๋ฅผ ํ์ฉํด ์ฒซ ๋ ๋๋ง ์ ํด๋น ๋ฐ์ดํฐ๋ฅผ localStorage
์ ์ ์ฅํ๋ฉด ๋์ง ์์๊น ์ถ์๊ณ ์ด๋ฅผ ์ปค์คํ
ํ
์ผ๋ก ๋ง๋ค์ด ํ์ฉํ๋ฉด ๋๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
์ด๋ ๊ฒ ์๊ฐํ ์ด์ ๋
๋์ ๋จ์ ๋ ์กด์ฌํ์๋ค.
api ํ๋๋ง ์์ ํ๋๊ฒ ์๋ ๊ฐ์์ง ๊ด๋ จ ๋ชจ๋ ํ์ด์ง์ ํํด ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ด์ผ ํ๋ค.
์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๊ฒฝ์ฐ
Tanstack Query์ ์บ์ฑ ๊ธฐ๋ฅ ์ ํ์ฉํ๊ณ ์ ํ์ง๋ง getQueryData
๋ฉ์๋๋ก ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ ์๋ก๊ณ ์นจ ํ ๊ฒฝ์ฐ ์ด๊ธฐํ ๋๊ธฐ์ ์์ฐ์ค๋ ํ๋ณด์์ ์ ์ธํ๊ฒ ๋์๋ค.
Server์์ ๋ฐ์์ผํ๋ ์ํ๋ค์ ํน์ฑ
- Client์์ ์ ์ดํ๊ฑฐ๋ ์์ ๋์ง ์์ ์๊ฒฉ์ ๊ณต๊ฐ์์ ๊ด๋ฆฌ๋๊ณ ์ ์ง ๋์ด์ผ ํ๋ค.
- Fetching์ด๋ Updating์ ๋น๋๊ธฐ API๊ฐ ํ์ํ๋ค.
- ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ๋๋ ๊ฒ์ผ๋ก ์ฌ์ฉ์๊ฐ ๋ชจ๋ฅด๋ ์ฌ์ด์ ๋ณ๊ฒฝ ๋ ์ ์๋ค.
- ์ ๊ฒฝ ์ฐ์ง ์๋๋ค๋ฉด ์ ์ฌ์ ์ผ๋ก 'out of date'๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ ์ง๋๋ค.
Client์์ ๋ฐ์์ผํ๋ ์ํ๋ค์ ํน์ฑ
- Client์์ ์์ ํ๋ฉฐ ์จ์ ํ ์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ด๊ธฐ ๊ฐ ์ค์ ์กฐ์์ ์ ์ฝ์ฌํญ์ด ์๋ค.
- ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ๋์ง ์์ผ๋ฉฐ, Client๋ด ์์ UI/UX ํ๋ฆ์ด๋ ์ฌ์ฉ์ ์ธํฐ๋ ์ ์ ๋ฐ๋ผ ๋ณํ ์ ์๋ค.
- ํญ์ Client ๋ด์์ ์ต์ ์ํ๋ก ๊ด๋ฆฌ๋๋ค.
[LIVE] React Query์ ์ํ๊ด๋ฆฌ :: 2์ ์ฐ์ํํ ํฌ์ธ๋ฏธ๋
์ด๋ ์๊ฐ ๋ฌ๋๊ฒ ์ ํ๋ธ React Query ๊ด๋ จ ๊ฐ์๋ด์ฉ์ด ์๋ค.
ํด๋น ๊ฐ์ฌ๋์ ๋ฐ์ดํฐ์ Owner Ship์ด ์ด๋์ ์๋์ง ํ์ธํ ํ์๊ฐ ์๋ค๊ณ ํ์ จ๋ค.
๋ด์ฉ์ ๋ณด์๋ง์ ์์ฐจ ์ถ์๋ค.
๋ด๊ฐ ๋๋ฌด ๊ฐ๋จํ ๊ณ ๋ฏผ์ ํ๊ณ ์๋๊ฒ ์๋ ์์๊น?
๋ฌด์ ๋ณด๋ค ๋ค๋ฅธ ํ์๋ถ๋ค๊ป ์๊ฒฌ์ ๊ตฌํ์ ๋๋ 2๋ฒ์ ์ ์ํ์ จ๋ค.
๊ฒฐ๊ตญ์ 2๋ฒ์ ํํ๊ฒ ๋์๋ค.
๋ฌด์ ๋ณด๋ค ํด๋น ๋ฐ์ดํฐ๋ ํ๋ก ํธ์์ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ ์๋์๊ณ
๋ฉ์ธ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ค ๋ณด๋ ์์กด์ฑ ๋ฌธ์ ๊ฐ ํฌ์ง ์์์๊น ์ถ๋ค.
2๋ฒ์ผ๋ก ์งํ์ ํ๊ธฐ๋ก ํ๋ค.
๋ฌธ์ ๋ ๋ด๊ฐ ์ ์ฉํ๋ ค๋ ํ์ด์ง ์ ๋ถ ๊ฐ์ ๊ตฌ์กฐ๋ก api๋ฅผ ํธ์ถํ๊ณ ์์ง ์์๋ค.
์ต์๋จ์ UI๋ฅผ ํ์ํ๊ธฐ ์ํด์๋ ํด๋น ๋ฐ์ดํฐ๋ ์ต์์์ ํธ์ถ๋์ด์ผํ๋ค.
๋ค๋ฅธ ๋ถ์ด ์์
ํ์ ํ์ด์ง์ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ๋กค ๋ถ๋ฆฌํ์ฌ
ํด๋น ์ปดํฌ๋ํธ์์ api๋ฅผ ๋ค๋ฅด๊ฒ ํธ์ถํ๊ณ ์์๋ค.
๊ทธ๋ ๊ฒ ๊ณ ๋ฏผํ๋ ์์ค...
ํ์ ๋ถ๊ป "2๋ฒ์ผ๋ก ๊ฐ๋ ํํด ์ฌ๋ถ๋ฅผ ํ์ธ ํ ์ ์๋ api ์ถ๊ฐ ์์ฒญ์ ํ๋๊ฒ ์ด๋ ์๋"๊ณ ๋ง์ํด ์ฃผ์
จ๋ค.
์ฌ๊ธฐ์ 2์ฐจ ์์ฐจ ์ถ์๋ค...!
ํ๋๋ฅผ ์ถ๊ฐํ์ ๋๋ง ์๊ฐ ํ๊ณ ์์๋ค.
ํ๋๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ์ ์์
๋์ด api ์ถ๊ฐํ๋ ๊ฒ ๋ณด๋ค ๋ ๋์ด๋ ์์๋ค.
๋ฌด์ ๋ณด๋ค api ์ถ๊ฐ์ ๊ณตํต ์ปดํฌ๋ํธ๋ก ๊ด๋ฆฌํ๊ธฐ ๋ ์์ํ๋ค๋ ์ ์ด๋ค.
์ํฉ์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ํ๋จํด์ผ ํ๋๊ฒ ์ค์ํ๊ณ
ํผ์ ํด๊ฒฐํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ ํ์ ๋ถ๋ค๊ณผ ์์ ํ์ ๋ ๋ ๋์ ์ ํ์ ํ ์ ์์๋ ๊ฒ ๊ฐ๋ค.
// ์
export const useDogDisconnected = () => {
const DOG_DIS_CONNECTIED = "DOG-DIS-CONNECTIED";
const setStorage = useSetLocalStorage();
const [isDisconnected] = useLocalStorage(DOG_DIS_CONNECTIED, false);
// disconnected localStorage์ ์ ์ฅ
const setStorageDisconnected = (dogStatus: boolean) => {
setStorage(DOG_DIS_CONNECTIED, dogStatus);
};
return { setStorageDisconnected, isDisconnected };
};
// ํ
export const useDogDisconnected = () => {
const dogId = useRecoilValue(dogIdState) as number;
const isDisconnected = useGetDogDisconnect(dogId).data;
return { isDisconnected };
};
.
.
.
export const useGetDogDisconnect = (dogId: number) => {
return useSuspenseQuery({
queryKey: queryKey.member.dog.disconnect.dynamic(dogId),
queryFn: () => handleGetDogDisconnect(dogId),
staleTime: 10 * 60 * 1000
});
};
์ฝ๋๋ ๊ฐ๊ฒฐํด ์ก๊ณ ์์กด์ฑ๋ ๋ฎ์์ก๋ค.
isDisconnected๋ ๊ฑฐ์ ๋ณํ์ง ์๊ธฐ์ staleTime์ ํตํด ํธ์ถ์ ์ง์ฐ ์์ผฐ๋ค.
๊ฑฐ์ ๋ณํ์ง ์๋๋ค๋ฉด ์๊ฐ์ ๋ ๋๋ ค๋ ๊ด์ฐฎ์ง ์์๊น ์ถ์ ์๊ฐ๋ ๋ค์๋ค.
ํผ์ ๊ณ ๋ฏผํ๋ค ์๊น์ด ์๊ฐ๋ง ์๋ชจํ๋ค..