[TIL] React State

๋Œ€๋นตยท2023๋…„ 11์›” 2์ผ

State

๐Ÿ’ก State๋ž€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.(์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด State๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์€ UI๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.)

State ๋งŒ๋“ค๊ธฐ

๐Ÿ’ก State๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” useState()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

useState ํ›…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

const [ value, setValue ] = useState( ์ดˆ๊ธฐ๊ฐ’ )

๋จผ์ € const ๋กœ ์„ ์–ธ์„ ํ•˜๊ณ  [ ] ๋นˆ ๋ฐฐ์—ด ์„ ์ƒ์„ฑํ•˜๊ณ , ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ์—๋Š” ์ด state์˜ ์ด๋ฆ„, ๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ ์ž๋ฆฌ์—๋Š” set ์„ ๋ถ™์ด๊ณ  state์˜ ์ด๋ฆ„์„ ๋ถ™์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  useState( ) ์˜ ์ธ์ž์—๋Š” ์ด state์˜ ์›ํ•˜๋Š” ์ฒ˜์Œ๊ฐ’ ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

State ๋ณ€๊ฒฝํ•˜๊ธฐ

๐Ÿ’ก state๋ฅผ ๋ณ€๊ฒฝํ• ๋•Œ๋Š” `setValue(๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฐ’)` ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

state๋ž€ ์ปดํฌ๋„ŒํŠธ์•ˆ์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ์ž…๋‹ˆ๋‹ค.

(์‘์šฉ1) useState + onClick Event

1) Button๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๊ตฌํ˜„ํ•˜๊ธฐ

button์—์„œ๋Š” ๋ณดํ†ต ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ state๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด

// src/App.js

import React from "react";

function App() {

  return (
    <div>
      <button>๋ฒ„ํŠผ</button>
    </div>
  );
}

export default App;

์ด ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ•˜๊ณ  ์‹ถ์€ ํ–‰๋™์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด onClickHandler ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  onClick={} ์— ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

React์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜์™€ ์ปดํฌ๋„ŒํŠธ(button ํƒœ๊ทธ)๋ฅผ ์—ฐ๊ฒฐ์‹œํ‚ต๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋ฅผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์— console.log("hello button"); ๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ์ฝ˜์†”์„ ๋ด…์‹œ๋‹ค.

๋งŒ๋“  ํ•จ์ˆ˜๋กœ ์ธํ•ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ ๋งˆ๋‹ค ์ฝ˜์†”์— hello button ์ด ์ฐํžˆ๋Š” ๊ฒƒ์ด ๋ณด์ž…๋‹ˆ๋‹ค.

import React from "react";

function App() {
  // ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ•˜๊ณ  ์‹ถ์€ ํ–‰๋™ 
  function onClickHandler() {
    console.log("hello button");
  }
  return (
    <div>
      <button onClick={onClickHandler}>๋ฒ„ํŠผ</button>
    </div>
  );
}

export default App;

2) state ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ

์šฐ์„  state๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญ์„ ํ–ˆ์„ ๋•Œ state ๊ฐ’์„ ๋ฐ”๊ฟ”๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ทธ ์•ˆ์— setName ์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

์ด์ œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด setName()์•ˆ์— ์žˆ๋Š” ๊ฐ’์ด โ€œ๋Œ€๋นต์ดโ€๋‹ˆ๊นŒ, state๊ฐ€ โ€œ์–ด๋จธ์–ด๋จธ"์—์„œ โ€œ๋Œ€๋นต์ดโ€๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค!

import React, { useState } from "react";

function App() {
  const [name, setName] = useState("์–ด๋จธ์–ด๋จธ");

  function onClickHandler() {
    setName("๋Œ€๋นต์ด");
  }

  return (
    <div>
      {name}
      <button onClick={onClickHandler}>๋ฒ„ํŠผ</button>
    </div>
  );
}

export default App;

(์‘์šฉ2) useState + onChange Event

1) Input๊ณผ state ๊ตฌํ˜„ํ•˜๊ธฐ

input์—์„œ๋Š” ๋ณดํ†ต ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ state๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด

import React, { useState } from "react";

const App = () => {
  const [value, setValue] = useState("");

  return (
    <div>
      <input type="text" />
    </div>
  );
};

export default App; 

input๊ณผ useState๋ฅผ ์‚ฌ์šฉํ•ด์„œ input์˜ ๊ฐ’์„ ๋„ฃ์„ value๋ผ๋Š” state๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋Š” function keyword๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, function ํ‚ค์›Œ๋“œ ๋ชจ๋‘ ๋˜‘๊ฐ™์ด ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

2) ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  state์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ

input๊ณผ ์ƒ์„ฑํ•œ state(value)๋ฅผ ์—ฐ๊ฒฐํ•ด๋ณผ๊ฒŒ์š”.

๋จผ์ € input์— onChange๋ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ถˆ๋Ÿฌ๋‚ด๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.

import React, { useState } from "react";

const App = () => {
  const [value, setValue] = useState("");

  const onChangeHandler = (event) => {
    const inputValue = event.target.value;
    setValue(inputValue);
  };

	console.log(value) // value๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ํ•œ๋ฒˆ ์ฝ˜์†”๋กœ ๋ณผ๊นŒ์š”?

  return (
    <div>
      <input type="text" onChange={onChangeHandler} value={value} />
    </div>
  );
};

export default App;

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์•ˆ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ event ๊ฐ์ฒด๋ฅผ ๊บผ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ input์˜ ๊ฐ’์€ event.target.value ๋กœ ๊บผ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ state์ธ value๋ฅผ input์˜ attribute์ธ value์— ๋„ฃ์–ด์ฃผ๋ฉด input๊ณผ state ์—ฐ๊ฒฐํ•˜๊ธฐ, ๋ ์ž…๋‹ˆ๋‹ค!

๊ฒฐ๋ก 

React๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉด์„œ JavaScirpt๋ž‘์€ ๋น„์Šทํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋А๋‚Œ์„ ๋ฐ›์•˜๋‹ท..!!

React์˜ ์ œ์ผ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์—ฌ์„œ ํ”„๋กœ์ ํŠธ๋“ค ์‹œ์ž‘ํ•˜๋‹ค๋ณด๋ฉด ๋” ์ต์ˆ™ํ•ด ์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋งŽ์ด ์—ฐ์Šตํ•ด๋ด์•ผํ•  ๊ฑฐ ๊ฐ™๋‹ค.

์ œ์ผ ์ค‘์š”ํ•œ ๊ธฐ๋ณธ ํ‹€!!

const [state, setState] = useState(์ดˆ๊ธฐ๊ฐ’ | ๋ฐฐ์—ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค)

React๊ณต์‹ ํ™ˆํŽ˜์ด์ง€

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