function OhjLogin(props) {
const navigate = useNavigate();
const [idState, setIdState] = useState('');
const [pwState, setPwState] = useState('');
const [active, setActive] = useState(false);
// ๋ก๊ธด๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฉ์ธํ์ด์ง๋ก ๋์ด๊ฐ๋ ํจ์
const goToMain = () => {
if (activeLogin) {
navigate('/OhjMain');
} else {
alert('์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋๋ก ์
๋ ฅํด์ฃผ์ธ์.');
}
};
const activeLogin = () => {
return idState.includes('@') && pwState.length >= 5
? setActive(true)
: setActive(false);
};
function saveUserId(e) {
setIdState(e.target.value);
activeLogin();
}
function saveUserPw(e) {
setPwState(e.target.value);
activeLogin();
}
return (
<div>
<section id="login_page">
<div id="login_logo">
<Link to="/OhjMain">
<span>Westagram</span>
</Link>
</div>
<div id="id_pw_window">
<input
name="identy"
className="id"
type="text"
value={idState}
placeholder="์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
onChange={saveUserId}
/>
<input
name="password"
className="pw"
type="password"
value={pwState}
placeholder="๋น๋ฐ๋ฒํธ"
onChange={saveUserPw}
/>
<button
type="button"
className="login_btn"
onClick={goToMain}
disabled={active ? false : true}
>
๋ก๊ทธ์ธ
</button>
</div>
<a className="forget_pw" href="#">
๋น๋ฐ๋ฒํธ๋ฅผ ์์ผ์
จ๋์?
</a>
</section>
</div>
);
}
๋ฆฌ์ก๋ ๋๋ฌด ์ด๋ ต๋ค ์ผ์์์์์์ใ
ใ
์์์
์ ํ๋ํ๋ ๋ฏ์ด์ ์ ๋ฆฌํด๋ณด์
๋ด ํ์ผ๋ก ์ค๋ช
ํ ์ ์๊ฒ๋๋ค๋ ๊ฐ์ฌ
๊ทธ๋ฌ๋ ํผ์ ์ฝ๋๋ ๋ชป์งค๊ฒ๊ฐ๋ค ์์ง
๋งํฌ ์ ์ปค๋ฒ๊ทธ ๋ฐ๋ค .
============================================================
const navigate = useNavigate();
const [idState, setIdState] = useState('');
const [pwState, setPwState] = useState('');
idState ๋ id Input value ๊ฐ์ ๊ฐ๋ฆฌํจ๋ค.
๊ทธ๋ฌ๋ ค๋ฉด id Inputํ๊ทธ์ value ๊ฐ์ idState ๋ก ์ง์ ํด์ค์ผ,
idState ๊ฐ์ด id Input value ๋ฅผ ๊ฐ๋ฆฌํค๋์ง ์๋ค. (์ด๊ฒ์กฐ์ฐจ ๋ชฐ๋ผ์ ์ด๋ ค์ ์๐)
idState์ (์ด๊ธฐ๊ฐ์ '' <- ๋น๊ฐ์ด๋ค = id Input ์ฐฝ์ ๋ญ ์น๊ธฐ์ ์ ์๋ฌด๊ฒ๋ ์์ผ๋๊น)
setIdState ๋ idState ๊ฐ์ ์ค์๊ฐ ๋ณ๊ฒฝํด์ค๋ค (useState์ ์๋ฆฌ..๐ค)
= setIdState ๊ฐ ๋ฐ๋ ๊ฐ์ ์กฑ์กฑ idState๋ก ๋ค์ด๊ฐ๋ค
(pwState๋ ๋์ผํ ๋ก์ง.)
setIdState ๊ฐ์๋ ๊ณ์ ๋ณ๊ฒฝ๋ id Input value(e.target.value)๊ฐ ๋ค์ด๊ฐ๋ค. ๐๐ป
(Input ํ๊ทธ์ onChange ์ด๋ฒคํธ๋ก saveUserId ํจ์๋ฅผ ๋ฃ์ด๋จ์)
function saveUserId(e) {
setIdState(e.target.value);
activeLogin();
}
*onChange ์ด๋ฒคํธ ๊ธฐ๋ฅ: ํด๋น ํ๊ฒ ํ๊ทธ์์ ์ผ์ด๋๋ ๋ชจ๋ ์ผ๋ค์ ๊ฐ์ง (= ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฐ์)]
const [active, setActive] = useState(false);
active์ ์ด๊ธฐ๊ฐ์ false.
์ด useState(setActive) ๋ ๋ก๊ทธ์ธ๋ฒํผ์ disabled ์ ์ฐ์ผ ๊ฒ์ด๋ค.
const activeLogin = () => {
return idState.includes('@') && pwState.length >= 5
? setActive(true)
: setActive(false);
};
activeLogin ํจ์๋ฅผ ๋ง๋ค์ด, ์ค์๊ฐ ๋ค์ด์ค๋ idState, pwState ์ ์กฐ๊ฑด๋ฌธ์ ๊ฑธ์ด์ฃผ๊ณ setActive ์ ๊ฐ์ ์ ํด์ค๋ค (์ผํญ์ฐ์ฐ์ ์ฌ์ฉ)
function saveUserId(e) {
setIdState(e.target.value);
activeLogin();
}
๊ทธ๋์ ํ๊ทธ์ onChange๋ก ๊ฑธ์ด์ค saveUserId ํจ์๋ฅผ ์ฌ์ฉํ์ฌ,
setIdState๋ฅผ ํตํด ๋ค์ด์ค๋ idState ๊ฐ์ ๋ฐ๊ณ ,
activeLogin ํจ์๋ฅผ ์คํํ์ฌ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋ค.
=> ์ธํํ๊ทธ์ ์ํด ๋ก๊ทธ์ธ๋ฒํผ ํ์ฑํ๊ฐ ์ผ์ด๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ!!!
<button
type="button"
className="login_btn"
onClick={goToMain}
disabled={active ? false : true}
>
๋ก๊ทธ์ธ
</button>
๊ทธ๋์ setActive ๋ฅผ ํตํด active ๋ก ๋ค์ด์ค๋ ๊ฐ์ด
true ๋ฉด false ๋ก, false ๋ฉด true ๋ก !!!
๋ฒํผ์ disabled ์์ฑ์ ์ค์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ... useState ๋ฅผ ์ฌ์ฉํ ์ฝ๋์ค๋ช ๋ฐ ์ ๋ฆฌ ๋ ใ ใ