state와 prev 느낌잡기

4씩 오르는 카운터를 useState를 이용해서 만들어보자

import { useState } from 'react';

export default function StatePage() {
  const [count, setCount] = useState(0);
  const onClickCount = () => {
    setCount(count + 1);
    setCount(count + 1);
    setCount(count + 1);
    setCount(count + 1);
  };

  return (
    <div>
      <div>현재 카운트 : {count}</div>
      <button onClick={onClickCount}>카운토 올리기</button>
    </div>
  );
}

이런식이라서 count가 1씩 밖에 안오른다

prev 사용 시

import { useState } from 'react';

export default function StatePrevPage() {
  const [count, setCount] = useState(0);
  const onClickCount = () => {
    setCount((prev) => prev + 1);
    setCount((prev) => prev + 1);
    setCount((prev) => prev + 1);
    setCount((prev) => prev + 1);
  };

  return (
    <div>
      <div>현재 카운트 : {count}</div>
      <button onClick={onClickCount}>카운토 올리기</button>
    </div>
  );
}

이렇게 prev를 사용한 경우에는 4씩 오르게 된다.

prev는 임시저장소에 있는 count 값을 불러와서 계산을 하기 때문에 가능하다

count = 0, 현재 count : 0, 임시저장 count : 1

count = 0, 현재 count : 0, 임시저장 count : 2

count = 0, 현재 count : 0, 임시저장 count : 3

count = 0, 현재 count : 0, 임시저장 count : 4

count = 4