useRef()
1. κ°μ
μλ°μ€ν¬λ¦½νΈμ μ¬μ©ν λ νΉμ DOMμ μ κ·ΌνκΈ° μν΄μλ getElementById, querySelectorμ κ°μ DOM Selector ν¨μλ₯Ό μ¬μ©νλ€. κ·Έλ λ€λ©΄ 리μ‘νΈμμλ μ΄λ€ λ°©λ²μΌλ‘ DOMμ μ κ·Όν μ μμκΉ? λ°λ‘ useRef()ν
μ μ΄μ©νλ©΄ λλ€.
2. useRef() λ‘ νΉμ DOM μ ννκΈ°
λ¨Όμ useRef()λ₯Ό μ¬μ©νμ¬ νΉμ DOMμ μ ννμ. μ°μ μ μΌλ‘ ν μΌμ useRef()λ₯Ό 리μ‘νΈμμ μν¬νΈν ν Ref κ°μ²΄λ₯Ό λ§λλ μΌμ΄λ€. κ·Έ ν Ref κ°μ²΄λ₯Ό μ°λ¦¬κ° μ ννκ³ μΆμ DOMμ refκ°μΌλ‘ μ€μ ν΄μΌ νλ€.
μλμ μμλ₯Ό ν¨κ» 보μ.
import React, { useRef } from "react";
const Test = () => {
const nameRef = useRef();
const emailRef = useRef();
console.log(nameRef, emailRef);
return (
<div>
<div>
<input ref={nameRef} type="text" placeholder="μ΄λ¦μ μ
λ ₯νμΈμ." />
<button>name focus</button>
</div>
<div>
<input ref={emailRef} type="text" placeholder="μ΄λ©μΌμ μ
λ ₯νμΈμ." />
<button>email focus</button>
</div>
</div>
);
};
export default Test;useRef()λ₯Ό ν΅ν΄ λκ°μ Ref κ°μ²΄λ₯Ό λ§λ€μλ€. νλλ nameRefμ΄κ³ λ€λ₯Έ νλλ emailRefμ΄λ€. κ·Έ ν κ°κ° inputμ ref κ°μΌλ‘ μ€μ νλ€. μ½μλ‘ μ΄λ€ λ΄μ©μ΄ μ°νλμ§ λ³΄μ.


Ref κ°μ²΄μ .current κ°μ μ°λ¦¬κ° μνλ DOMλ₯Ό κ°λ¦¬ν€κ² λλ€.
μ’ λ λμκ° inputμμ μμΉν λ²νΌμ λλ₯Ό λ κ°κ°μ inputμ focusλ₯Ό μ£Όλλ‘ ν΄λ³΄μ. κ·Έλ λ€λ©΄ μλμ μΆκ°μ μΈ μ½λ(λ²νΌμ onClick) μμ±μ΄ νμνλ€.
.current.focus()μ ν΅ν΄ inputμ focusλ₯Ό μ€ μ μλ€. ν΄λ¦μ ν΅ν΄ νμΈν΄ 보면 μλμ μ¬μ§κ³Ό κ°λ€. μλλ email focus λ²νΌμ λλ μ λμ λͺ¨μ΅μ΄λ€.

3. useRef() λ‘ λ³μ κ΄λ¦¬νκΈ°
useRef()λ DOMλ₯Ό μ ννλ μ©λ μΈμλ, μ»΄ν¬λνΈ μμμ μ‘°ν λ° μμ ν μ μλ λ³μλ₯Ό κ΄λ¦¬ν μ μλ€.
리μ‘νΈ μ»΄ν¬λνΈλ useState()λ‘ μ μΈλ λ³μ(λ°μ΄ν°)κ° λ³ν λ λ§λ€ 리λλλ§μ νκ² λλ©΄μ μ»΄ν¬λνΈ λ΄λΆ λ³μλ€μ΄ μ΄κΈ°νλλ€. μλμ μμ μ½λλ₯Ό 보면μ μ΄λ»κ² λμνλμ§ μ΄ν΄ν΄λ³΄μ.

