이채현
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씩 증가하는 것을 볼 수 있다.
결론