728x90
state와 ref 비교하기
들어가며
- 리액트에서 자주 사용되는 @ref@와 @state@를 비교해보자.
비교
- @useState@를 통해 생성된 객체는 리렌더링 중에 초기화가 되지만, @useRef@를 통해 생성된 객체는 리렌더링 중에 초기화가 되지 않는다.
- @useState@는 @[value, setValue]@를 반환하고, @useRef@는 @{ current : value }@를 반환한다.
@ref@ | @state@ |
@useRef(initialValue)@는 @{ current: initialValue }@을 반환 | @useState(initialValue)@는 @state@ 변수의 현재값과 @state@ 설정자 함수@([value, setValue])@를 반환 |
Mutable → 렌더링 프로세스 외부에서 @current@ 값을 수정하고 업데이트할 수 있음. |
Immutable → @state@ 설정자 함수를 사용하여 @state@ 변수를 수정해 리렌더링을 대기열에 추가해야 함. |
변경 시 리렌더링을 촉발하지 않음. | 변경 시 리렌더링을 촉발함. |
렌더링 중에는 @current@ 값을 읽거나 쓰지 않아야 함. | 언제든지 @state@를 읽을 수 있음. 각 렌더링에는 변경되지 않는 자체 state Snapshot이 있음. |
사용 예제 코드
@useState@
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increase</button>
</div>
);
}
export default Counter;
@useRef@
import React, { useRef } from 'react';
function TextInputWithFocusButton() {
const inputEl = useRef(null);
const onButtonClick = () => {
inputEl.current.focus();
};
return (
<div>
<input ref={inputEl} type="text" />
<button onClick={onButtonClick}>Focus the input</button>
</div>
);
}
export default TextInputWithFocusButton;
참고 사이트
ref로 값 참조하기 – React
The library for web and native user interfaces
react-ko.dev
728x90
'Programming > React.js' 카테고리의 다른 글
[React.js] 토스트 메시지 띄우기 간단 예제 (ReactDOM.createPortal) (0) | 2024.05.21 |
---|---|
[React.js] useImperativeHandle과 forwardRef (0) | 2024.05.21 |
[React.js] 부모 컴포넌트에서 자식 컴포넌트로 요소 넘기는 방법 (0) | 2024.05.14 |
[React.js] 실시간으로 특정 요소의 길이값 가져오기 (0) | 2024.03.26 |
[React.js] 마우스 호버 효과를 적용하기 위한 커스텀 훅 만들기 (useHover.js) (0) | 2024.02.20 |
[React.js] Node.js 설치부터 리액트 프로젝트 테스트까지 정리 (0) | 2024.02.05 |
[React.js] 클래스 컴포넌트(Class Components)와 함수형 컴포넌트(Functional Components) (0) | 2023.12.14 |
[React.js] 훅(Hook) (0) | 2023.12.13 |