리액트를 사용할 때, 가끔식 DOM을 직접 선택해야하는 상황이 발생할 수 있다.
ex) 특정 엘리먼트의 크기를 가져와야 할 경우
ex) 스크롤바 위치를 가져오거나 설정해야할 경우
ex) 포커스를 설정해야할 경우
이럴 경우, 리액트에서 ref라는 것을 사용한다!
💡useRef?
- 함수형 컴포넌트에서 ref를 사용할 때 사용하는 Hook 함수
이번에 구현할 것?
전에 만들었던 inputSample에 초기화 버튼을 누르면 이름 input에 포커스가 잡히도록 하는 기능!
import React, {useState, useRef} from 'react' // useRef 선언
function InputSample() {
    const [inputs, setInputs] = useState({
        name: '', 
        nickname: '',
    });
    const {name, nickname} = inputs;
    const onChange = (e) =>{
        const {value, name} = e.target;  
        setInputs({
            ...inputs, 
            [name]: value,
        })
    }
    // (1) Ref 객체 만들기
    const nameInput = useRef();
    const onReset = () =>{
        setInputs({
            name: '',
            nickname: '',
        });
        // ref 객체의 .current 값은 우리가 원하는 DOM을 가리켜주게 된다.
        nameInput.current.focus();
    }
    return (
        <div>
            <input 
                placeholder="이름" 
                onChange={onChange} 
                name="name" 
                value={name} 
                {/* (2) 우리가 선택하고 싶은 DOM에 ref 값으로 객체를 설정 */}
                ref={nameInput}/>
            <input 
                placeholder="닉네임" 
                onChange={onChange} 
                name="nickname" 
                value={nickname}/>
            <button onClick = {onReset}>초기화</button>
            <div>
                <b>값: </b>
                {name} ({nickname})
            </div>
        </div>
    )
}
export default InputSample
Reference
'React > Velopert's React' 카테고리의 다른 글
| [React] Study #11 | useRef 로 컴포넌트 안의 변수만들기 (0) | 2021.10.04 | 
|---|---|
| [React] Study #10 | 배열 렌더링, key의 중요성 (0) | 2021.10.02 | 
| [React] Study #8 | 여러개의 input 상태 관리하기 (useState) (0) | 2021.10.02 | 
| [React] Study #7 | input 상태 관리하기 (useState, onChange) (0) | 2021.10.02 | 
| [React] Study #6 | useState : 바뀌는 값 관리 (0) | 2021.10.02 |