์์ฑ๋ณธ
๋ฉ์ธ ๊ธฐ๋ฅ : ๋ฉค๋ฒ๋ฅผ ์ ํํ๋ฉด ์๊ฐํ๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๋ฉค๋ฒ ์ ํ, ์ ํํ ๋ฉค๋ฒ ํ์, ํ ๊ธ์ฐฝ, ๊ฒฝ๊ณ ๋ฌธ๊ตฌ
์๊ฐ๋ณด๋ค ๋ฐ์์ด ๋งค์ฐ๋งค์ฐ๋งค์ฐ ํญ๋ฐ์ ์ด๋ค.
์์ง ๋ถ์กฑํ๊ฒ ๋ง์๋ฐ ์นญ์ฐฌ ํด์ฃผ์ ์ ๋งค์ฐ ๊ฐ์ฌ.. ๋ฉ์๋ค๊ณ ํด์ฃผ์ ์.. ๋งค์ฐ๊ฐ์ฌ...
์๋ฌด๋๋ ๋ด๊ฐ ์ง์ ์ฌ์ฉ์ ์ ์ฅ์์ ๋ง๋ค๋ค ๋ณด๋
๋ถํธํ์ ์ ์ต๋ํ ์์ ๊ธฐ์ํด ๋ง์ด ์๊ฐํ๊ณ ๋ ธ๋ ฅํ๊ฒ ๊ฐ๋ค.
๋ง๋ค๋ฉด์ ๊ณ ๋ คํ ๊ธฐ๋ฅ์ ์ด๋ ๋ค.
1. ๋ฉค๋ฒ๋ฅผ ์ฌ๋ฌ๋ช ์ ํํ ์ ์์ ๊ฒ.
2. ๋๋ช ์ด์์ ๋ฉค๋ฒ๋ฅผ ๋ฐ๋์ ์ ํํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋์ธ ๊ฒ
3. ๋ณด๊ธฐ ํธํ๊ฒ ์ ํํ ๋ฉค๋ฒ๋ฅผ ํ๋ฒ์ ๋ณด์ฌ์ฃผ๋ div๋ฅผ ๋ง๋ค ๊ฒ
4. ์ ํ ์๋ฃ๋ฅผ ๋๋ฅด๋ฉด ์ ๋ชฉ์ ์ ๋ ฅํ๋ ์นธ์ ๋ง๋ค๊ฒ.
-> ๋ชจ๋ฌ์ฐฝ์ผ๋ก ์ ์ํจ
5. ๊ฐ์ง์ฉ ์ ๋๋ฉ์ด์
์ ๋ฃ์๊ฒ
01. ๋ฉค๋ฒ ์ ํ ์ฝ๋
์ฌ๋ฌ๋ช ์ ์ ํํด์ผํ๋ฏ๋ก checkbox๋ฅผ ํตํด ๋ง๋ค์๋ค.
{names.map((name, index) => (
<div className="nameli" key={index} onClick={() => document.getElementById(`name${index}`).click()}>
<input type="checkbox"
id={`name${index}`}
onChange={() => checkMember(name)}/>
<label htmlFor={`name${index}`}>{name}</label>
</div>
))}
names๋ ์ด๋ฆ๋ค์ด ๋ด๊ธด list์ด๋ค. ์ด list์ ์์๋ค์ ์ถ๋ ฅํด์ ์ฒดํฌ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
checkbox์ div๋ฅผ ์ฐ๊ฒฐํด์ div๋ฅผ ๋๋ฌ๋ chcek ๋ฐ์ค๊ฐ ์ฒดํฌ๋๋๋ก ์ค์ ํ์๋ค.
label htmlFor ์ฒ๋ผ id๋ฅผ ์ผ์น์ํค๋ฉด ์ฐ๊ฒฐ์ด ๋๋ค.
โ๏ธonChange
์ ๋ ฅ ํ๋์ ๊ฐ์ ๋ณ๊ฒฝํ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ์ด๋ค.
์ฒดํฌ๋ ์ด๋ฆ๋ค์ ๊ฐ์ ๋ชจ์์ ํ๋ฉด ์๋จ์ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์
์ฒดํฌํ์ ๋ checkMember ํจ์๋ฅผ ํตํด์ ์ด๋ค์ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ ์ ์๊ฒ ํ๋ ค๊ณ ํ๋ค.
const [selectNames, setSelectNames] = useState([]);
โ๏ธuseState
const [state, setState] = useState(์ด๊ธฐ๊ฐ);
- state : ์ํ
- setState : ์ํ ์ ๋ฐ์ดํธ ํจ์
useState๋ก ์ ํ๋ ์ด๋ฆ์ ๋ด์ list๋ฅผ ๋ง๋ ๋ค. ์๋จ์ ์ด list์ ๊ฐ์ ๋ณด์ฌ์ฃผ๋๊ฑฐ๋ค.
const checkMember = (name) => {
setSelectNames((prev) =>
//์ด๋ฆ ํฌํจ๋์ด์๋์ง ํ์ธ
prev.includes(name)
//์ด๋ฏธ ์๋๋ฐ ๋ ๋๋ ๋ค? ๊ทธ๋ฌ๋ฉด ์ ์ญ์ ํ ๋ ํ๊ณ ๋๋ฅธ๊ฑฐ๋ผ ํ๋จํ์ฃ .
//filter : ๋ง์กฑํ๋ ์์๋ฅผ ๋ชจ์ ๋ฐฐ์ด๋ก ๋ฐํ
//์ ๋ค๋น-์กฐ์ค๋ฏผ ๋ฌ๋ผ - true
//์ ๋ค๋น-์ ๋ค๋น ๊ฐ์ - false -> ์ ๊ฑฐ
? prev.filter((e) => e !== name)
//์์ด -> name์ ์ถ๊ฐํด์ค๋ค.
: [...prev, name]
);
setWarning(false);
};
์ด๊ฒ ์ด๋ฒ์ ํต์ฌ ์ฝ๋์ด๋ค. ์ด๋ฆ์ ์ ํํ๊ณ ์ํ๊ณ !๋ฅผ ๊ฒฐ์ ํ๋...
name์ ์ฐ๋ฆฌ๊ฐ ์ ํํ ์ด๋ฆ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์ ํํ ์ด๋ฆ(name)์ ์ธ์๋ก ๋ฐ๋๋ค.
setState๋ก ์ ํ๋ ์ด๋ฆ์ ๊ด๋ฆฌํ๋ค.
prev.includes(name) ๋ก ์ด์ state ๊ฐ์ธ prev์ ์ ํ๋ ์ด๋ฆ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฏธ prev์ ์ด๋ฆ์ด ์๋๋ฐ ๋ ์ธ์๋ฅผ ์ ๋ฌ ๋ฐ์๋ค? == ๋ ๋๋ฅธ๊ฑฐ๋ค
== ์ญ์ ํ๋ ค๊ณ ๋๋ฅธ๊ฑฐ๋ค!
์ด๊ธฐ ๋๋ฌธ์, ์ด ๊ฒน์น๋ ๊ฐ์ ์ญ์ ํด์ฃผ์ด์ผํ๋ค. right?
โ๏ธfilter
๋ง ๊ทธ๋๋ก ํํฐ๋ง. ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
true๋ฉด ์ ์ง, false๋ฉด ์ ๊ฑฐ
prev.filter((e) => e !== name)
prev์ ์์์ธ e์ ์ ํํ ์ด๋ฆ name์ด ๋ค๋ฅผ ๊ฒฝ์ฐ = true์ด๊ณ , ๊ฐ์ ๊ฒฝ์ฐ๋ false๋ก ์ ๊ฑฐ๊ฐ ๋๋ค.
๋ญ๋ง์ด๋?
prev์ [์ ๋ค๋น, ์กฐ์ค๋ฏผ, ๊น๋ณ๋ฌด]๊ฐ ์๋ค๊ณ ํ์.
name์ด '์ ๋ค๋น'์ผ ๋,
e(์กฐ์ค๋ฏผ) - name(์ ๋ค๋น)์ด ๋ค๋ฅด๋ฉด ๋ ๋
e(์ ๋ค๋น) - name(์ ๋ค๋น)์ด ๊ฐ์ผ๋ฉด ์ง์ด๋ค.
prev์ ์ด๋ฆ์ด ์์ผ๋ฉด [...prev, name] ์ด๋ ๊ฒ ๊ธฐ์กด ๋ฐฐ์ด์ name์ ์ถ๊ฐํ๋ฉด ๋๋ค.
<div className='Parti'>
{selectNames.map((name, index) => (
<span id='view_name' key={index}>{name}</span> ))}
</div>
์ด๋ ๊ฒ ์์ฑ๋ list๋ฅผ map์ผ๋ก ํตํด ์ถ๋ ฅํ๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ์ ํ๋ ์ด๋ฆ์ด ์๋จ์ ํ์๋๋ ๋ถ๋ถ์ด๋ค.
๋ฐ๋ก ๋๋ ๋์ค๋๊ฒ ๋ณ๋ก๋ผ์ ์ ๋๋ฉ์ด์ ์ ๋ฐ๋ก ๊ตฌํํ์๋ค.
(๋ชจ๋ ์ ๋๋ฉ์ด์ ๊ตฌํ์ ๋ค์ ํฌ์คํ ์ ์ ๋๋ก ํ๊ฒ ๋ค.)
02. ๊ฒฝ๊ณ ๋ฌธ๊ตฌ ์ฝ๋
๋ฉค๋ฒ๋ค์ ์ ํํ๊ณ ์ ํ ์๋ฃ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ ๊ธ์ฐฝ์ด ๋ฌ๋ค.
ํ์ง๋ง ํฉ์ฃผ๋ฅผ ํ๊ธฐ ์ํด์๋ ์ต์ 2๋ช ์ ์ฌ๋์ด ์์ด์ผ ํ๋ค. (์ฌ์ค ์ด๊ฒ๋ ์ ์ง๋ง)
๊ทธ๋์ ๋๋ช ์ด์์ ๋ฉค๋ฒ๋ฅผ ์ ํํ์ง ์์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ๋์์ฃผ๊ธฐ๋ก ํ์๋ค.
๊ฝค ๊ฐ๋จํ๋ค.
๋๋ช ์ด์์ธ๊ฒ ๋ง์กฑ๋๋ฉด ๊ฒฝ๊ณ ์ฐฝ false(๊ฒฝ๊ณ ์ฐฝ ์๋จ๋๊น F), ์๋๋ฉด true (๊ฒฝ๊ณ ์ฐฝ ๋จ๋๊น T)
const nextButFunc = () => {
if (selectNames.length < 2) {
setShowWarning(true);
} else {
setShowWarning(false);
setOpen(true); //๋ชจ๋ฌ์ฐฝ์ด๊ธฐ
}
};
์๊น ์๋จ์ ์ ํํ ์ด๋ฆ๋ค์ ๋์ฐ๊ธฐ ์ํด ๋ง๋ค์๋
selectName์ ์ด์ฉํ๋ค.
์ด ๋ฆฌ์คํธ ๊ธธ์ด๊ฐ 2๋ฅผ ๋์ง๋ชปํ๋ฉด ๊ฒฝ๊ณ ์ฐฝ ๋์ฐ๊ธฐ.
03. ๋ชจ๋ฌ์ฐฝ ๋ง๋ค๊ธฐ
๋ชจ๋ฌ์ฐฝ์ ์ ์ ๋ฆฌํด์ฃผ์ ๋ธ๋ก๊ฑฐ๊ฐ ๊ณ์ ์ ๋งํฌ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ๋ค.
์ฐธ๊ณ ํด์ ๋ง๋ค์๋ค. ๊ฐ์ฌํฉ๋๋ค
๐์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ๐
https://jisilver-k.tistory.com/143
ํ์ฌ๋ ๋์๋ฆฌ ์น๊ตฌ๋ค์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด ํ ์คํธํด๋ณด์๊ณ ,
(๋ฐ์ดํฐ ๊น๋ํ๊ฒ ์ ๋ฆฌํด์ค ์คํธ์ผ ๊ณ ๋ง์๐)
์ฝ๋๋ฅผ ์์ ํด๊ฐ๋ฉฐ ์๋ฒ์ ์ฐ๊ฒฐํ ์ค๋น๋ฅผ ํ๊ณ ์๋ค.
์๊ฐํ ์ถ๊ฐํ๊ธฐ ์ฝ๋๋ฅผ ๋ง๋ค์ด์ผํ๋๋ฐ ์ด๊ฑด ์ด๋ป๊ฒ ํด์ผ ํธํ ์ง ์๊ฐ์ ๋ ํด๋ด์ผ๊ฒ ๋ค.
๋ค์ ํฌ์คํ ์ ์ ๋๋ฉ์ด์ ์ด๋ค.
๋!
'๐ ํฉ์ฃผ์๊ฐํ ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํฉ์ฃผ์๊ฐํ ํ๋ก์ ํธ] 01# ๊ธฐํ๊ณผ ๊ตฌ์, ์๊ฐํ ๋ง๋ค๊ธฐ (2) | 2024.09.11 |
---|