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

[React] State & Event

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 11. 18.
๋ฐ˜์‘ํ˜•

๐Ÿท State

'์ƒํƒœ'๋ผ๋Š” ๋œป.

์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๊ฐ’.
ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ปดํฌ๋„ŒํŠธ์˜ UI ์ •๋ณด(์ƒํƒœ)๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด.

  • State๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉฐ ์–ผ๋งˆ๋“ ์ง€ ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.
  • State๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋  ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋˜๊ณ  ์šฐ๋ฆฌ๋Š” ์ด State๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™”์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • State๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” setState ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • class ์ปดํฌ๋„ŒํŠธ์—์„œ State๋ฅผ ์“ธ๋•Œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ํ˜•ํƒœ๊ฐ€ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— this.state๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด ๋”์šฑ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค!.. ๊ณ  ํ•œ๋‹ค.



 

๐Ÿท State ๊ฐ์ฒด

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ State, ์ฆ‰ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•˜๋Š”์ง€ ์‚ดํŽด ๋ณด์ž!

 

 

๐Ÿ‘‡๐Ÿป Class component | state

import React from 'react';

class State extends React.Component {
  constructor() {
    super();
    this.state = {
      color: 'red'
    };
  }

  render() {
    return (
      <div>
        <h1>Class Component | State</h1>
      </div>
    );
  }
}

export default State;
  • Classํ˜• ์ปดํฌ๋„ŒํŠธ ์•ˆ์—๋Š” ํ•„์ˆ˜์ ์œผ๋กœ render ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๊ณ , ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ์€ JSX ์š”์†Œ๊ฐ€ return๋ฌธ ์•ˆ์— ๋“ค์–ด์žˆ๋‹ค.
  • State๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” constructor ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์„ค์ •ํ•œ๋‹ค.
  • constructor ํ•จ์ˆ˜๋Š” ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ๋ฌธ(class State extends Component)๊ณผ render ํ•จ์ˆ˜ ์‚ฌ์ด์— ์ž‘์„ฑํ•œ๋‹ค.
  • constructor ๋ฉ”์†Œ๋“œ ์•ˆ์—๋Š” super()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๊ทธ ๋‹ค์Œ์—๋Š” this.state ๊ฐ’์— ์ปดํฌ๋„ŒํŠธ์˜ ์ดˆ๊ธฐ ์ƒํƒœ ๊ฐ’์„ ์„ค์ •ํ•ด ์ค€๋‹ค.

 

 

๐Ÿ‘‡๐Ÿป state ๊ฐ์ฒด

 this.state = {
   color: 'red'
 };
  • ์ปดํฌ๋„ŒํŠธ์˜ State๋Š” ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ •์˜ํ•œ๋‹ค.
  • ๊ฐ์ฒด ์•ˆ์˜ key ์ด๋ฆ„์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.



 

๐Ÿท State ์‚ฌ์šฉ ์˜ˆ์‹œ

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

<h1 style={{ color:  }}>Class Component | State</h1>
<h1 style={{ color: this.state.color  }}>Class Component | State</h1>

// this : ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ
// this.state : ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ state ๊ฐ์ฒด
// this.state.color : state ๊ฐ์ฒด์˜ ํŠน์ • key(color)๊ฐ’. ์ฆ‰ "red"



 

๐Ÿท Event & setState

import React, { Component } from 'react';

class State extends Component {
  constructor() {
    super();
    this.state = {
      color: 'red',
    };
  }

  handleColor = () => {
    this.setState({
      color: 'blue'
    })
  }

  render() {
    return (
      <div>
        <h1 style={{ color: this.state.color }}>Class Component | State</h1>
        <button onClick={this.handleColor}>Click</button>
      </div>
    );
  }
}

export default State;

๐Ÿ‘‰๐Ÿป ๋‹ค์Œ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

  • <button> ์š”์†Œ์—์„œ onClick ์ด๋ฒคํŠธ ๋ฐœ์ƒ
  • this.handleColor, ์ฆ‰ ํ˜„์žฌ ์ปดํฌ๋„ŒํŠธ(State)์˜ handleColor ํ•จ์ˆ˜ ์‹คํ–‰
  • handleColor ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ setState ํ•จ์ˆ˜ ์‹คํ–‰ - State์˜ color ๊ฐ’์„ 'blue' ๋กœ ๋ณ€๊ฒฝ
  • render ํ•จ์ˆ˜ ํ˜ธ์ถœ
  • ๋ฐ”๋€ State ๊ฐ’์„ ๋ฐ˜์˜ํ•˜์—ฌ <h1> ํƒœ๊ทธ ๊ธ€์ž ์ƒ‰์ƒ ๋ณ€๊ฒฝ
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€