import { useState } from 'react'
export default function New() {
const [count, setCount] = useState(0)
function handleClick() {
setCount(count + 1) // ๊ฐฏ์๊ฐ ์ฆ๊ฐํ๋ฉด์, ํ๋ฉด์ ์ ์์ ์ผ๋ก **๋ฐ์๋จ**
}
return (
<div>
<h1>{count}</h1>
<button onClick={handleClick}>state๋ฅผ ์ฌ์ฉํ์ฌ count ์ฆ๊ฐ</button>
</div>
)
}
์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด button์ ํด๋ฆญํ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํ๋ค. ์ฌ๊ธฐ์ ๋ง์ฝ, count๋ฅผ 5์ฉ ์ฆ๊ฐ์ํค๋ ค๋ฉด ์ด๋ป๊ฒ ํ ๊น?
function handleClick() {
setCount(count + 1)
// ํ์ฌ count๋ 0 + 1 => 1 ์์์ ์ฅ๊ณต๊ฐ์ ์ ์ฅ
setCount(count + 1)
// 1 ์ด ์์์ ์ฅ๊ณต๊ฐ์ ๋ด๊ฒผ์ง๋ง ์ฌ์ ํ count๋ 0 ์ด๋ฏ๋ก 1์ด ์์์ ์ฅ๊ณต๊ฐ์ ์ ์ฅ๋จ
setCount(count + 1)
// ์์ ๋์ผ
setCount(count + 1)
// ์์ ๋์ผ
setCount(count + 1)
// ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ต์ข
์ ์ผ๋ก 1์ด ๋ด๊ฒจ ํ๋ฉด์ 1์ด ๋ฐ์๋จ
}
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก๋ count๊ฐ ํ๋์ฉ๋ง ์ฆ๊ฐํ๊ฒ ๋๋ค. ๋งค๋ฒ ์์์ ์ฅ๊ณต๊ฐ์ 1์ ๋ด์ง๋ง, ๋ค์ ์ค์ ์ฝ๋๋ก ๋์ด๊ฐ๋ฉด ๋ค์ ์๋กญ๊ฒ 1์ ๋ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋๋ก count๊ฐ 5์ฉ ์ฆ๊ฐํ๋๋ก ํ๊ธฐ ์ํด์๋ prev
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
function handleClick() {
setCount((prev)=>prev+1)
// ์์์ ์ฅ๊ณต๊ฐ์ 0(๊ธฐ๋ณธ๊ฐ, prev) + 1 => 1์ ๋ด๋๋ค.
setCount((prev)=>prev+1)
// ์์์ ์ฅ๊ณต๊ฐ์ ๋ด๊ธด 1(prev) + 1 => 2๋ฅผ ๋ด๋๋ค.
setCount((prev)=>prev+1)
// ...
setCount((prev)=>prev+1)
// ...
setCount((prev)=>prev+1)
// ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ต์ข
์ ์ผ๋ก 5๊ฐ ๋ด๊ฒจ ํ๋ฉด์ 5๊ฐ ๋ฐ์๋จ
}
prev
๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ์ฅ๊ณต๊ฐ์ ์๋ ๊ฐ์ ๋จผ์ ๊บผ๋ด์ค๊ณ , ๋ง์ฝ ์์ ์ ์ฅ๊ณต๊ฐ์ ์๋ ๊ฐ์ด ์๋ค๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ถ๋ฌ์ค๊ฒ ๋๋ค!
state๋ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์์์ ์ฅ๊ณต๊ฐ์ ์๋กญ๊ฒ ๊ฐ์ ์ ์ฅํ์ง๋ง, prev๋ ์์์ ์ฅ๊ณต๊ฐ์ ์๋ ๊ฐ์ ๊บผ๋ด์จ๋ค! prev๊ฐ ์์์ ์ฅ๊ณต๊ฐ์ ์ ๋๋ก ํ์ฉํ ์ค ์๋ ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.