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

Frontend Dev/React

React state์™€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๋Š” useState

๋ฐ˜์‘ํ˜•

๐Ÿ‘พ state๋ž€?

 • state๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’, ์ฆ‰ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 • React ์ปดํฌ๋„ŒํŠธ๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒˆ๋กญ๊ฒŒ ํ˜ธ์ถœ๋˜๊ณ , ๋ฆฌ๋ Œ๋”๋ง ๋œ๋‹ค. (UI๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋จ)

 • state๋Š” props์ฒ˜๋Ÿผ App ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฌผ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ง€๋งŒ, props๋Š” (ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ฒ˜๋Ÿผ) ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋˜๋Š” ๋ฐ˜๋ฉด state๋Š” (ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ) ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค. ์ฆ‰, props๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€์ž๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๊ณ , state๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋‚ด๋ถ€์ž๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ์ด๋‹ค.

 


 

๐Ÿ‘พ useState

import { useState } from 'react'; // useState ํ˜ธ์ถœ

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

state ์ƒํƒœ ์œ ์ง€ ๊ฐ’

setState ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜

initialState ์ดˆ๊ธฐ๊ฐ’

 

โœ”๏ธ useState ๋ถ„ํ•ด

const [mode, setMode] = useState("init");
console.log(mode); // init
console.log(setMode) // state ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” function
/* useState๋Š” ์ฃผ๋กœ ์ด ํ˜•ํƒœ๋กœ(๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น) ์‚ฌ์šฉํ•œ๋‹ค. 
init์€ ์ดˆ๊ธฐ๊ฐ’, mode๋Š” state์˜ ๊ฐ’์„ ์ฝ๊ณ , setMode๋Š” state์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค. */

----- useState ๋ถ„ํ•ด -----
// useState๋Š” ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๊ณ , 
// 0๋ฒˆ์งธ ์š”์†Œ๋Š” ์ƒํƒœ์˜ ๊ฐ’์„ ์ฝ์„ ๋•Œ ์“ฐ๋Š” ๋ฐ์ดํ„ฐ(ํ˜„์žฌ state์˜ ๋ณ€์ˆ˜), 
// 1๋ฒˆ์งธ ์š”์†Œ๋Š” ์ƒํƒœ์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. 

const _mode = useState("init") // useState์˜ ์ธ์ž๋Š” state์˜ ์ดˆ๊ธฐ๊ฐ’
const mode = _mode[0]; // state์˜ ๊ฐ’์„ ์ฝ์Œ
const setMode = _mode[1]; // state์˜ ๊ฐ’์„ ๋ฐ”๊ฟˆ
-------------------------

 

โœ”๏ธ useState ์˜ˆ์ œ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป example 1

function Checkbox() {
  const [isChecked, setIsChecked] = useState(false);

  const handleChecked = (e) => {
    console.log("clicked");
    setIsChecked(e.target.checked)
  }

  return (
    <div>
      <input type="checkbox" checked={isChecked} onChange={handleChecked} />
      <span>{isChecked ? "Checked" : "Unchecked"}</span>
    </div>
  )
}

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป example 2

function App() {
  const [name, setName] = useState("Mike");

  return (
      <div>
          <h1>state</h1>
          <h2>{name}</h2>
          <button onClick={() => {
              setName(name === "Mike" ? "Elle" : "Mike");
          }}>chnage</button>
      </div>
  )
}

 

๐Ÿ‘พ ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ(Lifting State Up)

↓ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์— ์˜ˆ์‹œ๊ฐ€ ์ž˜ ๋‚˜์™€์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ปดํฌ๋„ŒํŠธ ๊ฐ„ State ๊ณต์œ ํ•˜๊ธฐ – React

The library for web and native user interfaces

ko.react.dev

 ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋ผ๋Š” ์›์น™์— ๋”ฐ๋ผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ ํ˜น์€ ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€๋งŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ state๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€, ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์ž…๋ ฅํ•œ ๋‚ด์šฉ์ธ์ง€๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ ์–ด๋–ค ์ด๋ฒคํŠธ๋กœ ์ธํ•ด ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ๋งˆ์น˜ “์—ญ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„”๊ณผ ๊ฐ™์ด ์ด์ƒํ•˜๊ฒŒ ๋“ค๋ฆด ์ˆ˜ ์žˆ๋‹ค. React๊ฐ€ ์ œ์‹œํ•˜๋Š” ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ “์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜” ๊ทธ ์ž์ฒด๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๊ณ , ์ด ํ•จ์ˆ˜๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹คํ–‰ํ•œ๋‹ค.

 ์ด๊ฒƒ์ด ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ์ด๋‹ค.

 

โœ”๏ธ ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ๋ฐฉ๋ฒ•

  1. state๋ฅผ ๊ณตํ†ต ๋ถ€๋ชจ๋กœ ์ด๋™

  2. ๊ณตํ†ต ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ props๋ฅผ ํ†ตํ•ด ์ •๋ณด ์ „๋‹ฌ

  3. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•ด ์ž์‹์—์„œ ๋ถ€๋ชจ์˜ state๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„

 

 

์ถœ์ฒ˜: ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ

 → state๋ฅผ ๊ณตํ†ต ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ๋‘ ํŒจ๋„์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. true์™€ false๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ฒƒ ๋Œ€์‹  ํ™œ์„ฑํ™”๋œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํŒจ๋„๋งŒ ํ™œ์„ฑํ™”๋จ์„ ๋ณด์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ€๋ชจ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

 


โœ๏ธ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ •๋ณด๋‚˜ ๋” ๊ณต์œ ํ•  ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”!

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜Š

 

 

๋ฐ˜์‘ํ˜•