λ³μ numberλ varλ₯Ό ν΅ν΄ μ μΈμ΄ λμκ³ μ무리 +λ²νΌμ λλ₯Έλ€ ν΄λ νλ©΄μ΄ λ€μ λλλ§μ΄ λμ§λ μλλ€. νμ§λ§ μ½μμ μ°μμ λ μ½λ λ΄λΆμμλ μ«μκ° νλμ© μ€λ₯΄λ κ²μ νμΈν μ μλ€. κ·Έλ λ€λ©΄ κ·Έ μλμ λλλ§ λ²νΌμ λλ μ λ μ΄λ¨κΉ? numberμ κ°μ΄ μ΄κΈ°ν λμ΄ λ€μ 0μ΄ λλ€.
μ΄λ²μλ varκ° μλ useRef()λ₯Ό ν΅ν΄ λ³μλ₯Ό κ΄λ¦¬ν΄λ³΄μ. μλμ κ°μ΄ μ½λλ₯Ό μμ νμ.
μμ κ°μ΄ varλ‘ μ μΈν numberλ₯Ό useRef()λ‘ λ°κΎΈμκ³ useRef()μ ()μμ νλΌλ―Έν°λ‘ 0μ λ£μ΄ μ΄κΈ°κ°μ μ€μ νμλ€. κ·Έλ¦¬κ³ number.currentλ₯Ό ν΅ν΄ κ°μ μ‘°ννλ€. λν +λ²νΌμ λλ₯Ό λ λ§λ€ number.currentμ κ°μ μμ νμ¬ 1μ© κ°μ μ¦κ°μν€κ² νμλ€. κ·Έ κ²°κ³Όλ μλμ μ¬μ§κ³Ό κ°λ€.

μ΄μ varλ‘ μ μΈνμ λ μ²λΌ +λ²νΌμ λλ₯Ό λ numberκ°μ΄ 1μ© μ¦κ°νμ§λ§ μ»΄ν¬λνΈκ° 리λλλ§ λμμ λ μ΄μ κ³Ό λ€λ₯΄κ² numberκ°μ΄ 0μΌλ‘ μ΄κΈ°νκ° λμ§ μλ κ²μ νμΈν μ μλ€.
μ¬κΈ°μ μ μ μλ νλμ μ¬μ€μ useRef()λ‘ μ μΈλ λ³μμ κ°μ΄ λ³νλλΌκ³ μ»΄ν¬λνΈκ° 리λλλ§λμ§ μλλ€λ κ²μ΄λ€. μ¦, μμ μ¬μ§μμλ Number: 8μ΄λΌκ³ λμ΄μμ§λ§ μ΄λ λλλ§ λ²νΌμΌλ‘ μΈν΄ μ»΄ν¬λνΈκ° 리λλλ§μ΄ λμκΈ° λλ¬Έμ΄κ³ κ·Έ μ κΉμ§λ μμ λ numberμ κ°μ νλ©΄μμλ λ³Ό μ μλ€. μλμ μ¬μ§μ μ°Έκ³ νλΌ!

4. Conclusion
useRef()λ₯Ό ν΅ν΄ DOMμ μ§μ μ κ·Όνκ³ μμ νλ κ³Όμ μ νΉνinputλ₯Ό λ€λ£° λ λͺ λ² μ¬μ©νμλ€. νμ§λ§useRef()λ₯Ό ν΅ν΄ λ³μλ₯Ό κ΄λ¦¬νλ κ²μ ν λ²λ ν΄λ³΄μ§ λͺ»νμλ€.varλ‘ λ³μλ₯Ό μ μΈνκ³ κ΄λ¦¬νλ κ²κ³Όμ μ°¨μ΄λ μ΄ν΄κ° λμ§λ§ μ΄λ€ κΈ°λ₯μμuseRef()λ₯Ό μ¬μ©ν΄μΌ νλμ§μ λν΄μλ μμ§ μλ¬Έμ΄λ€. ꡬ체μ μΈ μμμuseRef()λ₯Ό μ¬μ©νμ¬ λ³μλ₯Ό κ΄λ¦¬νλ μ₯μ μ λν΄ μμλ³΄κ³ μΆλ€.(μ΄ν 곡λΆνλ€κ° ν΄λΉ λ΄μ©μ΄ λμ€λ©΄useRef()μ±ν°μ μ 리λ₯Ό ν΄μΌκ² λ€.)
μ°Έκ³
ko.reactjs.org - useRef 10. useRef λ‘ νΉμ DOM μ ννκΈ° [React] useRef μ¬μ©λ² λ° μμ
π 2022-08-01
Last updated