[React] React의 setState는 비동기로 동작한다

[React] React의 setState는 비동기로 동작한다

이채현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function App() {
const [state, setState] = useState(0);

const handleClick = () => {
setState(state + 1);
setState(state + 1);
setState(state + 1);
};

return (
<div className="App">
<p>{state}</p>
<button
onClick={() => {
handleClick();
}}
>
+3
</button>
</div>
);
}

export default App;

위 코드의 결과는 버튼을 눌러도 1씩 증가한다.

이유는?

결국, 위 코드는 setState 는 동일한 key 값에 대하여 이전의 값을 계속해서 덮어써서, 마지막 명령어만 수행되는 셈이다.

setState를 동기적으로 처리하려면!

setState의 인자로 함수를 집어넣는 것이다.

1
2
3
4
5
6
7
...
const handleClick = () => {
setState((prevState) => prevState + 1);
setState((prevState) => prevState + 1);
setState((prevState) => prevState + 1);
};
...

위와 같이 작성하면 setState 내 함수의 매개변수로 이전 상태 값이 들어오므로, 동기적으로 동작하는 것을 확인할 수 있다. 이제 한번의 버튼 클릭으로 카운트가 3씩 증가하는 것을 볼 수 있다.

결론

[React] React의 setState는 비동기로 동작한다

https://devch.co.kr/2022/06/27/REACT-setState-1-22-06-27/

Author

Chaehyeon Lee

Posted on

2022-06-27

Updated on

2022-09-01

Licensed under

댓글