ν°μ€ν 리 λ·°
π― useRefλ 무μμΈκ°μ?
**useRef**λ μ»΄ν¬λνΈ μμμ κ°μ΄λ DOM μμλ₯Ό μ μ₯νκ³ κ΄λ¦¬ν λ μ¬μ©ν΄μ.
μ¬κΈ°μ μ€μν ν¬μΈνΈλ:
- κ°μ΄ λ°λμ΄λ νλ©΄μ΄ λ€μ λ λλ§λμ§ μμμ.
- DOM μμ(HTML μμ)μ μ§μ μ κ·Όν λλ μ¬μ©ν μ μμ΄μ.
π¦ μμλ₯Ό κΈ°μ΅νλ μ΄μΌκΈ°
μ¬λ¬λΆμ΄ 물건μ λ΄μλλ μμλ₯Ό νλ κ°μ§κ³ μλ€κ³ μμν΄ λ³΄μΈμ. π¦
- μ΄ μμμ κ°μ λ£μ΄λλ©΄, μΈμ λ μ§ κΊΌλ΄μ μ¬μ©ν μ μμ΄μ.
- νμ§λ§ μμμ 물건μ λ£κ³ λΉΌλ μμλ λ³νμ§ μμμ(λ λλ§μ΄ λ€μ μΌμ΄λμ§ μμμ).
Reactμμ **useRef**λ μ΄λ° μμμ κ°μ μν μ ν΄μ!
κ°μ μ μ₯ν΄λμ§λ§ νλ©΄μ μν₯μ μ£Όμ§ μκ³ , νμν λ κΊΌλ΄ μΈ μ μμ£ .
π οΈ useRefλ₯Ό μ¬μ©νλ μμ
1. DOM μμμ μ κ·ΌνκΈ°
useRefλ₯Ό μ¬μ©νλ©΄ HTML μμμ μ§μ μ κ·Όν μ μμ΄μ. μλ₯Ό λ€μ΄ μ λ ₯μ°½μ ν¬μ»€μ€λ₯Ό μ£Όλ κΈ°λ₯μ λ§λ€μ΄λ³ΌκΉμ?
import React, { useRef } from "react";
function FocusInput() {
const inputRef = useRef(null); // useRefλ‘ μ°Έμ‘° μμ±
const handleFocus = () => {
inputRef.current.focus(); // input μμμ ν¬μ»€μ€ μ£ΌκΈ°
};
return (
<div>
<h3>useRefλ‘ μ
λ ₯μ°½μ ν¬μ»€μ€ μ£ΌκΈ°</h3>
<input ref={inputRef} type="text" placeholder="μ¬κΈ°μ μ
λ ₯νμΈμ" />
<button onClick={handleFocus}>ν¬μ»€μ€ μ£ΌκΈ°</button>
</div>
);
}
export default FocusInput;
π μ½λ μ€λͺ
- useRefλ‘ μ°Έμ‘° μμ±
- const inputRef = useRef(null)λ₯Ό μ¬μ©ν΄ input μμλ₯Ό μ°Έμ‘°ν μ€λΉλ₯Ό ν΄μ.
- ref μμ± μ°κ²°
- <input ref={inputRef} />λ₯Ό μ¬μ©ν΄ input μμμ useRefλ₯Ό μ°κ²°ν΄ μ€λλ€.
- μμμ μ κ·Ό
- inputRef.currentλ₯Ό μ¬μ©νλ©΄ μ€μ input DOM μμμ μ κ·Όν μ μμ΄μ.
- focus() λ©μλλ₯Ό νΈμΆν΄μ μ λ ₯μ°½μ ν¬μ»€μ€λ₯Ό μ£Όλ κΈ°λ₯μ λ§λ€μμ΄μ.
π κ²°κ³Ό
- μ λ ₯μ°½μ κ°μ μ°μ§ μκ³ λ²νΌλ§ λλ¬λ³΄μΈμ.
- λ²νΌμ ν΄λ¦νλ©΄ μ λ ₯μ°½μ ν¬μ»€μ€κ° μ΄λν©λλ€! π―
2. κ° μ μ₯νκΈ° (λ λλ§ μμ΄ κ° κ΄λ¦¬)
useRefλ νλ©΄μ λ€μ λ λλ§νμ§ μκ³ λ κ°μ μ μ₯ν μ μμ΄μ.
μ΄λ₯Ό νμ©νλ©΄ λ³μλ₯Ό κ΄λ¦¬νκ±°λ νμ΄λ¨Έ κ°μ κ²μ λ§λ€ λ μ μ©ν΄μ.
import React, { useState, useRef } from "react";
function Timer() {
const [count, setCount] = useState(0);
const timerRef = useRef(null); // νμ΄λ¨Έ IDλ₯Ό μ μ₯
const startTimer = () => {
if (!timerRef.current) {
timerRef.current = setInterval(() => {
setCount((prev) => prev + 1);
}, 1000); // 1μ΄λ§λ€ count μ¦κ°
}
};
const stopTimer = () => {
clearInterval(timerRef.current);
timerRef.current = null; // νμ΄λ¨Έ μ΄κΈ°ν
};
return (
<div>
<h3>useRefλ‘ νμ΄λ¨Έ λ§λ€κΈ°</h3>
<p>μΉ΄μ΄νΈ: {count}</p>
<button onClick={startTimer}>νμ΄λ¨Έ μμ</button>
<button onClick={stopTimer}>νμ΄λ¨Έ μ μ§</button>
</div>
);
}
export default Timer;
π μ½λ μ€λͺ
- useRefλ‘ νμ΄λ¨Έ ID μ μ₯
- timerRefλ νλ©΄κ³Όλ μκ΄μμ΄ νμ΄λ¨Έ IDλ₯Ό μ μ₯νλ μν μ ν΄μ.
- νλ©΄ λ λλ§ μμ΄ κ° μ μ§
- νμ΄λ¨Έκ° μ€νλλ timerRef κ°λ§ λ³κ²½λ λΏ, νλ©΄μ΄ λ€μ λ λλ§λμ§ μμμ.
- μ μ§ λ²νΌ
- νμ΄λ¨Έλ₯Ό μ μ§νλ©΄ clearIntervalμ μ¬μ©ν΄ νμ΄λ¨Έλ₯Ό λ©μΆκ³ timerRefλ₯Ό μ΄κΈ°νν©λλ€.
π useRefμ ν΅μ¬ ν¬μΈνΈ!
- DOM μμμ μ κ·Ό
- input, button, div κ°μ HTML μμμ μ κ·Όν λ μ¬μ©ν΄μ.
- νλ©΄ λ λλ§ μμ΄ κ° κ΄λ¦¬
- κ°μ΄ λ°λμ΄λ μ»΄ν¬λνΈκ° λ€μ λ λλ§λμ§ μμμ.
- νμ΄λ¨Έλ λ³μ μ μ₯
- νμ΄λ¨Έ ID, μ΄μ μνκ° λ±μ μ μ₯νκ³ κ΄λ¦¬ν λ μ μ©ν΄μ.
π μ 리νμλ©΄!
useRefλ DOM μμμ μ κ·Όνκ±°λ νλ©΄ λ λλ§κ³Ό μκ΄μμ΄ κ°μ μ μ₯νκ³ κ΄λ¦¬ν μ μλ React ν
μ΄μμ.
νλ©΄μ΄ λ€μ κ·Έλ €μ§μ§ μμμΌ νλ μν©μμ μμ£Ό μ μ©νκ² μ¬μ©λ©λλ€!
'web > react hook' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
useSyncExternalStore (1) | 2024.12.14 |
---|---|
useState (0) | 2024.12.14 |
useReducer (0) | 2024.12.14 |
useOptimistic (0) | 2024.12.14 |
useMemo (2) | 2024.12.14 |
- Total
- Today
- Yesterday
- dns-prefetch
- component
- useformstatus
- preconnect
- useRef
- flushsync
- useid
- experimental
- react dom hook
- experimental_taintuniquevalue
- Nextjs
- μ€νμ
- μνκ΄λ¦¬
- finddomnode
- useinsertioneffect
- μ μ₯μ
- μΈλΆν°νΈ
- state
- μ΅μ λ°μ΄ν°
- λ² ν
- Props
- react dom
- react
- prefetchdns
- usedeferredvalue
- react hook
- Store
- experimental_taintobjectreference
- λ°μ΄ν°μ μ§
- zustand
μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |