๐Ÿ› ๏ธ Tool/React

[React] input tag์˜ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ focus ์ด๋™ ์˜ˆ์ œ ๊ด€๋ จ ์˜๋ฌธ ์‚ฌํ•ญ ๐Ÿค”(#useEffect, #onChange)

seungineer = seungwoo + engineer 2024. 6. 6. 02:14

์–ด๋–ค ์›น์‚ฌ์ดํŠธ์—์„œ form์„ ์ž…๋ ฅํ•  ๋•Œ ์ž…๋ ฅ์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋นˆ์นธ์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ๊ตฌํ˜„๋œ ์›น์‚ฌ์ดํŠธ๊ฐ€ ๋งŽ๋‹ค. id์™€ pw๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ id๋ฅผ 10์ž ์ด์ƒ ์ž…๋ ฅํ•˜๋ฉด pw ์ž…๋ ฅ ์นธ์œผ๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘ React์˜ ๋ฐฐ์น˜ ์—…๋ฐ์ดํŠธ ํŠน์„ฑ์„ ์ž˜ ์‚ด๋ ค์„œ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.


๊ตฌํ˜„

์œ„ gif ์ฒ˜๋Ÿผ 10๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๊ณง๋ฐ”๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ์นธ์œผ๋กœ focus๊ฐ€ ์ด๋™ํ•ด์•ผ ํ•จ

 

App.js์˜ App() ์ปดํฌ๋„ŒํŠธ์—์„œ return ํ•˜๋Š” input tag๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

function App() {
  ...
  useEffect(() => {
    if (id.length >= 10) {
      pwRef.current.focus();
    }
  }, [id]);

  return (
    <>
      <div>
        ์•„์ด๋”” : 
        <input
          type="text"
          ref={idRef}
          value={id}
          onChange={onIdChangeHandler}
        />
      </div>
      <div>
        ๋น„๋ฐ€๋ฒˆํ˜ธ :  <input type="password" ref={pwRef} />
      </div>
    </>
  );
}

id input tag์—์„œ onChange ์†์„ฑ์œผ๋กœ onIdChangeHandler๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ ,  input tag์— ref ์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด ref๋กœ focusํ•  tag๋ฅผ ์ง€์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

function App() {
  const idRef = useRef("");
  const pwRef = useRef("");

  const [id, setId] = useState("");

  const onIdChangeHandler = (event) => {
    setId(event.target.value);
  };

  useEffect(() => {
    idRef.current.focus();
  }, []);

  useEffect(() => {
    if (id.length >= 10) {
      pwRef.current.focus();
    }
  }, [id]);

  return (
    <>
      <div>
        ์•„์ด๋”” : 
  ...
 }

onIdChangeHandler๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, setId(event.target.value)๋กœ state ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋•Œ state ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚œ๋‹ค. ๋ฆฌ๋ Œ๋”๋ง ์‹œ useEffect()๊ฐ€ ์‹คํ–‰๋˜๊ณ , ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•  ๊ฒฝ์šฐ focus ์ด๋™์ด ์ผ์–ด๋‚œ๋‹ค(pwRef.current.focus()).


๐Ÿค”

ํ˜„์žฌ ์ฝ”๋“œ์—์„œ๋Š” useEffect() ๋‚ด๋ถ€์—์„œ id์˜ length๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ์กฐ๊ฑด ๊ฒ€์‚ฌ๋ฅผ useEffect์—์„œ ํ•˜๋Š” ์ด์œ ๋Š” React์˜ ๋ฐฐ์น˜ ์—…๋ฐ์ดํŠธ์— ์˜ํ•œ ํšจ์œจ์„ฑ์„ ์ œ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋ผ๊ณ  ํ•œ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์—” onIdChangeHandler() ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ setId()๋กœ state๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์กฐ๊ฑด ๊ฒ€์‚ฌ๋ฅผ ํ•ด์•ผ, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ๊ต์žฌ์—์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.


๊ด€๋ จํ•˜์—ฌ ๋‚ด์ผ ์ข€ ๋” ๋™๊ธฐ๋“ค๊ณผ ์–˜๊ธธ ๋‚˜๋ˆ  ๋ด์•ผ๊ฒ ๋‹ค.