1์ฐจ ํ๋ก์ ํธ๊ฐ ๋๋๊ฒ ์๊ทธ์ ๊ฐ์๋ฐ ๋ฒ์จ 2์ฐจ ํ๋ก์ ํธ์ 1์ฐจ ์คํ๋ฆฐํธ๊ฐ ๋์ด ๋ฌ๋ค... 1์ฐจ ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ๋ง ํด๋์คํ ์ปดํฌ๋ํธ์ ์ต์ํด์ก๋ค๊ณ ์๊ฐํ๋๋ฐ 2์ฐจ๋ก ์ค๋ฉด์ ํจ์ํ์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์ต์ํด์ง๋๋ฐ์ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค.
ํ์ฌ๊ฐ ๊ฑฐ๋์ ๋ฏธํ๊ณ ์ค๋์ ์ง๊ธ๊ป ๊ตฌํํ ๊ธฐ๋ฅ๋ค ์ค ํ๋๋ฅผ ์๊ฐํ๋ ค๊ณ ํ๋ค. ๋ฐ๋ก๋ฐ๋ก... ์ฒดํฌ๋ฐ์ค!!!
๋ฐ๋ก ์ด๋ ๊ฒ ์๊ธด ๊ฒ์ธ๋ฐ... ์์ํ๊ธฐ ์ ์๋ ์ฐ๋ฆฌ๊ฐ ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ธ๋งํผ ์ธ์ ๋จ์ํ ๊ฒ์ด๋ผ ์๊ฐํ๊ณ ๋ ์ด์์ ๊ตฌํ ๋จ๊ณ์์๋ ๋นผ๋๊ณ ๊ตฌํํ๋ ๋ฑ... ๋๋ฌด๋๋ ํฐ ์ฐฉ๊ฐ์ ํ๊ณ ์์๋ค.
(์ฒซ๋ฒ์งธ ์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ์๋ ๋ ์ฒดํฌ๋ฐ์ค๋ ๋ชจ๋ ์ ํ๋์ด์ผ ํ๋ค.)
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๊ฐ... ์๊ฐ๋ณด๋ค ๋ค์ํ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค.
1, 2๋ฒ ๋ฒํผ ์ค ํ๋๋ง ์ ํ๋ ์ํ์์๋ ์ ์ฒด์ ํ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋๋จธ์ง ํ๋๋ ์ ํ๋์ด์ผํ๊ณ , ์ธ ๋ฒํผ์ด ์ ํ๋ ์ํ์์ ํ๋๋ง ํด์ ๋์ด๋ ์ ์ฒด ์ ํ ๋ฒํผ์ด ํด์ ๋์ด์ผํ๋ค๋ ๊ฒ์ด๋ค...!!! ใ
ใทใ
ใท
setState๋ฅผ ํ์ฉํ์ฌ ๋๊ฐ์ state๊ฐ์ ์คฌ๋ค. 1, 2๋ฒ ๋ฒํผ์ ์ํ๊ฐ์ boolean๊ฐ์ผ๋ก ์คฌ๊ณ , ์ธ ๋ฒํผ์ ๋ชจ๋ onClick ์ด๋ฒคํธ๋ฅผ ์ค์ ์ด๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ฒด์ ํ ๋ฒํผ์ ํด๋ฆญํ์๋, ๋๋จธ์ง ๋ ๋ฒํผ์ boolean ๊ฐ์ด ๋ฐ๋๋ ๋ฐฉ์์ ์ทจํ๋๋ ํ๋๋ง ์ ํ๋์์๋ ์ ์ฒด์ ํ๋ฒํผ์ ํด๋ฆญํ๋ฉด 1, 2๋ฒ์ด ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ ํ๋๋ ๊ธฐ์ดํ ๋ชจ์ต์ ๋๊ฒ ๋์๋ค...
๋๋ฒ์งธ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฒซ๋ฒ์งธ๋ณด๋ค ๋ ์์์ ์ธ ๋ฐฉ๋ฒ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ฑ๋์ ์กฐ์ธ์ ๋ฐ๋ผ ์ ์ฒด์ ํ ๋ฒํผ์ ๋ํ state ๊ฐ์ ์ฃผ์ง ์๊ณ , checked ์์ฑ์ ํตํด ์ด๋ฅผ ํด๊ฒฐํ ์ ์์๋ค. ์ด ๊ธฐ๋ฅ์ ํํด state๊ฐ์ ํ๋๋ก ์ถฉ๋ถํด์ก๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น? ์ผ๋จ state๊ฐ์ผ๋ก boolean ๊ฐ์ด ์๋ ๋น๋ฐฐ์ด์ ์ฃผ๊ณ , 1, 2๋ฒ ๋ฒํผ์ด ํด๋ฆญ๋ ๋๋ง๋ค ์ด ๋ฒํผ๋ค์ ์ด๋ฆ ์์ฑ์ด ๋ฐฐ์ด์์ push๋๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐฐ์ด์ ๊ธธ์ด๋ก ์ ์ฒด์ ํ๋ฒํผ์ด ์ ํ๋ ์ง์ ์ฌ๋ถ๋ฅผ ์ ํด์ผํ๋ค.
์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
- ์ ์ฒด์ ํ ๋ฒํผ์ด ํด๋ฆญ๋์ ๋ ์ ์ฒด์ ํ๋ฒํผ, 1, 2๋ฒ ๋ฒํผ์ด ์ ํ/์ ํํด์ ๋์ด์ผํ๋ค.
- ์ ์ฒด์ ํ ๋ ์ํ์์ 1 ๋๋ 2๋ฒ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํด๋ฆญ๋ ๋ฒํผ๊ณผ ํจ๊ป ์ ์ฒด์ ํ ๋ฒํผ๋ ์ ํํด์ ๊ฐ ๋์ด์ผํ๋ค.
- 1 ๋๋ 2๊ฐ ์ ํ๋ ์ํฉ์์ ์ ์ฒด์ ํ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ธ ๋ฒํผ์ด ๋์์ ์ ํ๋์ด์ผํ๋ค.
const SignUp = () => {
const [checkList, setCheckList] = useState([]);
// ์ฒดํฌ๋ฐ์ค ์ ์ฒด์ ํ์ ๋ชจ๋์ ํ ์ฒดํฌ๋ฐ์ค ํ์ฑํ์ํค๊ธฐ
const handleCheck = e => {
e.target.checked
? setCheckList([...checkList, e.target.name])
: setCheckList(checkList.filter(el => el !== e.target.name));
};
// ์ ์ฒด์ฒดํฌ ์ ํ์ ์ ์ฒด ์ ํ or ์ ์ฒดํด์
const checkAll = e => {
e.target.checked ? setCheckList(['terms', 'privacy']) : setCheckList([]);
};
return (
<Label>
<div>
<input
type="checkbox"
name="checkAll"
onChange={checkAll}
checked={checkList.length === 2 ? true : false}
/>
์๋ ๋ด์ฉ์ ๋ชจ๋ ๋์ํฉ๋๋ค.
</div>
</Label>
<Label>
<div>
<input
type="checkbox"
name="terms"
onChange={handleCheck}
checked={checkList.includes('terms') ? true : false}
/>
[ํ์] ์ด์ฉ์ฝ๊ด ๋์
</div>
<div className="showMore">์์ธ๋ณด๊ธฐ</div>
</Label>
<Label>
<div>
<input
type="checkbox"
name="privacy"
onChange={handleCheck}
checked={checkList.includes('privacy') ? true : false}
/>
[ํ์] ๊ฐ์ธ์ ๋ณด ์์ง ์ด์ฉ ๋์
</div>
<div className="showMore">์์ธ๋ณด๊ธฐ</div>
</Label>
)
}
์ฌ๊ธฐ์ ํฌ์ธํธ๋ ์คํ๋ ๋์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ด์ ๋ฐฐ์ด์ ๋ถ๋ฌ์๋ค๋ ๊ฒ๊ณผ filter ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฒดํฌ๊ฐ ํด์ ๋์์ ๋ ๋ฐฐ์ด์์ ํด๋น ๋ฒํผ์ ์ด๋ฆ์ ๋ฐฐ์ด์์ ์ ์ธ์ํจ๋ค๋ ์ ์ด๋ค.
๋ํ ์ ์ฒด์ ํ๋ฒํผ์ ์ ํ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ์ง๊ธฐ ์ํด ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋์ ํ๋ค.
๋ง์ ํด๊ฒฐํ๊ณ ๋๋ ๋ญ๊ฐ ์์์ญ์ญํ๊ธฐ๋ ํ๊ณ , ๋ณ๊ฑฐ ์๋ ๊ธฐ๋ฅ์ ๋๋ฌด ์ค๋๋์ ๋งค๋ฌ๋ ค ์ฝ์ง์ ํ๋ ์ถ๊ธฐ๋ ํ๋ค. ๊ทธ๋ ์ง๋ง ์ด์ ์ ๋น๊ต์ ์ฌ์ฉํด๋ณธ ๋น๋๊ฐ ์ ์ ์คํ๋ ๋ ๋ฌธ๋ฒ์ด๋ filter๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ด์ ์ข์๋ค.
ํํธ์ผ๋ก๋ ์ด๋ณด๋ค ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ง์ด ์์๊ฑฐ๋ผ๋ ์๊ฐ๋ ๋ ๋ค. ๋ฒํผ์ด ๋๊ฐ๋ณด๋ค ๋ ๋ง์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ ๊ทผํด์ผํ ์ง ๋ง๋งํ๊ธฐ๋ ํ๋ค. ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ๋ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์ถ๋ค.