์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

React : State, Props, Event

camille: 2024. 10. 20. 17:36

๐Ÿ“• Hook ์ด๋ž€?

React ์—์„œ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ Class๋ฅผ ์ด์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด,
state์™€, ์—ฌ๋Ÿฌ React ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“• Hook์˜ ํŠน์ง•

  • ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋„ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋Š” ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์™€ ๋‹ค๋ฅด๊ฒŒ, ๋ชจ๋“ˆ๋กœ ํ™œ์šฉํ•˜๊ธฐ๊ฐ€ ์‰ฌ์šฐ๋ฏ€๋กœ
    ์„œ๋กœ์˜ ์žฅ์ ์„ ์ „๋ถ€๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค
  • ์„ ํƒ์  ์‚ฌ์šฉ : ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ์ผ๋ถ€์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์•ˆ์—์„œ Hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹น์žฅ Hook์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • 100% ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ : Hook์€ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ฆฌ๋Š” ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.
  • Hook์€ ์•Œ๊ณ  ์žˆ๋Š” React ์ปจ์…‰์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Œ : ๋Œ€์‹ , Hook์€ prop, state, context, refs, lifecycle๊ณผ ๊ฐ™์€ React ๊ฐœ๋…์— ์ข€ ๋” ์ง๊ด€์ ์ธ API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • Hook์„ ํ†ตํ•ด์„œ ์„œ๋กœ ๋น„์Šทํ•œ ๊ฒƒ์„ ํ•˜๋Š” ์ž‘์€ ํ•จ์ˆ˜์˜ ๋ฌถ์Œ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ตฌ๋… ์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋กœ์ง) ๋˜, ์ด๋Ÿฌํ•œ ๋กœ์ง์˜ ์ถ”์ ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก Reducer๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ ์ง€์—ญ์ƒํƒœ ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ React : Hooks

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ Hook์˜ ์‚ฌ์šฉ

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
    const Test = (props) => {
    //์ด ์ž๋ฆฌ์— Hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    return <div />;
    }
  • ์ผ๋ฐ˜ ํ•จ์ˆ˜
    function Test(props){
    //์ด ์ž๋ฆฌ์— Hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    return <div />
    }

๐Ÿ‘‰ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” State๊ฐ€ ์—†๋Š” ์ปดํฌ๋„ŒํŠธ์ง€๋งŒ, Hook์ด State๋ฅผ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.
๐Ÿ‘‰ Hook์€ Class ์•ˆ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ“• State๋ž€?

state๋ฅผ ์ง์—ญํ•˜๋ฉด ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, ๊ทธ ๋œป ๊ทธ๋Œ€๋กœ ์ปดํฌ๋„ŒํŠธ์˜ UI์ •๋ณด๋ฅผ ๋งํ•œ๋‹ค. state๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉฐ ์–ผ๋งˆ๋“ ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ State : Function component

import React, { useState } from 'react';

function State() {
  const [color, setColor] = useState('red');

  return (
    <div>
      <h1>What is State?</h1>
    </div>
  );
}

export default State;
  • ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ์€ JSX์š”์†Œ๊ฐ€ return๋ฌธ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ,
    state๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ง€๋“ฏ์ด useStateํ•จ์ˆ˜๋ฅผ importํ•œ ํ›„์— ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • useState ํ•จ์ˆ˜๋Š” ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ๋ฌธ function State()๊ณผ return์‚ฌ์ด์— ์ž‘์„ฑํ•œ๋‹ค.
    useStateํ•จ์ˆ˜์— ์ดˆ๊ธฐ๊ฐ’ ('red')์„ ์ธ์ž๋กœ ๋„ฃ์–ด ํ˜ธ์ถœํ•˜๋ฉด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋Š” ์ƒํƒœ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๋ณ€์ˆ˜์ด๊ณ , ๋‘๋ฒˆ์งธ ์š”์†Œ๋Š” ์ƒํƒœ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ํ•จ์ˆ˜๋กœ, state๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜๋ฅผ color๋กœ ์ง€์ •ํ•˜๊ณ  color๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ setColor๋กœ ๊ทธ๋ฆฌ๊ณ  color์˜ ์ดˆ๊ธฐ ๊ฐ’์„ red๋กœ ์ •์˜ํ•œ๋‹ค.

๐Ÿ‘ฉ‍๐Ÿซ State ์‚ฌ์šฉ์˜ˆ์‹œ

