- useRef : 렌더링에 필요하지 않은 값을 참조할 수 있는 React 훅
- useRef의 매개변수에는 초기값(initialValue)을 지정할 수 있는데, 이는 ref 객체의 current 프로퍼티 초기 설정값이며 어떤 유형의 값이든 지정할 수 있다.
- useRef는 단일 프로퍼티를 가진 객체를 반환한다.
- ref 객체를 JSX 노드의 ref 속성으로 React에 전달하면 React는 current 프로퍼티를 설정한다.
- ref는 state와 달리 변경하더라도 리렌더링을 촉발하지 않는다.
* 렌더링 중에는 ref.current를 쓰거나 읽지 마세요.
- React는 컴포넌트의 본문이 순수 함수처럼 동작하기를 기대한다.
- 입력값들(props, state, context)이 동일하면 완전히 동일한 JSX를 반환해야 한다.
// 렌더링중에 ref를 읽거나 쓰는 경우
function MyComponent() {
// ...
// 🚩 Don't write a ref during rendering
// 🚩 렌더링 중에 ref를 작성하지 마세요.
myRef.current = 123;
// ...
// 🚩 Don't read a ref during rendering
// 🚩 렌더링 중에 ref를 읽지 마세요.
return <h1>{myOtherRef.current}</h1>;
}
// 렌더링 중이 아닌 이벤트 핸들러나 Effect에서 ref를 읽거나 쓰는 경우
function MyComponent() {
// ...
useEffect(() => {
// ✅ You can read or write refs in effects
// ✅ Effect에서 ref를 읽거나 쓸 수 있습니다.
myRef.current = 123;
});
// ...
function handleClick() {
// ✅ You can read or write refs in event handlers
// ✅ 이벤트 핸들러에서 ref를 읽거나 쓸 수 있습니다.
doSomething(myOtherRef.current);
}
// ...
}
I can't get a ref to a custom component(커스텀 컴포넌트에 대한 ref를 얻을 수 없습니다)
- 커스텀 컴포넌트에 ref를 전달하고자하면 오류가 발생한다.
- 이런 경우, forwardRef를 사용할 수 있다.
// 커스텀 컴포넌트에 ref 사용 불가
const inputRef = useRef(null);
return <MyInput ref={inputRef} />;
// forwardRef 사용
import { forwardRef } from 'react';
const MyInput = forwardRef(({ value, onChange }, ref) => {
return (
<input
value={value}
onChange={onChange}
ref={ref}
/>
);
});
export default MyInput;
* 참고 : React 공식문서(https://react-ko.dev/learn)
'이것저것 스터디📚 > React - 공식 문서' 카테고리의 다른 글
React 공식문서 -startTransition (0) | 2023.09.20 |
---|---|
React 공식문서 -forwardRef (0) | 2023.09.20 |
React 공식문서 -lazy (0) | 2023.09.14 |
React 공식문서 -<Suspense> (0) | 2023.09.13 |
React 공식문서 -memo (0) | 2023.09.07 |