React | useState ์ดํ•ดํ•˜๊ธฐ ๐Ÿคฏ๐Ÿ˜ญ

์•™๋‘ยท2022๋…„ 12์›” 23์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
1/20

๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” ์‹œํ‚ค๊ธฐ ^^

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 ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ์„ค๋ช… ๋ฐ ์ •๋ฆฌ ๋ ใ… ใ… 

profile
์“ธ๋ชจ์žˆ๋Š” ๊ธฐ์ˆ ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€