์ด์ ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด ์ค ๋ ์ฝ๊ฒ ์ ํด์ฃผ์๋ props๋, ํ์ ์ ์ ํด์ค์ผ ๋ ๋ฟ๋๋ฌ, useState์ผ๋ก ๋ฐ๋ setState ๊ฐ์๋ ํน๋ณํ ํ์ (?), ์ ๋๋ฆญ(?) ์ ์ง์ ํด์ค์ผ ๋๋ค.
props๋ก boolean ํ์ ์ useState ์น๊ตฌ๋ค์ ๋ด๋ ค์ค๋ค๊ณ ์๊ฐํด๋ณด์.
const [isActive, setIsActive] = useState(false);
์์ ๊ฐ์ด isActive์ false
๋ผ๋ ๊ฐ์ ์ฃผ์๊ธฐ์ ์์ ๋ฐ์ดํฐ๋ค์ ํ์
์ boolean
์ด ๋๋ค.
์ด์ ๊ฐ์ ๊ฐ๋ค์ ํ์ ์ปดํฌ๋ํธ์ธ Search
๋ก ๋ด๋ ค์ฃผ๊ณ ์ถ์ด์ ์๋ ํ๋๋ฐ๋ก ํ๊ฒ๋๋ฉด ํ์
์๋ฌ๋ฅผ ๋ง์ฃผ์น๊ฒ ๋ ๊ฒ์ด๋ค.
//!! type error !!
<Search isActive={isActive} setIsActive={setIsActive} />
์ ํํ ์ด์ ๋ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์๋ง ์์ ์ปดํฌ๋ํธ์์ ์ด๋ค์ ํ์
์ ๋ฐ์ ์ค๋น๊ฐ ์๋์ด์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋๋ ์ด๋ฏธ useState
๋จ๊ณ์์ boolean
์ ์ง์ ํ๊ฒ ํด์ค์ ์์์ ์ธ์์ ํ ๊ฒ์ด๋ผ๊ณ ์ฌ๊ฒผ๋๋ฐ, ๊ทธ๊ฒ์ด ์๋๊ฐ๋ณด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฒ์ props๋ฅผ ๋ฐ์ ์์ ์ปดํฌ๋ํธ์์ interface๋ก ๋ฌด์จ type์ด ์ง์ ๋ ๊ฒ์ธ์ง ์ค์ ํด ๋ณด๋ ค๊ณ ํ๋ค.
interface isProps {
isActive: boolean;
// type error!
setIsActive: boolean
}
isActive
๊ฐ boolean
๊ฐ์ด๋ผ๋ ๊ฒ๋ ์๊ณ setIsActive
๋ ๊ฒฐ๊ตญ boolean
์ ํํ๋ฅผ ๋์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ์ ์ด๋ฆฌ ์ง์ ์ ํ๊ณ props๋ฅผ ์ฌ์ฉํ๋ คํ๋๋ฐ ํ์
์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
์ ์ง์ ๋ฅํ Stackoverflow์์ ์ด๋ฅด๊ธธ, setIsActive ๊ฐ์ setState๋ค์ ํน๋ณํ ํ์ ? ์ ๋๋ฆญ? ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ํ๋ค..! ๋ฐ๋ก ์๋์ ๊ฐ์ด
interface isProps {
isActive: boolean;
setIsActive: React.Dispatch<React.SetStateAction<boolean>>;
}
์ด๋ ๊ฒ ํ๊ณ ์ฌ์ฉํ ํจ์ํ ์ปดํฌ๋ํธ์์ isProps์ ํ์ ๊ฐ์ผ๋ก ํธ์ถํ๋ ์ ์๋์ด ๋๋ค.
function Search({ isActive, setIsActive }: isProps) {
/* SearchModal ์๋ boolean */
const ModalHandler = () => {
setIsActive(!isActive);
};