React Study

React - useRef ํŠน์ •๋” ์ง€์ •ํ•˜๊ธฐ

eddie0329 2020. 12. 2. 22:36
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ชฉ์ฐจ

  • Introduction
  • useRef
  • Conclusion

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ์‹œ๊ฐ„์—์„œ๋Š” useRef๋ฅผ ๋ณ€์ˆ˜๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ document.querySelector์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” react useRef๋ฅผ ๋งŒ๋‚˜๋ณผ๊ฒŒ์š”.

๐Ÿ“Œ useRef

import React, { useState, useRef } from "react";

function InputSample() {
  const [inputs, setInputs] = useState({
    name: "",
    nickname: "",
  });

  const nameInput = useRef();
  const { name, nickname } = inputs;

  const onChange = (e) => {
    const { name, value } = e.target;

    // ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์—…ํ…Œ์ดํŠธ ํ• ๋•Œ๋Š” ๋ถˆ๋ณ€์„ฑ์„ ์ง€์ผœ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    setInputs({
      ...inputs,
      [name]: value,
    });
  };

  const initText = () => {
    setInputs({
      name: "",
      nickname: "",
    });
    // ์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์š”.
    nameInput.current.focus();
  };

  return (
    <div>
      <input
        name="name"
        placeholder="name"
        onChange={onChange}
        value={name}
        // โญ๏ธ์—ฌ๊ธฐ์—์„œ ์ง€์ •์„ ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        ref={nameInput}
      />
      <input
        name="nickname"
        placeholder="nickname"
        onChange={onChange}
        value={nickname}
      />
      <button onClick={initText}>init</button>
      <div>
        <b>value: </b>
        {name} ({nickname})
      </div>
    </div>
  );
}

export default InputSample;

๐Ÿ“Œ Conclusion

vue์—๋„ ๋™์ผํ•œ ref๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์ง€์š”. ํ•˜์ง€๋งŒ ์ด๋ฒˆ๋งŒํผ์€ react๊ฐ€ ์ข€๋” ๊ฐ€๋…์„ฑ์ด ๋†’๋‹ค๊ณ  ํ•ด์•ผํ• ๊นŒ์š”. ์ข€๋” ํŽธํ•œ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. vue ๊ฒฝ์šฐ this.$refs๋กœ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ ์ด๊ฒŒ ์€๊ทผํžˆ ๊ท€์ฐฎ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋”๋ผ๊ตฌ์š”.ํ•˜์ง€๋งŒ ์ง์ ‘ ๋ณ€์ˆ˜์— ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข€๋” ํŽธํ•œ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.(๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ๋„์šฉ) ๊ทธ๋Ÿผ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋‚˜์šฉ~!

๋ฐ˜์‘ํ˜•