state์—์„œ ์ƒํƒœ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ์ด๋‰ด๋Š” ๊ฒฐ๊ตญ ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ์š”์†Œ์—์„œ ๊ทธ ์ƒํƒœ ๊ฐ’์„ ๋ฐ˜์˜ํ•ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋งˆ๋‹ค ํšจ์œจ์ ์œผ๋กœ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.

<h1 style={{ color: color }}>Function Component | State</h1>

// key๊ฐ’ color๋Š” ์ƒ‰์ƒ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ
// value ๊ฐ’ color๋Š” useState ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ๊ฐ’์ธ 'red'๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜

return๋ฌธ์•ˆ์— h1ํƒ€์ดํ‹€ ์š”์†Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•ด๋‹น์š”์†Œ์˜ ๊ธ€์ž์ƒ‰์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์„ค์ •ํ•œ state๊ฐ’์œผ๋กœ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด state๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜, color๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ color ์†์„ฑ์˜ value๋กœ ์ง€์ •ํ•ด ์ค€๋‹ค.

๐Ÿ‘ฉ‍๐Ÿซ Event & state ๋ณ€๊ฒฝ

import React, { useState } from 'react';

function State() {
  const [color, setColor] = useState('red');

  return (
    <div>
      <h1 style={{ color: color }}>Function Component | State</h1>
      <button onClick={() => setColor('blue')}>Click</button>
    </div>
  );
}

export default State;

๐Ÿ“Œ useState

๐Ÿ“ State()

import React, { useState } from 'react';

function Test(){
  const [age, setAge] = useState(50);
  const [fruit, setFruit] = useState('apple');
  const [todos, setTodos] = useState({text: 'How to use Hooks'});
}

๐Ÿ“ React.Component

class Test extends React.Component{
  constructor(props){
    super(props);
    this.state = {
      age : 50,
      fruit : 'apple',
      todos : {text: 'How to use Hooks'},
    }
  }
}

๋‘ ๊ฐœ์˜ ์ฝ”๋“œ๋Š” ๋™์ผํ•œ ์ฝ”๋“œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‘ ์ฝ”๋“œ ๋ชจ๋‘ state์•ˆ์— age, fruit, todos๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์ƒ๊ฒผ๋‹ค. ๋‹ค๋ฅธ ์ ์€ state๋ฅผ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜์ด๋ฉฐ, ๊ธฐ์กด ์ฝ”๋“œ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” this.setState() ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ”๊ฟ”์ฃผ์—ˆ์ง€๋งŒ useState()๊ฐ™์€ ๊ฒฝ์šฐ๋Š” setState()์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ˜ƒ useState()

const [state๋ช…, setState๋ช…] = useState(์ดˆ๊ธฐ๊ฐ’)

React.Component state ์•ˆ์— ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„ ๋•Œ this.setState์— ๋“ค์–ด๊ฐ€์„œ this.state.age ์ด๋Ÿฐ์‹์œผ๋กœ ์ ‘๊ทผ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ useState๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜๋‹น ํ•˜๋‚˜์˜ setState๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ํŽธํ•˜๊ฒŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ“ Class Component

<button onClick={() => this.setState({count: this.state.count + 1})}>
  Click me
</button>

๐Ÿ“ Function Component

<button onClick={()=> this.setCount(count + 1)}>
  Click me 
</button>

-> class๋Š” state๊ฐ’์ด ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก ๋ณต์žกํ•˜๊ณ  ํ—ท๊น”๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ, fuction์€ ๋ณ€์ˆ˜๋งˆ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ์–ด์„œ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“• useEffect

๐Ÿ˜ƒ React Component์— componentDidMount์™€ componentDidUpdate์™€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ReactComponent์—์„œ๋Š” Side Effect ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
Side Effect : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜, ๊ตฌ๋…ํ•˜๊ธฐ, DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•ด์ฃผ๋Š” ํ–‰์œ„
useEffect Hook์— ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋ Œ๋”๋ง ์™„๋ฃŒ ํ›„, ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
componentDidMount์™€ componentDidUpdate์™€๋Š” ๋‹ค๋ฅด๊ฒŒ useEffect๋กœ ์ „๋‹ฌ๋œ ํ•จ์ˆ˜๋Š” ์ง€์—ฐ ์ด๋ฒคํŠธ ๋™์•ˆ์— ๋ ˆ์ด์•„์›ƒ ๋ฒ ์น˜์™€ ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•œ ํ›„ ์‹คํ–‰๋œ๋‹ค.

๋ฐ˜์‘ํ˜•