Today, What I learned?
ํ๋ก์ ํธ์ ๊ณต์ฉ ๋ชจ๋ฌ์ ํ์ฉํ๋ ค๊ณ ํ์ง๋ง ๐
๊ทธ๋๋ ํ์ฉํ ์ ์๋ ํํ๋ผ ๋ ๋ค๋ฅธ ์ปค์คํ ๋ชจ๋ฌ์ ๋ง๋ค์ด ๋ณด๊ธฐ๋ก ํ๋ค.
๋๋ถ์ด ๊ณต์ฉ ๋ชจ๋ฌ์ ์ด๋ป๊ฒ ๋ง๋ค ์ ์์์ง?? ์ง๋ ํ๋ก์ ํธ์์ ๋ง์ด ๊ณ ๋ฏผํ์๋๋ฐ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ฉ์ง๊ฒ ๊ตฌํํด ์ค ํ์ ๋ถ์ด ์์ด์!.. ๋ง์ด ๋ฐฐ์ ๋ค ๐ ๊ทธ๋์ ์ค๋์ ๋ชจ๋ฌ์ ๋ํด ์ ๋ฆฌํด ๋ณธ๋ค.
useModal hook
๋ชจ๋ฌ์ ๊ณตํต์ ์ผ๋ก ์ฐ๋ ค๋ฉด ์ผ๋จ ๋ชจ๋ฌ์ด ์ด๋ฆฌ๊ณ ๋ซํ๋ ์ํ๋ฅผ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๋ค.
์ด๋ฅผ ์ํด์ ๋ณดํต ์ปค์คํ
ํ
์ผ๋ก ๋ชจ๋ฌ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ํ๋ฅผ ๋ณ๊ฒฝํด ์ฃผ๋ ํจ์ ๊ฐ์ ๊ฒ์ ๋ง๋ค์ด์ฃผ์ด ๊ด๋ฆฌํ๋ค.
๋ ์ฌ๊ธฐ์ onClick
์ด๋ฒคํธ๋ onChange
์ด๋ฒคํธ์ฒ๋ผ ํ์ํ ๊ฒ๋ค์ ์ถ๊ฐํด ์ค๋ค.
const useModal = (initialValue: boolean) => {
const [isOpen, setIsOpen] = useState<boolean>(initialValue);
const handleModalStateChange = useCallback(() => {
setIsOpen((prev: boolean) => !prev);
}, [setIsOpen]);
...
์ ์ญ์ผ๋ก ์ด๋์์๋ ์ด๋ ค์ผ ํ๋ค๋ฉด ์ด ์ํ๋ redux๋.. recoil ๋ฑ์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ์ ์ญ์ผ๋ก ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๋ค. ๐
๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ชจ๋ฌ ์ปดํฌ๋ํธ์ ์ํ๋ค๊ณผ ํ์ํ ํจ์๋ค์ props๋ก ์ ๋ฌํด ์ฃผ๋ ํํ๋ก ์ฌ์ฉ!
์ปค์คํ ๋ชจ๋ฌ
์ปค์คํ ๋ชจ๋ฌ๋ ์ฐ์ ์ด๋ฆฌ๊ณ ๋ซํ ์ ์๋ ์ํ๊ฐ ๊ด๋ฆฌ๋์ด์ผ ํ๋ค.
๋ชจ๋ฌ ์ปดํฌ๋ํธ์๋ ํ์ํ props๋ค์ ์ ๋ฌํด ์ค๋ค.
...
<ProfileImgEditButton onClick={profileModalStateChange}>
<EditIcon />
</ProfileImgEditButton>
<ProfileImageModal
currentProfile={profileImg}
isOpen={isProfileModalOpen}
onChangeEvent={onChange}
onDeleteEvent={onDelete}
handleModalStateChange={profileModalStateChange}
/>
๋ชจ๋ฌ์ฐฝํ๋ฉด ๋ค์ฒ๋ฆฌ๋ ๋ ์ด์ด(๋ฐฑ๋๋กญ)์ ์ปจํ
์ด๋๊ฐ ์์ด์ผ ํ๋.. ๐isOpen
์ ํตํด์ ๋ชจ๋ฌ์ฐฝ์ด ๋ณด์ผ ์ ์๋๋ก ํ๋ค.
<ModalBackDrop isOpen={isOpen}>
<ModalContainer isOpen={isOpen}>
...
<ModalButton onClick={handleProfileDeleteClick}>
ํ๋กํ ์ญ์
</ModalButton>
<ModalButton onClick={handleProfileEditClick} isConfirm={true}>
ํ๋กํ ์์
</ModalButton>
</ModalButtonContainer>
</ModalContainer>
</ModalBackDrop>
);
๊ทธ๋ผ ์ด๋ ๊ฒ ์ ๋ณด์ธ๋ค!..
Comment