๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
React

[React] ๋ Œ๋”๋ง ์Šค๋ƒ…์ƒท๊ณผ ์—…๋ฐ์ดํŠธ

by mtm1018 2025. 7. 15.

๐Ÿ“ธ ๋ Œ๋”๋ง ์Šค๋ƒ…์ƒท

state๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด ๋ Œ๋”๋ง ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋‹น๊ฒจ์ง„๋‹ค ์„ค๋ช…ํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ Œ๋”๋ง ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋‹น๊ฒจ์ง„ ํ›„ ์ปดํฌ๋„ŒํŠธ์˜ ํ˜ธ์ถœ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์œ ์˜ํ•ด์•ผ ํ•  ์ ์€ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

 

ํ˜ธ์ถœ๋œ ์ปดํฌ๋„ŒํŠธ์˜ prop,์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ,๋กœ์ปฌ๋ณ€์ˆ˜ ์™€ ๊ฐ™์€ state๋“ค์„ ๋ Œ๋”๋ง ๋‹น์‹œ์˜ state๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์Šค๋ƒ…์ƒท์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค

function Component(){
let [count, setCount] = useState(0)


return(
<>
<button onClick={()=>{
setCount(count + 1)
setCount(count + 1)
setCount(count + 1)
}} CLICK </button>
</>
)
}

 

์œ„ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ count๊ฐ’์€ 1์ด๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ ์ด์œ ๋Š”, count๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ,

 

ํ•œ๋ฒˆ ๋ฐ˜ํ™˜๋˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ state๋Š” ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์ €์žฅ๋˜๊ณ  React๊ฐ€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


โ“** ๊ทธ๋Ÿผ state๋Š” ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธํ• ๊นŒ?**

๋ Œ๋”๋ง์ด ๋ ๋•Œ state๋Š” ํ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ž‘๋™๋ฉ๋‹ˆ๋‹ค.

 

์ž ์‹œ ํ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด

 

ํ๋Š” ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ €์ฝ๋Š” ์„ ์ž…์„ ์ถœํ˜•์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

์ด์—๋”ฐ๋ผ state๋Š” ๋ Œ๋”๋ง๋˜๊ธฐ์ „ stateํ๋ผ๋Š” ๊ณณ์— ๋‹ด๊ฒจ์žˆ๋‹ค๊ฐ€ ๋จผ์ € ์ง‘์–ด๋„ฃ์€ ์ž๋ฃŒ๋จผ์ € ๊บผ๋‚ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด ์ ์„ ๊ธฐ์–ตํ•˜๋ฉด์„œ ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ๋˜๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

function Component(){
let [count, setCount] = useState(0)


return(
<>
<button onClick={()=>{
setCount(count => count + 1) // 1
setCount(count => count + 1) // 2
setCount(count => count + 1) // 3
}} CLICK </button>
</>
)
}

 

์œ„์˜ ์„ค๋ช…์ด๋ž‘ ๋‹ค๋ฅด๊ฒŒ state๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ state๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฐœ๋…์€ batching์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ์„ค๋ช…์ด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿชตbatching

๋ฆฌ์•กํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ๋ Œ๋”๋ง ํ•˜๊ธฐ์ „ ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ์ด ์ „๋ถ€ ์ž‘๋™๋  ๋•Œ ๊นŒ์ง€ ๋จผ์ € ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋ Œ๋”๋ง์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๊ฐœ๋…์„ batching์ด๋ผํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ์ฝ”๋“œ๋„ ์ด๋ฒคํŠธ ์ฝ”๋“œ๊ฐ€ ์ „๋ถ€ ์ž‘๋™๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€

 

count state๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋‹ค์Œ ์ฝ”๋“œ์—์„œ ์—…๋ฐ์ดํŠธ ๋œ state๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

state๋ฅผ ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์—ฌ๋Ÿฌ๋ฒˆ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด n => n + 1 ๊ณผ๊ฐ™์€ ์‹์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค

'React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] Zustand  (4) 2025.08.26
[React] react-router v7+  (2) 2025.08.13
[React] sideEffect  (0) 2025.07.09
[React] ๋ฆฌ์•กํŠธ๊ฐ€ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ๋ฒ•  (1) 2025.07.06
[React] ๋ฆฌ์•กํŠธ๋Š” ๋ญ˜๊นŒ?  (0) 2025.07.06