๊ฐ์
๋ฏธ์ | ๊ธฐ๊ฐ | Repository | PR & Review | github page | storybook |
---|---|---|---|---|---|
ํ์ด๋จผ์ธ ๋ฏธ์ 1๋จ๊ณ | 23-05-02 - 23-05-08 | Repo | PR & Review | ๐ณ ํ์ด๋จผ์ธ | ๐์คํ ๋ฆฌ๋ถ |
๋ฏธ์ ํ๊ณ
ํ์ด๋จผ์ธ ๋ฏธ์ ์ ๋ง์ง๋ง ๋จ๊ณ์ ํ์ ์๊ตฌ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฌ์ฉํ๋ ๋ชจ๋ฌ์ ๋ถ๋ฆฌํด์ npm์ผ๋ก ๋ฐฐํฌํ๊ณ , ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ import ํด์ ์ฌ์ฉํ๊ธฐ
2. ๋ฌธ์๋ก์ ์คํ ๋ฆฌ๋ถ์ ๊ณ ๋ํํ๊ธฐ ์ํด ๋ฆฌํฉํฐ๋ง
3. '์นด๋๋ฅผ ๋ฑ๋ก ์ค์ ๋๋ค.' ์คํผ๋ ์ถ๊ฐ
2, 3๋ฒ์ ์๊ตฌ์ฌํญ๋ณด๋ค 1๋ฒ ์๊ตฌ์ฌํญ์ ์ด์ ์ ๋๊ณ 3๋จ๊ณ๋ฅผ ์งํํ์๋ค. ๊ฐ๋ตํ ๋งํ์๋ฉด ์คํ ๋ฆฌ๋ถ์ 7 ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ค, autodocs ๊ธฐ๋ฅ์ ์ฌ์ฉํ์. '์นด๋๋ฅผ ๋ฑ๋ก ์ค์ ๋๋ค.' ์คํผ๋๋ ํผ๊ทธ๋ง์ ์๋ ์๊ตฌ์ฌํญ์ ๊ทธ๋๋ก ๋ฐ์ํ์๋ค. ๋ค๋ฅธ ํฌ๋ฃจ๋ค์ ์คํผ๋๋ฅผ ๋ณด๋ฉด ๋ฉ์ง ์ ๋๋ฉ์ด์ ์ด ์์ด ๋์ด ์ฆ๊ฑฐ์ด๋ฐ ๋ ๊ทธ๋ ์ง ๋ชปํด ์์ฌ์ด ๋ง์์ด ์๋ค.
๊ฑฐ์ ํ์์ผ๋ถํฐ ํ ์์ผ๊น์ง ๋ชจ๋ฌ์ ๋ถ๋ฆฌํ๊ณ npm ๋ฐฐํฌ๋ฅผ ํ์๋ค. ํ๋ ๋ง์ด ๋ฐ๋์๋ค ๋ณด๋ Major ๋ฒ์ ๋ ํ๋ ์ฌ๋ผ๊ฐ๊ณ Patch ๋ฒ์ ๋ ์๋ ์์ด ์ ๋ฐ์ดํธ๋์๋ค. ๋ชจ๋ฌ์ ์ฝ๊ฒ ๋ฑ๋กํ๊ณ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์ํด ๋๋ฆ ๋ ธ๋ ฅํ๋ค๊ณ ์๊ฐํ๋ค.
noah-modal
์ด๋ฒ ๋ฏธ์ ์์ ๋ด๊ฐ ๋ฐฐํฌํ ๋ชจ๋ฌ์ ์ด๋ฆ์ noah-modal์ด๋ค. ์๋์ ์ฃผ์์์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ธํ ์ ์๋ค.
githubRepo - noal-modal ๋ฐ๋ก๊ฐ๊ธฐ
๋ฌธ์๋ฅผ ํตํด ์ฌ์ฉ๋ฒ์ ์๋ ค์ฃผ๊ธฐ ์ํด ๋๋ฆ READMD๋ ์์ฑํด ๋ณด์๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ์ง ์๊ฒ ์ง๋ง ์์ด๋ก ์์ฑํ๋ค๋ฉด ์กฐ๊ธ ๋ ๋ฉ์ง ๋ฌธ์๊ฐ ๋ง๋ค์ด์ง์ง ์์์๊น ์ถ๋ค.
๐ต๐ซ ๋ฐฉํฅ์ ์ก์ง ๋ชปํ 0๋ฒ์ ์ noah-modal
2๋จ๊ณ ๋ฏธ์ ์์ ๋ชจ๋ฌ์ ๋ง๋ค ๋, contextAPI๋ฅผ ์ ์ฉํ์๋ค. ์ดํ ๋ชจ๋ฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ , ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํด ๋ณด์๋ค. ๊ทธ ๊ฒฐ๊ณผ ๊ฐ์ ์ปดํฌ๋ํธ ๋ด์์ ๋ ๋ค๋ฅธ ๋ชจ๋ฌ์ ๋์ฐ๊ฒ ๋๋ค๋ฉด ๋ชจ๋ฌ์ด ํ๋๋ง ๋ํ๋๋ ๊ฒ์ด ์๋๋ผ ๋ ๊ฐ๊ฐ ๋ํ๋๋ ์ค๋ฅ๊ฐ ์์๋ค. ๋๋ฌธ์ contextAPI๋ฅผ ๊ทธ๋๋ก ์ ์งํด์ผ ํ ์ง ๊ณ ๋ฏผ์ด์๋ค.
๊ทธ๋์ ์ฒ์์ useModal, Modal(๋ฆฌ์กํธ ์ปดํฌ๋ํธ)๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ๋ถ๋ฌ์ ํ์ํ ๊ณณ์ import ํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ๋ค.
function Something() {
const { isModalOpen, animation, delayMsTime, openModal, closeModal, changeAnimationMode } = useModal()
// ...
return (
// ...
{isModalOpen && <MyModal
animation={animation}
closeModal={closeModal}
delayMsTime={delayMsTime}
// ...
/>}
)
}
์ค์ ์ฌ์ฉ๊ณผ๋ ์ ํํ ๊ฐ์ง ์์ง๋ง ๋๋ต ์์ ๊ฐ์ ํ์์ด๋ค. useModal๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ง๋๋๋ฐ ํ์ํ ์ฌ๋ฌ ์ํ๋ฅผ ๋ถ๋ฌ์จ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ฌ์ฉํ๋ ์ ์ฅ์์ ์ ๊ฒฝ ์จ์ผ ํ ๋ถ๋ถ์ด ์ด๋ง์ ๋ง์ด ์๋๋ค. ๋ณด๋ค ์ฝ๊ฒ ๋ชจ๋ฌ์ ๋ง๋ค๊ณ ๋ชจ๋ฌ์ ์ฌ์ฉํ๊ณ ์ถ์ ์๊ฐ์ด ๋ค์๋ค. ๋ํ contextAPI, Provider๋ฅผ ํตํด ๋ชจ๋ฌ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๊ณ ์ถ์ ๋ง์๋ ์์๋ค.
๐ Provider๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ฑ๋กํ ์ ์์๊น? - 2๋ฒ์ ์ noal-modal
provider๋ฅผ ์ ์ฉํ๊ณ ์ถ์ ์๊ฐ์ด ๋จธ๋ฆฌ์์ ์ง๋ฐฐํ๋ค. ๊ทธ๋์ ๊ธฐ์กด์ ๋ฐฉ๋ฒ์ด ์๋๋ผ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋์ฐ๋ค. ๋ง์น react-router-dom์์ route๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ฒ๋ผ modal๋ ๋ฑ๋กํ ์ ์์๊น?๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋์๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์๊ฐ์ ํด๋ณด์๋ค.
1. ModalProvider์ ์๋น์ค์์ ์ฌ์ฉํ๊ฒ ๋ ๋ชจ๋ฌ ๋ฑ๋กํ๊ธฐ
2. ๋ชจ๋ฌ์ ์์ ์ ์๋ณํ ์ ์๋ name ์ถ๊ฐํ๊ธฐ
3. openModal, closeModal ํจ์์ name ์ธ์๋ฅผ ๋ฃ์ด ํ์ํ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ
1๋ฒ์ด ๊ฐ์ฅ ๊น๋ค๋ก์ ๋ค. 2, 3๋ฒ์ 1๋ฒ์ด ์๋ฃ๋๋ฉด ์ฝ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
1๏ธโฃ ModalProvider์ ์๋น์ค์์ ์ฌ์ฉํ๊ฒ ๋ ๋ชจ๋ฌ ๋ฑ๋กํ๊ธฐ
1๋ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ผ๋จ ๋ฌธ์ ๋ฅผ ๋ ๊ฐ๋ก ๋๋์๋ค.
์ฒซ ๋ฒ์งธ๋ "์ด๋ป๊ฒ ๋ฑ๋กํ ๊ฒ์ธ๊ฐ?"์ด๋ค.
์ฒ์์ ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
// Index.tsx
function Index() {
//...
return (
<>
// ...
<ModalProvider>
<App />
</ModalPrivider>
</>
)
}
// App.tsx
function App() {
const { registerModal } = useModal()
useEffect(() => {
registerModal(myModal)
}, [])
// ...
return (
// ...
)
}
App ์ปดํฌ๋ํธ๋ฅผ ModalProvider๋ก ๊ฐ์ธ๊ณ App ์ปดํฌ๋ํธ ๋ด๋ถ์์ useModal์์ ์ ๊ณตํ๋ registerModal ํจ์๋ฅผ ํตํด ๋ชจ๋ฌ์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ๊ฐ์ ์ปดํฌ๋ํธ ๋จ์์ ํ๊ฒ ๋๋ค๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ ModalProvider๋ก ๊ฐ์ธ์ฌ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ฌ์ ๋ฑ๋กํด๋ ๋ชจ๋ฌ์ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์๋ค.
์ด๋ฅผ ํ ๋ฒ์ ํ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผ์ ํ๋ค ์๋ก์คํ๊ฐ "ModalProvider์ modal๋ฅผ props๋ก ๋๊ฒจ์ฃผ๋ฉด ๋์ง ์๋๋?" ํ๋ ํด๊ฒฐ๋ฒ์ ์ ์ํด ์ฃผ์๋ค. ๊ทธ๋์ ์ต์ข ์ ์ผ๋ก ModalProvider๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
function App() {
// ...
return (
<>
// ...
<ModalProvider modal={myModal}>
<App />
</ModalProvider>
</>
)
}
๋ ๋ฒ์งธ๋ "์ด๋ป๊ฒ ๋ชจ๋ฌ์ ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ?"์ด๋ค.
ModalProvider์๊ฒ ๋ด๊ฐ ์๋น์ค์ ๋ฑ๋กํ modal ๊ฐ์ฒด๋ฅผ ๋๊ฒผ๋ค. ์ดํ์ ๋ด๊ฐ ์ํ๋ ๋ชจ๋ฌ์ ๋ถ๋ฌ์์ผ ํ๋ค. ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ useModal ํ ์ ํตํด ๋ฐํ์ ํ ์ ์๋๋ก ํ๊ณ ์ถ์๋ค.
function App() {
const { Modal } = useModal();
return (
<>
// ...
{Modal && Modal}
</>
);
}
export default App;
Modal์ undefined ์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ &&๋ฅผ ํ์ฉํ์ฌ ์์ ๊ฒฝ์ฐ์๋ง ๋๋๋ง์ ํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์์ ์ค์ํ ์ ์ Modal์ ํจ์์ฌ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ฆ ๋ค์๊ณผ ๊ฐ์ด useModal์ ํตํด Modal๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
return () => (
<Modal
title={title}
name={name}
isAbleBackdropClick={isAbleBackdropClick || true}
delayMsTime={delayMsTime || 0}
animation={animation}
closeModal={closeModal}
children={component}
/>
);
2๏ธโฃ ๋ชจ๋ฌ์ ์์ ์ ์๋ณํ ์ ์๋ name ์ถ๊ฐํ๊ธฐ
๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ฌ์ ๋ฑ๋กํ๊ธฐ ์ํด์ ์ด๋ค ๊ฐ์ด ํ์ํ ๊น? ๋ชจ๋ ์ค์ํ์ง๋ง ์๋ณํ ์ ์๋ name์ด ์ ์ผ ์ค์ํ๋ค. ํด๋น name์ผ๋ก ๋ฑ๋ก๋ ๋ชจ๋ฌ์ ์ด๊ณ ๋ซ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฌด๋ฆฌ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋ฌ์ ๋ฑ๋กํด๋ name์ด ์์ผ๋ฉด ์ ๋๋ค. ๋น์ฐํ typescript์ด๊ธฐ ๋๋ฌธ์ ํ์๊ฐ์ด ์์ผ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
name๊ฐ ๋๋ถ์ด ๋ค์ํ ๊ฐ์ด ํ์ํ๋ค. ๋ค์์ ํ์ด๋จผ์ธ ๋ฏธ์ ์ ๋ฑ๋กํ ๋ชจ๋ฌ์ด๋ค.
[
{
title: '์นด๋์ฌ ๋ฑ๋ก',
component: <CreditCardCompanyModal />,
name: 'creditCardCompany',
delayMsTime: 500,
},
]
์ด์ค titls, component, name์ ํ์์ด๊ณ delayMsTime ์ต์ ๊ฐ์ด๋ค. ์ด๋ฟ๋ง ์๋๋ผ isAbleBackdropClick ์์ฑ๋ ์๋ค. ์ด์ ๊ด๋ จํ ์์ธํ ์ค๋ช ์ REDAME, npm noah-modal ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ณผ ์ ์๋ค.
3๏ธโฃ openModal, closeModal ํจ์์ name ์ธ์๋ฅผ ๋ฃ์ด ํ์ํ ๊ณณ์์ ์ฌ์ฉํ๊ธฐ
์ง๊ธ๊น์ง ๋ฑ๋ก์ ์ํ ๊ณผ์ ์ด์๋ค๋ฉด ์ด๋ฒ์ ๋ชจ๋ฌ์ ์ด๊ณ ๋ซ๋ ๊ณผ์ ์ด๋ค. openModal, closeModal๋ useModal ํ ์ ํตํด ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. 2๋ฒ์์ ๋ฑ๋กํ ๋ชจ๋ฌ์ name๋ฅผ ์ธ์๋ก ๋๊ธฐ๋ฉด ๋๋ค.
function someThing() {
const { openModal, closeModal } = useModal()
const fn1 = () => openModal("myModal")
const fn2 = () => closeModal("myModal")
// ...
}
๋ง์ฝ ์๋ชป๋ name๋ฅผ ๋๊ธฐ๋ฉด ๋น์ฐํ ๋ชจ๋ฌ์ ๋ํ๋์ง ์๊ณ console์์ ํด๋น ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์๋ค.
๐ฃ noah-modal์ ๋ํด ์์ฌ์ด ์
1. name์ ํ์ ์ด string์ด๋ค.(์ ๋์จ์ด์์ผ๋ฉด ๋์ฑ ์ข์์ ๊ฒ!)
2. ์ค๋ณต๋ name์ ๋ํ ๋ฐฉ์ด์ฝ๋๊ฐ ์๋ค.
3. animation์ด ๋๋๊ธฐ ์ ๋ชจ๋ฌ์ ๋ค์ ์ฐ๋ค๋ฉด ๋ชจ๋ฌ์ด ์ด๋ฆฌ์ง ์๋๋ค.
๐ ์ํ ์
1. ์ฌ์ฉ์ฑ ๋์ ๋ชจ๋ฌ์ ๋ง๋ค๊ธฐ ์ํด ๊ณ์ ๊ณ ๋ฏผ์ ํ์๋ค.
2. ์คํผ๋๋ฅผ ์๊ฐ๋ณด๋ค ์ด๋ ต์ง ์๊ฒ ๋ง๋ค์๋ค.
3. ๋ฌด์๋ณด๋ค npm ๋ฐฐํฌ๋ฅผ ์ฑ๊ณตํ๊ณ ์ด๋ฅผ ์ค์ ๋ก ์ฌ์ฉํด ๋ณธ ๊ฒ!
๐ ์์ฌ์ด ์
1. ๋ชจ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ง์ ์๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์๊ตฌ์ฌํญ์ ์ํํ ํ๋ค.
2. noah-modal ์ปค๋ฐ์ ์ค๊ตฌ๋๋ฐฉ์ผ๋ก ํ๋ค.
3. ๋ฆฌ๋ทฐ์ด์ ๋ง์ ํํ์ ํ์ง ๋ชปํ๋ค.
๐ ์์ผ๋ก์ ๊ฐ์ค
1. ์ง๊ธ์ฒ๋ผ ์๊ตฌ์ฌํญ์ ๋ํด ์ต๋ํ ์ง์คํ์.
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > Level2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ - Step2 (0) | 2023.06.06 |
---|---|
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ - Step1 (0) | 2023.05.27 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step2 (1) | 2023.05.09 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step1 (4) | 2023.04.24 |
๋ ๋ฒจ2 ๋ค์, ์ ์ฌ ๋ญ ๋จน์ง - Step 2 (11) | 2023.04.21 |