๐Ÿ“– [React] State๋กœ ์ƒํƒœ๊ด€๋ฆฌํ•˜๊ธฐ

์–ธ์ง€ยท2024๋…„ 11์›” 24์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
7/13
post-thumbnail

๐Ÿ“ State๋ž€?

: State(์ƒํƒœ)๋ผ๋Š” ๊ฑด ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ๋‚˜ ๋ชจ์–‘์„ ์ •์˜ํ•˜๋Š” ๊ฐ’, ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ ์ธ ๊ฐ’

์˜ˆ์‹œ

๊ฐ€์Šค๋ ˆ์ธ์ง€์— ๋ถˆ์ด ์ผœ์ ธ์žˆ์„ ๊ฒฝ์šฐ โžก๏ธ ์ผœ์ง„ ์ƒํƒœ์˜ ๊ฐ€์Šค๋ ˆ์ธ์ง€
๊ฐ€์Šค๋ ˆ์ธ์ง€์— ๋ถˆ์ด ๊บผ์ ธ์žˆ์„ ๊ฒฝ์šฐ โžก๏ธ ๊บผ์ง„ ์ƒํƒœ์˜ ๊ฐ€์Šค๋ ˆ์ธ์ง€

โœ… ๋ชจ๋“  ์‚ฌ๋ฌผ๋“ค์€ ์ž์‹ ์ด ๊ฐ–๋Š” ํ˜„์žฌ์˜ State(์ƒํƒœ)์— ๋”ฐ๋ผ์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ชจ์–‘์ด๋‚˜ ๋‹ค๋ฅธ ๋™์ž‘๋“ค์„ ํ•˜๊ฒŒ๋œ๋‹ค. โžก๏ธ State ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

๊ฐ€์Šค๋ ˆ์ธ์ง€์— ๋ถˆ์ด ์ผœ์ ธ์žˆ์„ ๊ฒฝ์šฐ โžก๏ธ ๋ถˆ ๋„๊ธฐ โžก๏ธ ๊บผ์ง„ ์ƒํƒœ์˜ ๊ฐ€์Šค๋ ˆ์ธ์ง€
๊ฐ€์Šค๋ ˆ์ธ์ง€์— ๋ถˆ์ด ๊บผ์ ธ์žˆ์„ ๊ฒฝ์šฐ โžก๏ธ ๋ถˆ ์ผœ๊ธฐ โžก๏ธ ์ผœ์ง„ ์ƒํƒœ์˜ ๊ฐ€์Šค๋ ˆ์ธ์ง€

โœ… React์—์„œ State๋Š” ์ปดํผ๋„ŒํŠธ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ณ€์ˆ˜
โœ… ๊ทธ๋ž˜์„œ State๋ฅผ ๊ฐ–๋Š” ์ปดํผ๋„ŒํŠธ๋“ค์€ State ๊ฐ’์— ๋”ฐ๋ผ์„œ ๋ Œ๋”๋ง ๋˜๋Š” UI๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค


๐Ÿ’ป ์‹ค์Šต

import { useState } from "react";

: useState๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ๋‹จ์— ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ์„ ์–ธํ•ด์•ผํ•œ๋‹ค.

1-1. useState ํ˜ธ์ถœํ•˜๊ธฐ

const state = useState();

  • state ๊ฐ’์€ [undefined,๐’‡] { 0 : undefined, 1: ๐’‡()} ์ด๋ ‡๊ฒŒ ๋ฐฐ์—ด๋˜์–ด ์žˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ state ๊ฐ’ โžก๏ธ ํ˜„์žฌ๊ฐ’
  • ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋Š” state ๊ฐ’์„ ๋ณ€๊ฒฝ, ๋ณ€ํ™” ์‹œํ‚ค๋Š” ํ•จ์ˆ˜ โžก๏ธ ์ƒํƒœ ๋ณ€ํ™” ํ•จ์ˆ˜
  • ์ปดํผ๋„ŒํŠธ์˜ state ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ด ์ปดํฌ๋„ˆํŠธ๊ฐ€ return โžก๏ธ ๋ฆฌ๋ Œ๋”๋ง

