๋ฐ์ํ
๐ ๋๋ฌด๋ ์ฌ์ด ๋ฆฌ์กํธ ๋ชจ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ ์๊ฒ ๋ฑ ๋ง๋ ์คํ์ผ์ ๋ชจ๋ฌ ์ปดํฌ๋ํธ, ์ฌ์ฌ์ฉํ๋ ค๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์์ต๋๋ค.
- 6๊ฐ์ ์ ๋์ถฉ ๋ง๋ค๋ค ๋ง์๋ ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์กฐ ๋ค์ ์ง๋๋ผ ํ ํ ๋ป ํ์ต๋๋ค.
- ๋ค๋ฅธ ์ข ์์ฑ ์์ด react context๋ฅผ ์ด์ฉํด ๋ง๋ค์์ต๋๋ค.
- ๋ชจ๋ฌ ์กฐ์์ ๊ด๋ จ๋ ๋ก์ง๋ง ์ถ์ํํ๊ณ , ์คํ์ผ๊ณผ UI ๋ ๋ ๊ด๋ จ ๋ก์ง์ ์ต๋ํ headless ํ๊ฒ ๋ง๋ค์ด ์ด๋ ํ๋ก์ ํธ์์๋ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์์ต๋๋ค.
- ๋ค์ค ๋ชจ๋ฌ ๊ธฐ๋ฅ์ UX์ ์ผ๋ก ๊ทธ๋ฅ์ด๋ผ ์ถ๊ฐํ์ง ์์์ต๋๋ค.
- ์ ์ฒด ์ ์ฉ ๊ธฐ๋ณธ ์คํ์ผ์ provider์๊ฒ, ๊ฐ๋ณ ์ ์ฉํ ์คํ์ผ์ openModal() ํจ์์๊ฒ.
- ์ง์ง ์ฝ๊ณ ๊ฐํธํ๋๊น ํ๋ฒ๋ง ์จ์ฃผ์ธ์
๐ @lasbe/react-modal
์ ์ธ์ ์ผ๋ก ๋ชจ๋ฌ์ ์ฌ์ฉํ ์ ์๋ ํจํค์ง์
๋๋ค.
๊ตฌ์ฑ๊ณผ ๋์์ธ์ ์ต๋ํ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ฌ์ ๋ฐฐ๊ฒฝ์ธ dimmer์ ์คํฌ๋กค ๋ฐฉ์ง ๊ธฐ๋ฅ์ด ํฌํจ ๋์ด ์์ต๋๋ค.
๐ install
$ npm i @lasbe/react-modal
๐ example
ModalProvider
๋ฅผ ์์ ์ปดํฌ๋ํธ์ ๊ฐ์์ค๋๋ค.
root.render(
<ModalProvider>
<App />
</ModalProvider>,
);
useModal()
ํ ์ ์ด์ฉํด ๋ชจ๋ฌ์ ์ฌ๋ซ๋ ํจ์๋ฅผ ์ด์ฉํฉ๋๋ค.ModalStyle
์ import ํ์ฌ ๊ธฐ๋ณธ ์คํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import React from 'react';
import { useModal, ModalStyle } from '@lasbe/react-modal';
function App() {
const { openModal, closeModal } = useModal();
return (
<button
onClick={() =>
openModal({
content: (
<>
<ModalStyle.Header>
<ModalStyle.Title>Header</ModalStyle.Title>
</ModalStyle.Header>
<ModalStyle.Body>Body</ModalStyle.Body>
<ModalStyle.Footer>
<ModalStyle.Button color="gray" onClick={closeModal}>
Close
</ModalStyle.Button>
<ModalStyle.Button onClick={closeModal}>Submit</ModalStyle.Button>
</ModalStyle.Footer>
</>
),
})
}
>
OPEN MODAL
</button>
);
}
export default App;
๐ props
<ModalProvider />
type ModalProvidertype = {
children: React.ReactElement;
options?: {
// ๋ชจ๋ฌ ๋ฐฐ๊ฒฝ ์คํ์ผ ์ง์
dimmer?: React.CSSProperties;
// ๋ชจ๋ฌ body ์คํ์ผ ์ง์
body?: React.CSSProperties;
// ๋ชจ๋ฌ ์ฌ๋ซ์ ๋ ์ ๋๋ฉ์ด์
์ ์ฉ ์ฌ๋ถ
useAnimation?: boolean;
};
};
openModal()
type OpenModalType = {
// Modal์ ๋์ธ ์์
content: React.ReactNode;
options?: {
// ๋ชจ๋ฌ ๋ฐฐ๊ฒฝ ์คํ์ผ ์ง์
dimmer?: React.CSSProperties;
// ๋ชจ๋ฌ body ์คํ์ผ ์ง์
body?: React.CSSProperties;
// ๋ชจ๋ฌ ์ฌ๋ซ์ ๋ ์ ๋๋ฉ์ด์
์ ์ฉ ์ฌ๋ถ
useAnimation?: boolean;
};
};
๋ฐ์ํ
๋๊ธ