μ»΄ν¬λνΈμ μμ± κ°μ λΆλ¬μ¬ μλ μκ³ , valueλ style κ° κ°μ κ²λ€μ λ°κΏμ€ μλ μλ. DOMμ μ‘°μν μ μκ² ν΄μ£Όλ ref.
λ λλ§μ νμνμ§ μμ κ°μ μ°Έμ‘°ν μ μλ ref.
μ λνμ¬ μ€λͺ νλλ‘ νκ² λ€.
β
ref λ λΉκ΅μ κ°λ¨ν κ°λ μ΄λ―λ‘ forwardRef μ useImperativeHandle λ₯Ό μ€λͺ νκΈ° μν λμ½ λ¨κ³μ²λΌ κ°λ³κ² μ§κ³ λμ΄κ°λλ‘ νκ² μ.
β
λ§λΆνλ λ§..
λͺ¨ λΆμ₯μ "Ref λ React μλͺ μ£ΌκΈ°μ μ΄μΈλ¦¬μ§ μλ λ¬Έλ²μΌλ‘ React μμμλ μ§μν΄μΌ νλ€"λ λ°μΈμ λνμ¬ μ€λͺ νλλ‘ νκ² λ€.
Ref λ₯Ό 무λΆλ³νκ² μ μΈνκ³ , λ€λ₯Έ λ¬Έλ²μΌλ‘ λμ²΄κ° κ°λ₯νλ°λ λΆκ΅¬νκ³ λ¬΄μ§μ±μΌλ‘ μ¬μ©νλ κ²μ΄ λ¬Έμ . (μ΄κ²μ λ€λ₯Έ λ¬Έλ²λ λμΌνλ€. κ°μκ° κ°μ§λ κ³ μ μ νΉμ±μ μ΄ν΄νκ³ μ¬μ©ν΄μΌ ν¨.)
ν΄λΉ λ΄μ©μ λνμ¬ λ΅λ³νμλ©΄,
React 곡μ λ¬Έμ
κ·Έ μ΄λμλ μ¬μ©μ μ§μνλΌλ λ¨μ΄μ λ¬μμ€λ μμΌλ―λ‘, 곡μ λ¬Έμ μμ μ€λͺ μμ λ³Ό μ μλ― "μ μΈμ μΌλ‘ ν΄κ²°λ μ μλ λ¬Έμ μ κ²½μ° refλ₯Ό μ¬μ©νλ κ²μ μ§μν΄λΌ"κ° μ νν λ΅λ³μ΄ λκ² λ€.
μλλ ref.current.value λ‘ λ°μμ¬ λ²ν λ°μ΄ν°λ₯Ό state λ‘ μ²λ¦¬ν΄μ€ μμ .
function AnyComponent() {
const [inputs, setInputs] = useState({
email: '',
password: '',
nickname: '',
});
const emailRef = useRef();
const onChange = (e: ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
setInputs({
...inputs,
[name]: value,
});
};
const onReset = () => {
setInputs({
email: '',
password: '',
nickname: '',
})
emailRef.current.focus();
}
return (
<>
<input name='email' ref={emailRef} onChange={onChange}/>
<input name='password'onChange={onChange}/>
<input name='nickname'onChange={onChange}/>
<button onClick={onReset}>Reset</button>
</>
);
}
νν ref λ₯Ό μ¬μ©νμ¬ value λ₯Ό μ μ₯ν΄μ£Όλ case λ μ΄λ°μμΌλ‘ μ μΈν΄μ£Όλ©΄ λλ€.
REFλ₯Ό μΈμ μ¬μ©νλ©΄ μ’μκΉ?
- ν¬μ»€μ€, ν μ€νΈ μ νμμ, νΉμ λ―Έλμ΄μ μ¬μμ κ΄λ¦¬ν΄μΌ ν λ.
- μ λλ©μ΄μ μ μ½λ μ΄λ€ λ‘μ§μ ν΅νμ¬ μ§μ μ μΌλ‘ μ€νμν¬ λ
- νΉμ μ»΄ν¬λνΈμ 리λ λλ§μ λ°©μ§ν΄μΌ ν λ
μ¬μ©λ°©λ²
import { useRef } from 'react';
/* 1. μ¬μ©ν μ μλλ‘ ν
μ λΆλ¬μ¨λ€. */
function TextInputWithFocusButton() {
const inputEl = useRef(null);
/* 2. inputElμ νΉμ μ리먼νΈμ μ£Όμκ°μ λ΄λ λ³μκ° λλ€. */
const onButtonClick = () => {
inputEl.current.focus();
/* 4. ν΄λΉ ν¨μκ° μ€νλλ©΄, inputElμ΄ κ°μ§κ³ μλ
μ£Όμκ°(input)μ΄ focusλλ€. */
};
return (
<>
<input ref={inputEl} type="text" />
/* 3. νΉμ νκ·Έμ ref μμ±μ λΆμ΄κ³ 미리 ν λΉνλ useRef κ°μ²΄λ₯Ό
λ£μΌλ©΄, ν΄λΉ νκ·Έμ μ£Όμκ°μ inputElμ΄λΌλ λ³μκ° κ°μ§κ³ μκ² λλ€. */
<button onClick={onButtonClick}>Focus the input</button>
</>);
}
β
β곡μ λ¬Έμλ₯Ό μ½κ±°λ κ°λ°νλ©° λκΌλ λνΌμ
λ‘ μμ±νκ³ μμΌλ,
κΆκΈνμ μ μ΄λ μλͺ»λ μ μ΄ μλ€λ©΄ λκΈ λ¨κ²¨μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.