๐Ÿ“ useState()์— 0์„ ๋„ฃ์„ ๊ฒฝ์šฐ

const state = useState(0);

: state ๊ฐ’์ด [0,๐’‡] ์ถœ๋ ฅ๋œ๋‹ค.

1-2. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ•

: ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•ด์ฒดํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” JavaScript ํ‘œํ˜„์‹

  const [state, setState] = useState(0);
  • state ์—๋Š” useState์˜ ๊ฐ’์ด ์ €์žฅ๋จ
  • setState ์—๋Š” state์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

โฌ†๏ธ ์œ„์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•  ๊ฒฝ์šฐ

(return ๋ฌธ ์•ˆ์— ์ž‘์„ฑ)
<h1>{state}</h1>

: ํ˜„์žฌ useState ์—๋Š” 0์ด ๋“ค์–ด๊ฐ€์žˆ๊ณ , state๋Š” useState์˜ ๊ฐ’์ด ์ €์žฅ๋˜๋ฏ€๋กœ 0 ์ด ์ถœ๋ ฅ๋œ๋‹ค.

๐Ÿ“ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ• ์‘์šฉ

1. ๋ฒ„ํŠผ์„ ํด๋ฆญํ• ๋•Œ๋งˆ๋‹ค state๊ฐ’์ด 1์”ฉ ์ฆ๊ฐ€ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ธฐ

const [state, setState] = useState(0);

return(
	<>
    	<h1>{state}</h1>
    	<button onClick={() => {
        	setState(state + 1);
     	 }}>
        	Click
      	</button>
    </>
)

2. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ON/OFF๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์ถœ๋ ฅํ•˜๊ธฐ

const [light, setLight] = useState("OFF");	โžก๏ธ ํ˜„์žฌ๊ฐ’ : off

return(
	<h1>{light}</h1>
    <button onClick{() => {
    	setLight(light === "ON"? "OFF" : "ON"	โžก๏ธ ๋ฐ˜๋ณต๋ฌธ (์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)
    }}>
    	Click
    </button>
)

๐Ÿ“ state๋ฅผ ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค ๊ฒฝ์šฐ

let light = "OFF";

return(
	<h1>{light}</h1>
    <button onClick{() => {
    	light = light === "ON"? "OFF" : "ON"
    }}>
    	Click
    </button>
)

light ๋ฅผ ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜์ง€์•Š๋Š”๋‹ค.

โœ… React ์ปดํฌ๋„ŒํŠธ๋Š” ์ผ๋ฐ˜ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ const [light, setLight] = useState("OFF"); ํ˜•์‹์˜ state ๊ฐ’์ด ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ๋งŒ ๋ฆฌ๋ Œ๋”๋ง์ด ๋œ๋‹ค.


๐Ÿ“ state ์ฃผ์˜ํ•  ์ 

  • ์ง์ ‘ state๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค โŒ โ†’ reRender ๋˜๋Š” ๋ณ€์ˆ˜๋Š” setLight ์ด ๋ถ€๋ถ„์ด๋ฏ€๋กœ light๋ฅผ ์ˆ˜์ •ํ•ด๋ดค์ž reRender ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • state๋Š” ๋น„๋™๊ธฐ์ ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค โ†’ setState(state + 1) ๊ณ„์† ์ž…๋ ฅํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฒ„ํŠผ ํ•œ๋ฒˆ ๋ˆŒ๋ €์„ ๋•Œ ์ž…๋ ฅํ•œ ์ˆ˜๋Œ€๋กœ ์ฆ๊ฐ€๋˜์ง€์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋Ÿด ๊ฒฝ์šฐ setState((state) => state + 1); ์ฒ˜๋Ÿผ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€