TIL39 - React State

์˜ค์ง€์ˆ˜ยท2021๋…„ 6์›” 25์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
22/26
post-thumbnail

๐Ÿ… Today's Goal

  • state์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • state๋ฅผ ์ด์šฉํ•ด์„œ UI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด state๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

State(์ƒํƒœ)

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

JavaScript์—์„œ๋Š” DOM์œผ๋กœ HTML์— ์ ‘๊ทผํ•ด์„œ ๋™์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ React์—์„œ๋Š” 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;
  • constructor() state๋ฅผ ์„ค์ •ํ•  ๋•Œ ์ž‘์„ฑํ•œ๋‹ค.
    • ์ด ์•ˆ์—๋Š” super()์™€ this.state ๊ฐ’์— ์ปดํฌ๋„ŒํŠธ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์„ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์™œ? ์ƒํƒœ๊ฐ’์„ ์„ค์ •ํ• ๊นŒ?

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

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 ์ด๋ฒคํŠธ ๋ฐœ์ƒ
  • ํ˜„์žฌ state์˜ handleColor ํ•จ์ˆ˜ ์‹คํ–‰
  • handleColor ํ•จ์ˆ˜ ์•ˆ์˜ setState ํ•จ์ˆ˜ ์‹คํ–‰ : state์˜ color ๊ฐ’์„ 'blue'๋กœ ๋ณ€๊ฒฝ
  • render ํ•จ์ˆ˜ ํ˜ธ์ถœ
  • ๋ฐ”๋€ state ๊ฐ’์„ ๋ฐ˜์˜ํ•˜์—ฌ h1 ํƒœ๊ทธ ๊ธ€์ž ์ƒ‰์ƒ ๋ณ€๊ฒฝ

React์—์„œ๋Š” state๋ฅผ ํ†ตํ•ด์„œ ์ž์‹ ์˜ UI๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
์ ˆ์ฐจ์ ์ด์ง€ ์•Š๊ณ  ํƒœ๊ทธ ์•ˆ์— ์„ ์–ธํ•˜์—ฌ ์ž๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋œ state๊ฐ€ ๋ฐ˜์˜๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ˜๋Ÿฌ๊ฐ„๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์ž!

โ—๏ธ ์ธ๋ผ์ธ ํƒœ๊ทธ๋ฅผ ์ง€์–‘ํ•˜์ž!

์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

React์—์„œ๋Š” ์„ค๊ณ„ ์ž์ฒด๊ฐ€ ๋‹จ๋ฐฉํ–ฅ์ด๋‹ค.

  • ํ•ญ์ƒ ์œ„->์•„๋ž˜, ๋ถ€๋ชจ->์ž์‹์œผ๋กœ ํ๋ฅธ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๊ฐ€๋Š” ์ด์œ ๋„ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  • ๋งŒ์•ฝ์— ์ž์‹ -> ๋ถ€๋ชจ, ํ˜•์ œ -> ํ˜•์ œ ๊ฐ„์—๋„ ํ๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋ฉด props๊ฐ€ ์–ด๋””์„œ ์™”๋Š”์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์–ด์„œ ์ถ”์ ์ด ์–ด๋ ค์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
profile
My Moto:: ๋‚ด ์Šค์Šค๋กœ์™€ ๋”๋ถˆ์–ด ์ฃผ๋ณ€์—๊ฒŒ๋„ ์ข‹์€ ์˜ํ–ฅ์„ ํ–‰์‚ฌํ•˜๋„๋ก ์ ๊ฒ€ & ๋…ธ๋ ฅ..!!

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