렌더링 간의 데이터를 유지하기 위해 state 변수 사용
변수를 업데이트하면, 리렌더링을 유발하는 state 변수 사용
import { useState } from 'react';
const [index, setIndex] = useState(0);
//index는 state 변수이고, setIndex는 setter 함수이다.
react 같은 라이브러리에서는 상태가 동기적으로 바뀌기 때문에, 상태 변경 요청을 큐에 넣어 처리한다.
react는 사용자가 버튼을 클릭하는 등의 입력을 통해 데이터가 변경될 때, 상태를 바꾸려는 요청이 들어오면, 업데이트 큐에 저장한다. react는 다음 렌더링 시점에 큐에 쌓인 모든 요청을 한꺼번에 처리해서 상태를 변경한다.
-> 이렇게 하는 이유는 요청이 들어올 때 마다 매번 리렌더링 하면 성능 낭비이기 때문이다.
import { useState } from 'react';
export default function Counter() {
const [number, setNumber] = useState(0);
return (
<>
<h1>{number}</h1>
<button onClick={() => {
setNumber(number + 1);
setNumber(number + 1);
setNumber(number + 1);
}}>+3</button>
</>
)
}
import { useState } from 'react';
export default function Counter() {
const [number, setNumber] = useState(0);
return (
<>
<h1>{number}</h1>
<button onClick={() => {
setNumber(prevNumber => prevNumber + 1);
setNumber(prevNumber => prevNumber + 1);
setNumber(prevNumber => prevNumber + 1);
}}>+3</button>
</>
)
}
//prevNumber => prevNumber + 1 는 업데이터 함수(updator function)
react에서 여러 상태 업데이트를 하나의 렌더링 사이클에 묶어 성능을 향상시키고, 불필요한 렌더링을 줄이기 위해 사용된다.
그래서
setNumber(number + 1);
setNumber(number + 1);
setNumber(number + 1);
가 한 배치에 포함되기 때문에 결국 +1이라는 결과라 렌더링 되는 것이다.