์ต๊ทผ Inertia.js + React + Laravel ์กฐํฉ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ์ค, Context ๋ด๋ถ์์ fetch
๊ฐ ๋ ๋ฒ ์ด์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค.
fetch
์์ฒญ์ ๋ณด๋ด๊ณ ์์๊ณ , ์ด ์์ฒญ์ ํน์ state
์ ์์กดํ๊ณ ์์์ต๋๋ค.initialState
๊ฐ ๋ค์ ์ ์ฉ๋์๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก fetch
๊ฐ ๋ ๋ฒ ์ด์ ์คํ๋์์ต๋๋ค.Inertia ํ๊ฒฝ์์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฝ์ด ์์์ต๋๋ค:
Context Provider๋ฅผ <App />
์์ ๋ ์ ์๋ ๊ตฌ์กฐ
โ Laravel์์ ๋ ๋๋ง๋๋ Blade ํ์ผ์ด ์๊ณ , ๊ทธ ์์์ React๊ฐ ๋ง์ดํธ๋๊ธฐ ๋๋ฌธ์ Context๋ฅผ ๋ฃจํธ ์ต์๋จ์์ ๊ฐ์ธ๋ ๊ฒ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
Inertia ํ์ด์ง ์ด๋ ์ ์ ์ฒด ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ง์ดํธ๋จ
โ ๋ผ์ฐํฐ๋ณด๋ค ํ์์์ Provider๊ฐ ์ ์ธ๋ผ ์์ผ๋ฏ๋ก ํ์ด์ง ์ด๋๋ง๋ค Context๊ฐ ์๋กญ๊ฒ ์ด๊ธฐํ๋จ.
useReducer
์ initialState
๋ ์ฒซ ๋ง์ดํธ ์ ํ ๋ฒ๋ง ์ ์ฉ๋จ
โ ํ์ง๋ง ํ์ด์ง ์ ํ๋ง๋ค Context ์์ฒด๊ฐ ์ฌ๋ง์ดํธ๋๋ฏ๋ก, ๊ฒฐ๊ณผ์ ์ผ๋ก initialState
๊ฐ ์์ฃผ ์ฌ์ ์ฉ๋๊ณ fetch
๊ฐ ๋ฐ๋ณต๋จ.
initialState
์ pageProps
๋ฅผ ํ์ฉ๋คํํ state
๊ฐ url
์ ์์กดํ๊ณ ์์๊ธฐ ๋๋ฌธ์, ์๋์ฒ๋ผ initialState
๋ฅผ ๋์ ์ผ๋ก ์ค์ ํด ๋ฌธ์ ๋ฅผ ์ฐํํ ์ ์์์ต๋๋ค:
const pageProps = usePage();
const [state, dispatch] = useReducer(
adminReducer,
getInitialAdminState(pageProps), // ์ด๊ธฐ๊ฐ์ props๋ก๋ถํฐ ์ค์
);
ํ์ง๋ง ์ด๋ฐ ๋ฐฉ๋ฒ์ ํ๊ณ๊ฐ ์์ต๋๋ค.
props
์ฒ๋ผ ์ธ๋ถ๋ก๋ถํฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ์๋ง ๋์ํฉ๋๋ค.null
๋ก ํ๊ณ , useEffect
์์ ์กฐ๊ฑด๋ถ fetch๋ณด๋ค ๋ฒ์ฉ์ ์ธ ํด๊ฒฐ์ฑ ์ผ๋ก ์๋ ๋ฐฉ์์ ์ฑํํ์ต๋๋ค:
targetId: null
)targetId
๊ฐ ์ค์ ๋๋ฉด ๊ทธ๋ fetch
๋ฅผ ํธ๋ฆฌ๊ฑฐdispatch
๋ฅผ ํตํด targetId
์ค์ const [state, dispatch] = useReducer(reducer, {
targetId: null,
data: null,
loading: false,
});
useEffect(() => {
if (!state.targetId) return;
dispatch({ type: 'FETCH_START' });
fetchData(state.targetId)
.then((data) => dispatch({ type: 'FETCH_SUCCESS', payload: data }))
.catch(() => dispatch({ type: 'FETCH_FAIL' }));
}, [state.targetId]);
์ปดํฌ๋ํธ์์๋ ๋ค์๊ณผ ๊ฐ์ด ํธ๋ฆฌ๊ฑฐํฉ๋๋ค:
onClick={() => dispatch({ type: 'SET_ID', payload: 123 })}
Context๋ ์์น๊ฐ ์ ๋ถ๋ค.
์ต์๋จ์์ ๊ฐ์ธ์ง ๋ชปํ๋ ๊ตฌ์กฐ๋ผ๋ฉด, initialState
์ ์์กด์ฑ๋ง์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌ์ฑํ๊ธด ์ด๋ ต๋ค.
์ด๊ธฐ๊ฐ์ ์ต์ํํ๊ณ , side-effect๋ก ๋์์ ๋ถ๋ฆฌํ์.
useEffect
๋ ์์กด์ฑ ๊ธฐ๋ฐ์ผ๋ก fetch ๋์์ ๋ถ๋ฆฌํ ์ ์์ด ํจ์ฌ ์ ์ฐํ๊ณ ์์ ์ ์ด๋ค.
์ํ ๊ธฐ๋ฐ ์กฐ๊ฑด๋ถ fetch๋ ๊น๋นก์์ ์ค์ด๊ณ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋์ฌ์ค๋ค.
ํนํ ์ด๊ธฐ๊ฐ์ด null
์ธ ์ํ์์ fetch๋ฅผ ๋ง๊ณ , ํ์ํ ์์ ์๋ง ๋ช
ํํ ํธ๋ฆฌ๊ฑฐํ๋ ๋ฐฉ์์ ์ ์ง๋ณด์์ฑ๊ณผ ์์ ์ฑ ์ธก๋ฉด์์ ๋งค์ฐ ๊ฐ๋ ฅํ๋ค.
Context๋ก ๋ชจ๋ ๊ฑธ ํด๊ฒฐํ๋ ค ํ์ง ๋ง์.
ํ ์ํฉ์ ์ ์ญ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ง ์๊ธฐ๋ก ํ์ง๋ง, ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ๋ณต๋๋ค๋ฉด Zustand
๋ฅผ ์ฐ๋๊ฒ ํธํ๋ค!