[React] ๋ฐ์ดํฐ ์ฐ๊ฒฐํ ๋ชจ๋ฌ ๋ฒ๋ฒ ๊ฑฐ๋ฆผ ํด๊ฒฐ(๋ถ์ : framer motion์ผ๋ก ์ ๋๋ฉ์ด์ ์ฃผ์์ ๋ ํด๊ฒฐ๋ฐฉ์)
์์ ๊ฐ์ด๋ ์์ฑํ๋ค๋ณด๋ ํฐ์คํ ๋ฆฌ ๊ธ๋ค์ด ๋๋ฌด ๋ฐ๋ ค๋ฒ๋ ค์ ์ฌํ๋ค
์๋ฌ ์งฑ ๋ง์ด ๋ฌ๋๋ฐ,,,ใ ใ ์ค๋๋ถํฐ ํ๋์ฉ ์จ์ผ์ง....
ํฌํธํด๋ฆฌ์ค ์ ์์ด ์ผ์ถ ๋๋ฌ๊ธฐ ๋๋ฌธ์ ์ต์ข ํ์ธ์ ํ๋ ๋์ค ์๋ฌด๋ฆฌ ๋ด๋ ๋ด๊ฐ ๋ณด๊ธฐ์ ๊ณ ์น ์ ์ด ์๋ณด์ด๋ ๊ฒ์ด์๋ค ์์ ๊ฐ ๋์น๋ ๋ณ์ด ์๊ฒผ๋ค (์ ๋ชป์์ ๊ทธ๋ฐ ๊ฒ ๊ฐ์)
๊ทธ๋์ ์ฃผ๋ณ์ธ๋ค์ ์๋๋ก ๊ฐ๋ณ๊ฒ QA๋ฅผ ์งํํด๋ณด๋๋ก ํ๋ค ๊ฑฐ์ฐฝํ๊ฒ ๋งํ๋ฉด UI ํ ์คํธ!
1. ๋ ์ด์์ ๊นจ์ง ํ์ธ
2. ๋์์ธ์์ ๋์ ํ๋ ๊ฒ์ด ์๋์ง
3. ์ฌ์ดํธ ์ฒ์ ์ ์ ์ ์ด๋ฏธ์ง ๋ก๋ฉ ์๋๊ฐ ์ด๋ค์ง
4. ๋๋ฌ๋ณด๊ณ ์ถ์๊ฑฐ ๋ค ๋๋ฌ๋ณด๊ณ ๊ธฐ๋ฅ ์ด์์ด ์๋ ๊ฒ์ด ์๋์ง
์ด๋ ๊ฒ 4๊ฐ์ง๋ง ํ์ธํด๋ฌ๋ผ๊ณ ํ๋ค
ํฌํธํด๋ฆฌ์ค ๋์์ธ ์์ ํ ์ฃผ๋ณ ์ฌ๋๋คํํ ํ์ธ ๋ฐ๋๊ฒ ์๊ฐ๋ณด๋ค ํ๋ฆฌํฐ ๋์ด๋ ๋ฐ ๋์์ด ๋ง์ด ๋์ด์ ์ด๋ฒ์๋ ํด๋ดค๋๋ฐ ์ญ์๋ 5๋ถ๋ ์๋์ ์ด๊ฑฐ ์์ด๋ฌ๋๋ ๋ฌผ์์ ๋ฐ์๋ค

๋ฐ์ดํฐ๋ฅผ ์ ํ ๋ชจ๋ฌ์ด ๋ฑ์ฅํ ๋ ๋ฒ๋ฒ ์ด๋๋ผ๊ตฌ์
์ง์ง ์์ ๋....
ํ 2์๊ฐ ์๊ฐํ ๊ฒฐ๊ณผ ์๋ฌด๋๋ ๋ชจ๋ฌ ์ iframe์์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ์์ด์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๋ ์๋๋๋ฌธ์ ๋ก๋ฉ์๋๊ฐ ์ฐจ์ด๋์ ๋ฐ์ํ๋ ๋ฒ๋ฒ ๊ฑฐ๋ฆผ ๊ฐ์์ ์ปจํ ์ธ ๋ค์ด๊ฐ ์๋ ๋ถ๋ชจํ๊ทธ์ ์๊ฐ์ฐจ๋ฅผ ์ค๋ดค๋ค
์ฐธ๊ณ ๋ก ๋๋ framer-motion ์จ๋ณด๊ณ ์ถ์ด์ ๋ชจ๋ฌ ์ ๋๋ฉ์ด์ ์ผ๋ก ์ ์ฉํด๋ดค๋๋ฐ ํ ์ด๋์ plugin์ฐ๋ ์ถ์ ์ ๋๋ก ๋งค์ฐ ๊ฐํธ...
<AnimatePresence>
{Open && (
<motion.aside
className='modal'
initial={{ opacity: 0, scale: 0 }}
animate={{ opacity: 1, scale: 1, transition: { duration: 0.6 } }}
exit={{ opacity: 0, transition: { duration: 0.6 } }}
>
<div className='con' >{props.children}</div>
<span className='close' onClick={() => setOpen(false)}>
Close
</span>
</motion.aside>
)}
</AnimatePresence>
์ด๊ฒ ๊ธฐ์กด์ ์ฝ๋๋ค ์ ์ฒด๋ฅผ ๊ฐ์ธ๋ aside ํ๊ทธ์๋ง ์ ๋๋ฉ์ด์ ์ ์ฉํ ์ํ
์ 'con' ํด๋์ค ์ ์ฉ๋ div ํ๊ทธ์๋ ๋ชจ์ ์ ์ฃผ์ด๋ณด๋ คํจ!
<AnimatePresence>
{Open && (
<motion.aside
className='modal'
initial={{ opacity: 0, scale: 0 }}
animate={{ opacity: 1, scale: 1, transition: { duration: 0.6 } }}
exit={{ opacity: 0, transition: { duration: 0.6 } }}
>
<motion.div
className='con'
initial={{ opacity: 0 }}
animate={{ opacity: 1, transition: { delay: 0.6 } }}
exit={{ opacity: 0 }}
>
{props.children}
</motion.div>
<motion.span
className='close'
onClick={() => setOpen(false)}
initial={{ x: 100, opacity: 0 }}
animate={{ x: 0, opacity: 1, transition: { delay: 0.7 } }}
exit={{ x: 100, opacity: 0 }}
>
Close
</motion.span>
</motion.aside>
)}
</AnimatePresence>
์ฃผ๋ ๊น์ close ๋ฒํผ์๋ ๋ชจ์ ์คใ ใ
์ด....? ๋๋ค!
ํด๊ฒฐ!!!!!!!!!!