리액트

[React]useRef

민ズl 2024. 11. 4. 11:48

useRef란🤔

  • useState처럼 값을 저장하는 hook
  • 🌟리랜더링과 상관없음 🌟, DOM 요소를 다루기 위한 용도로 주로 사용
  • .current하면 현재 useRef의 값에 접근

useRef vs useState

import "./App.css";
import { useRef, useState } from "react";

function App() {
  const [count, setCount] = useState(0);
  const countRef = useRef(0);

  const plusStateCountButtonHandler = () => {
    setCount(count + 1);
  };

  const plusRefCountButtonHandler = () => {
    countRef.current++;
  };

  return (
    <>
      <div>
        state 영역입니다. {count} <br />
        <button onClick={plusStateCountButtonHandler}>state 증가</button> //클릭할때마다 증가됨
      </div>
      <div>
        ref 영역입니다. {countRef.current} <br />
        <button onClick={plusRefCountButtonHandler}>ref 증가</button> // 클릭할때마다 동일한 0
      </div>
    </>
  );
}

export default App;

🌟 state는 변경되면 렌더링이 되고, ref는 변경되면 렌더링이 안됨!

 

let vs useRef

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

const App = () => {
   const [renderer, setRenderer] = useSate(0);
   const count Ref = useRef(0);
   let countVar = 0;
   
   const doRendering = () => {
      setRenderer(renderer + 1);
   };
   
   const increaseRef = () => {
       countRef.current = countRef.current + 1;
   }
   
   const increaseVar = () => {
      countVar = countVar + 1;
   }
   
   return (
      <div>
         <p>Ref : {countRef.current} </p>
         <p>Var : {countVar} </p>
         <button onClick={doRendering}>렌더!</button>
         <button onClick={increaseRef}>Ref 올려</button>
         <button onClick={increaseVar}>Var 올려</button>
      </div>
   )
}
  • 화면이 렌더링 될때마다 let은 초기화가 됨.
  • useRef는 값이 저장되어 있어서 값 유지

DOM 접근 예시

id 폼에 포커스시키기

import { useEffect, useRef } from "react";
import "./App.css";

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

  // 렌더링이 될 때
  useEffect(() => {
    idRef.current.focus();
  }, []);

  return (
    <>
      <div>
        아이디 : <input type="text" ref={idRef} />
      </div>
      <div>
        비밀번호 : <input type="password" />
      </div>
    </>
  );
}

export default App;

'리액트' 카테고리의 다른 글

[React]memo(React.memo), useCallback,useMemo  (0) 2024.11.05
[React]useContext  (0) 2024.11.04
[React]useEffect  (1) 2024.11.04
[React]useState  (0) 2024.11.04
[React]리액트 랜더링  (0) 2024.10.29