STUDY/React
[React Hooks] UseRef( )
킵코
2021. 9. 28. 22:12
useState( ) 에 이어서 오늘 공부할 React Hook은 useRef( )이다.
useRef( )란 무엇일까? 오늘도 공식문서를 찾아가 봤다.
useRef는 .current 프로퍼티로 전달된 인자(initialValue)로 초기화된 변경 가능한 ref 객체를 반환합니다.
반환된 객체는 컴포넌트의 전 생애주기를 통해 유지될 것입니다.
이게 무슨 소리지..?
조금 더 자세한 설명이 필요해서 책과 다른 분들이 올린 포스팅을 찾아봤다.
useRef( )는 특정 DOM에 접근할 수 있다.
그렇다면 DOM이란 정확하게 뭘까? 이건 다음에 자바스크립트 포스팅에서 다룰 예정이다.
우선 useRef( ) 사용법을 알아보자!
1. Ref 객체 만들기
const useref = useRef()
2. 선택한 DOM에 ref값을 넣어준다.
<input type="text" ref={useref} /> // input 태그에 ref를 줬다.
3. .current 사용해서 DOM 호출하기.
useref.current.focus();
//current는 내가 선택한 DOM이다.
//위에서 input 태그에 ref를 사용했으니 input창에 focus를 호출한다.
useEffect와 useRef를 공부하면서 작성했던 코드다.
useRef를 사용해서 컴포넌트가 마운트 되면 input창에 focus가 맞춰지게 했다.
import { useEffect, useState, useRef } from "react"
import { useRouter } from 'next/router'
export default function FunctionalComponentLifeCyclePage() {
const router = useRouter()
const [count, setCount] = useState(0)
const inputRef = useRef<HTMLInputElement>()
useEffect(() => {
console.log('컴포넌트 마운트 완료');
inputRef.current.focus();
return () => {
console.log('잘가요~~')
}
}, [])
useEffect(() => {
console.log('컴포넌트 수정 완료')
}, [count]);
function onCllickCount() {
setCount(prev => prev + 1)
}
function onClickMove() {
router.push('/')
}
return (
<>
현재 카운트 : {count}
<button onClick={onCllickCount}>카운트 증가!!</button>
<button onClick={onClickMove}>페이지 이동</button>
<input type="text" ref={inputRef}/>
</>
)
}
useRef( )를 사용하는 것 자체는 어렵지 않다. 그렇다면 어떨 때 useRef를 사용할까?
- DOM선택해서 사용하기
- 컴포넌트 변수 관리하기
DOM선택해서 사용하는 방법은 위에 코드 예시를 보면 된다.
컴포넌트 변수 관리하는 방법은
공식문서 👇 use가 붙은 리액트훅은 리렌더링을 발생시키지 않는다. 이 부분이 일단 중요한 것 같다.
예를 들면 useSate에 저장한 값은 화면이 다시 그려저도 없어지지않는다!
useRef는 내용이 변경될 때 그것을 알려주지는 않는다는 것을 유념하세요. .current 프로퍼티를 변형하는 것이 리렌더링을 발생시키지는 않습니다. React가 DOM 노드에 ref를 attach하거나 detach할 때 어떤 코드를 실행하고 싶다면 대신 콜백 ref를 사용하세요.
이런 것도 가능하다고 갓원두님께서 말씀해 주셨다. input 창에 입력한 값을 state에 저장하지 않고 바로 사용할 수 있다..!
재밌는 useRef 사용하기! 공부하다가 추가할 내용이 있으면 추가할 예정입니다.
... keepcoing