๐ ๋ฌธ์ ํ์
- ๊ณต์ ํ๊ธฐ ๋ชจ๋ฌ์ ์ฒ์ ํด๋ฆญํ ๋ ๋ชจ๋ฌ์ด ๋ฐ๋ก ๋ซํ๋ ํ์ ๋ฐ์
- ๋ ๋ฒ์งธ ์ดํ ํด๋ฆญ๋ถํฐ๋ ์ ์์ ์ผ๋ก ์๋ํ๋ ๋ถ๊ท์นํ ๋์
๐งช ์์ธ ๋ถ์
1. ๋ชจ๋ฌ ์๋ช
์ฃผ๊ธฐ์ ์ํ ๊ด๋ฆฌ ์ถฉ๋
- ์ปดํฌ๋ํธ๊ฐ ๋ ๊ฐ์ ๋
๋ฆฝ์ ์ธ ์ํ ์ ์ฅ์๋ฅผ ์ฌ์ฉํจ
useSaveShareModalStore (๊ณต์ ๋ชจ๋ฌ ์ ์ฉ ์ํ)
useCommonModalStore (๊ณตํต ๋ชจ๋ฌ UI ์ํ)
- ์ํ ๋ณ๊ฒฝ ์ ๊ฐ ์ ์ฅ์์ ์
๋ฐ์ดํธ ์์ ์ฐจ์ด๋ก ์ธํ ์ถฉ๋ ๋ฐ์
2. useEffect์ cleanup ํจ์ ๋ฌธ์
useEffect(() => {
if (isOpen && cardId) {
openCommonModal({ ... });
} else {
closeCommonModal();
}
return () => {
if (isOpen) {
closeCommonModal();
close();
}
};
}, [...]);
- React ์๋ช
์ฃผ๊ธฐ ํน์ฑ์, ์ํ ๋ณํ๋ก ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ์ด์ useEffect์ cleanup ํจ์๊ฐ ์คํ๋จ
- ์ฒซ ํด๋ฆญ ์:
isOpen์ด false์์ true๋ก ๋ณ๊ฒฝ
- ์ํ ๋ณํ๋ก ๋ฆฌ๋ ๋๋ง ๋ฐ์
- ์ด์ useEffect์ cleanup์ด ๋จผ์ ์คํ๋จ (
isOpen์ ์ฌ์ ํ true)
- cleanup์์
closeCommonModal()๊ณผ close() ์คํ๋์ด ๋ชจ๋ฌ์ด ๋ซํ
- ์ useEffect ์คํ ์์ ์์ ๋ชจ๋ฌ์ ์ด๋ฏธ ๋ซํ ์์
3. ์ํ ๋๊ธฐํ ๋ถ์ฌ
- CommonModalStore์ SaveShareModalStore ๊ฐ์ ์ํ ๋๊ธฐํ ๋ก์ง์ด ์์ด์ ๋ ์ํ๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐ์
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ๋ชจ๋ฌ ์ด๊ธฐํ ์ํ ์ถ์
const [modalInitialized, setModalInitialized] = useState(false);
- ๋ชจ๋ฌ์ด ์ ์์ ์ผ๋ก ์ด๊ธฐํ๋์๋์ง ์ถ์ ํ๋ ํ๋๊ทธ ์ถ๊ฐ
2. ์กฐ๊ฑด๋ถ ๋ชจ๋ฌ ๊ด๋ฆฌ ๋ก์ง ๊ฐ์
if (!isOpen) {
if (modalInitialized) {
closeCommonModal();
setModalInitialized(false);
}
return;
}
if (cardId && isOpen) {
openCommonModal({ ... });
setModalInitialized(true);
}
- ๋ช
ํํ ์กฐ๊ฑด๋ถ ๋ก์ง์ผ๋ก cleanup ํจ์์์ ๋ฐ์ํ๋ ์๊ธฐ์น ์์ ๋์ ๋ฐฉ์ง
3. ์๋ฐฉํฅ ์ํ ๋๊ธฐํ ์ถ๊ฐ
const commonModalIsOpen = useCommonModalStore((state) => state.isOpen);
useEffect(() => {
if (!commonModalIsOpen && isOpen && modalInitialized) {
close();
setModalInitialized(false);
}
}, [commonModalIsOpen, isOpen, close, modalInitialized]);
- CommonModalStore์ ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ SaveShareModalStore์ ๋๊ธฐํ
4. ๋ถํ์ํ cleanup ๋ก์ง ์ ๊ฑฐ
- ๊ธฐ์กด ์ฝ๋์ ๋ฌธ์ ์๋ useEffect cleanup์์ ๋ชจ๋ฌ์ ๋ฌด์กฐ๊ฑด ๋ซ๋ ๋ก์ง ์ ๊ฑฐ
- ๋์ ์ํ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก ์ฒ๋ฆฌํ๋๋ก ๋ณ๊ฒฝ
๐ ๊ตํ
๋ค์ค ์ํ ๊ด๋ฆฌ ์์คํ
์ฌ์ฉ ์ ์ฃผ์์
- ์ฌ๋ฌ ์ํ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋๋ ์ํ ๊ฐ ๋๊ธฐํ ๋ก์ง์ด ํ์์
- ํนํ ๋ชจ๋ฌ์ฒ๋ผ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ด์ฌํ๋ UI ์์๋ ์ํ ๊ด๋ฆฌ์ ๋ ์ฃผ์ํด์ผ ํจ
useEffect cleanup ํจ์์ ์ ํํ ์ดํด
- cleanup ํจ์๋ ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ๋ฟ๋ง ์๋๋ผ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ด์ useEffect์ cleanup์ด ์คํ๋จ
- cleanup์์ ์ํํ๋ ์์
์ด ๋ค์ ๋ ๋๋ง ์ฌ์ดํด์ ์ํฅ์ ์ค ์ ์์์ ์ธ์งํด์ผ ํจ
์ํ ๋ณํ ๋๋ฒ๊น
์ ์ค์์ฑ
- React ๊ฐ๋ฐ์ ๋๊ตฌ๋ ๋ก๊น
์ ํตํด ์ํ ๋ณํ ์์์ ํ์ด๋ฐ์ ํ์ธํ๋ ๊ฒ์ด ์ค์
์ ํธ๋ฌ๋ธ์ํ
์ ํตํด ๋ชจ๋ฌ์ ์ฒซ ๋ฒ์งธ ํด๋ฆญ ์์๋ ์์ ์ ์ผ๋ก ์๋ํ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.