header-img
Info :
728x90

μ»΄ν¬λ„ŒνŠΈμ˜ 속성 값을 뢈러올 μˆ˜λ„ 있고, valueλ‚˜ style κ°’ 같은 것듀을 바꿔쀄 μˆ˜λ„ μžˆλŠ”. DOM을 μ‘°μž‘ν•  수 있게 ν•΄μ£ΌλŠ” ref.

λ Œλ”λ§μ— ν•„μš”ν•˜μ§€ μ•Šμ€ 값을 μ°Έμ‘°ν•  수 μžˆλŠ” ref.

에 λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² λ‹€.

​

ref λŠ” 비ꡐ적 κ°„λ‹¨ν•œ κ°œλ…μ΄λ―€λ‘œ forwardRef 와 useImperativeHandle λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•œ 도약 λ‹¨κ³„μ²˜λŸΌ κ°€λ³κ²Œ 짚고 λ„˜μ–΄κ°€λ„λ‘ ν•˜κ² μŒ.

​

λ§λΆ™νžˆλŠ” 말..

λͺ¨ λΆ€μž₯의 "Ref λŠ” React 생λͺ…주기와 μ–΄μšΈλ¦¬μ§€ μ•ŠλŠ” λ¬Έλ²•μœΌλ‘œ React μƒμ—μ„œλ„ 지양해야 ν•œλ‹€"λŠ” λ°œμ–Έμ— λŒ€ν•˜μ—¬ μ„€λͺ…ν•˜λ„λ‘ ν•˜κ² λ‹€.

Ref λ₯Ό λ¬΄λΆ„λ³„ν•˜κ²Œ μ„ μ–Έν•˜κ³ , λ‹€λ₯Έ λ¬Έλ²•μœΌλ‘œ λŒ€μ²΄κ°€ κ°€λŠ₯ν•œλ°λ„ λΆˆκ΅¬ν•˜κ³  λ¬΄μ§€μ„±μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이 문제. (이것은 λ‹€λ₯Έ 문법도 λ™μΌν•˜λ‹€. κ°μžκ°€ κ°€μ§€λŠ” 고유의 νŠΉμ„±μ„ μ΄ν•΄ν•˜κ³  μ‚¬μš©ν•΄μ•Ό 함.)

ν•΄λ‹Ή λ‚΄μš©μ— λŒ€ν•˜μ—¬ λ‹΅λ³€ν•˜μžλ©΄,

 

React 곡식 λ¬Έμ„œ

 

useRef – React

The library for web and native user interfaces

react.dev

 

κ·Έ 어디에도 μ‚¬μš©μ„ μ§€μ–‘ν•˜λΌλŠ” 단어와 λŠ¬μ•™μŠ€λŠ” μ—†μœΌλ―€λ‘œ, 곡식 λ¬Έμ„œ μƒμ˜ μ„€λͺ…μ—μ„œ λ³Ό 수 μžˆλ“― "μ„ μ–Έμ μœΌλ‘œ 해결될 수 μžˆλŠ” 문제의 경우 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λ₯Ό μ–Έμ œ μ‚¬μš©ν•˜λ©΄ μ’‹μ„κΉŒ?

  1. 포컀슀, ν…μŠ€νŠΈ μ„ νƒμ˜μ—­, ν˜Ήμ€ λ―Έλ””μ–΄μ˜ μž¬μƒμ„ 관리해야 ν•  λ•Œ.
  2. μ• λ‹ˆλ©”μ΄μ…˜μ„ μ½”λ“œ μ–΄λ–€ λ‘œμ§μ„ ν†΅ν•˜μ—¬ μ§μ ‘μ μœΌλ‘œ μ‹€ν–‰μ‹œν‚¬ λ•Œ
  3. νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§μ„ 방지해야 ν•  λ•Œ

 

μ‚¬μš©λ°©λ²•

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>
    </>);
}

​

 


​곡식 λ¬Έμ„œλ₯Ό μ½κ±°λ‚˜ κ°œλ°œν•˜λ©° λŠκΌˆλ˜ λ‡Œν”Όμ…œλ‘œ μž‘μ„±ν•˜κ³  μžˆμœΌλ‹ˆ, 
κΆκΈˆν•˜μ‹  μ μ΄λ‚˜ μž˜λͺ»λœ μ μ΄ μžˆλ‹€λ©΄ λŒ“κΈ€ λ‚¨κ²¨μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

 

728x90
더보기
Document/λ¨•μ„ μƒμ˜ 코딩ꡐ싀