๐ข if๋ฌธ ๋ด์์ useAsync ์ฌ์ฉ์ด ์ ๋๋ ๋ฌธ์
โช๋ฌธ์ ์ํฉ :
ํ ํ์ด์ง ๋ด์์ ๋ ๊ฐ์ง์ ์ํ(buyer, seller)๋ฅผ ๊ด๋ฆฌํด์ผ๋ผ์
userType์ ๋ฐ๋ผ buyer/seller data๋ฅผ fetchํ๋ ค๊ณ ํ๋ค.
if (userType === 'buyer') {
const [buyerState] = useAsync(() => InfoService.getBuyer(user), []);
} else {
const [sellerState] = useAsync(() => InfoService.getSeller(user), []);
}
๊ทผ๋ฐ if๋ฌธ ์์ useAsync ์ ์ธํ์๋ง์ ESLint๊ฐ ๊ฒฝ๊ณ ๋ฌธ์ ๋์.
React Hook "useAsync" is called conditionally. React Hooks must be called in the exact same order in every component render.
๊ทธ๋์ state ๋ ๊ฐ๋ฅผ ๊ฐ๊ฐ ๋ฐ๋ก ์์ฑํ๋ค.
const [sellerState] = useAsync(() => InfoService.getSeller(user), []);
const [buyerState] = useAsync(() => InfoService.getBuyer(user), []);
const { loadingSeller, data: seller, errorSeller } = sellerState;
const { loadingBuyer, data: buyer, errorBuyer } = buyerState;
๊ทผ๋ฐ ์ด๋ ๊ฒ ๋๋๊น ์ดํ ๋ชจ๋ ์ฝ๋์์ ๋ ๊ฐ์ state์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํญ์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์
์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ์ง์ ๋ถํด์ก๋ค.
if (userType === 'seller') {
if (loadingSeller) return <div>๋ก๋ฉ์ค..</div>;
if (errorSeller) return <div>์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.</div>;
if (!seller) return <div>๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.</div>;
} else {
if (loadingBuyer) return <div>๋ก๋ฉ์ค..</div>;
if (errorBuyer) return <div>์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.</div>;
if (!buyer) return <div>๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.</div>;
}
์ด๊ฑด ๋๋ฌด ๋ฌด์ํ ํด๊ฒฐ๋ฐฉ๋ฒ ๊ฐ์์, ์ด๋ป๊ฒ ํ๋ฉด ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์์์ง ์์๋ดค๋ค.
โชํด๊ฒฐ๋ฐฉ๋ฒ :
custom Hook ์์ฑ.
๋๋ buyer/seller๋ง ๊ตฌ๋ถํ๋ฉด ๋๋ ์ํฉ์ด๋๊น ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
const [state] = useAsync(
() =>
userType === 'seller'
? InfoService.getSeller(user)
: InfoService.getBuyer(user),
[],
);
const { loading, data, error } = state;
// ...
if (loading) return <div>๋ก๋ฉ์ค..</div>;
if (error) return <div>์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.</div>;
if (!data) return <div>๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.</div>;
ํจ์ฌ ๊น๋ํด์ก๋ค. (As it should be ๐)
On a side note...
๋ํ 4๋ ๊ฐ ๊ณผ์ /ํ๋ก์ ํธ ๋ฐ๋๋ผ์ธ์ ๋ง์ถ๊ธฐ ์ํด
'์ด๋ป๊ฒ๋ ๋์๊ฐ๊ธฐ๋ง ํ๋ฉด ๋์ง'๋ผ๋ ๋ง์ธ๋๋ก ์ฝ๋ฉ์ ํด์๊ธฐ์ ์ต๊ด์ด ํ์ฐธ ์๋ชป ๋ค์๋ค.
๊ทธ๋์ ์ฝ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๋๊ฒ ์ต์ํ์ง๊ฐ ์๊ณ
'์ ๋ง ์ต์ ์ผ๋ก ํจ์จ์ ์ธ ์ฝ๋์ธ์ง'๋ฅผ ๊ณ์ ์ ๊ฒฝ ์ฐ๋ค ๋ณด๋๊น ์คํธ๋ ์ค๋ ๋ฐ๋๋ค...ใ ใ
์ด๋ฐ ์ฌ์ํ ๋ฆฌํฉํ ๋ง๋ ๋๊ตฐ๊ฐ์๊ฒ๋ ์ฐ์ค์๋ณด์ด๊ฒ ์ง๋ง,
๋ํํ ๋ ํ ๋จ๊ณ์ ๋ฐ์ ์ด๊ธฐ์ ๊ธฐ๋กํด๋๋๋ค.