State 🐾

Bonnie RyuΒ·2020λ…„ 11μ›” 10일
0

차근차근 React 🐾

λͺ©λ‘ 보기
4/10
post-custom-banner

1. State

  • state : μƒνƒœ
  • 단어 뜻 κ·ΈλŒ€λ‘œ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ 가지고 μžˆλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœκ°’ 으둜 이해
  • stateλŠ” 화면에 보여쀄 μ»΄ν¬λ„ŒνŠΈμ˜ 정보(μƒνƒœ)λ₯Ό μ§€λ‹ˆκ³  μžˆλŠ” 객체
  • stateλŠ” μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œ μ •μ˜ν•˜κ³  μ‚¬μš©ν•˜λ©° μ–Όλ§ˆλ“ μ§€ 데이터(객체)κ°€ 변경될 수 μžˆλ‹€.

2. 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;
  • ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—λŠ” ν•„μˆ˜μ μœΌλ‘œ render ν•¨μˆ˜κ°€ ν•„μš”ν•˜κ³  화면에 λ‚˜νƒ€λ‚΄κ³  싢은 JSX μš”μ†Œκ°€ returnλ¬Έ μ•ˆμ— μœ„μΉ˜ν•œλ‹€.
  • render ν•¨μˆ˜ μœ„μ— constructor ν•¨μˆ˜λ₯Ό μ‚΄νŽ΄λ³΄μž.
  • stateλ₯Ό μ„€μ •ν•  λ•ŒλŠ” 화면에 보이듯이 constructor ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ—¬ μ„€μ •ν•œλ‹€.
  • constructor ν•¨μˆ˜λŠ” μ»΄ν¬λ„ŒνŠΈ μ„ μ–Έλ¬Έ(class State extends Component)κ³Ό render ν•¨μˆ˜ 사이에 μž‘μ„±ν•œλ‹€.
  • 그리고 constructor λ©”μ†Œλ“œ μ•ˆμ—λŠ” super()λ₯Ό ν˜ΈμΆœν•œλ‹€.
  • κ·Έ λ‹€μŒμ—λŠ” this.state 값에 μ»΄ν¬λ„ŒνŠΈμ˜ 초기 μƒνƒœκ°’μ„ μ„€μ •ν•΄ μ€€λ‹€.

state 객체

    this.state = {
      color: 'red'
    };
  • μ»΄ν¬λ„ŒνŠΈμ˜ stateλŠ” 객체!
  • 객체 μ•ˆμ˜ key 이름은 μ›ν•˜λŠ”λŒ€λ‘œ μ„€μ •ν•  수 μžˆλ‹€.
  • μ—¬κΈ°μ„œλŠ” 색 정보λ₯Ό 담은 데이터λ₯Ό λ‹΄κΈ° μœ„ν•΄ key 이름을 color둜 μ§€μ •ν•˜μ˜€λ‹€.
  • color key의 κ°’μœΌλ‘œ β€œred” λ₯Ό value둜 μ§€μ •ν•˜κ² λ‹€.

:: μ»΄ν¬λ„ŒνŠΈμ˜ stateλŠ” μ΄λ ‡κ²Œ 객체 ν˜•νƒœλ‘œ μ •μ˜ν•œλ‹€. κ·Έλ ‡λ‹€λ©΄ μ΄λ ‡κ²Œ μ»΄ν¬λ„ŒνŠΈμ˜ stateλ₯Ό μ„€μ •ν•˜κ³  무엇을 ν•  수 μžˆλŠ” κ±ΈκΉŒμš”? μ™œ 이런 μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœκ°’μ΄ ν•„μš”ν•œ κ±ΈκΉŒμš”? λ‹€μŒμœΌλ‘œ μ‹€μ œ stateκ°€ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ μ˜ˆμ‹œλ₯Ό 톡해 μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž.

3. State μ‚¬μš© μ˜ˆμ‹œ

state μ—μ„œ μƒνƒœκ°’μ„ μ„€μ •ν•˜λŠ” μ΄μœ λŠ” κ²°κ΅­ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ˜ μš”μ†Œμ—μ„œ κ·Έ μƒνƒœκ°’μ„ λ°˜μ˜ν•΄μ„œ 데이터가 λ°”λ€” λ•Œλ§ˆλ‹€ 효율적으둜 ν™”λ©΄(UI)에 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•¨μ΄λ‹€.

import React, { Component } from 'react';

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

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

export default State;
  • return λ¬Έ μ•ˆμ— <h1> 타이틀 μš”μ†Œκ°€ μžˆλ‹€.

  • ν•΄λ‹Ή μš”μ†Œμ˜ κΈ€μž 색을 μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ„€μ •ν•œ state κ°’μœΌλ‘œ ν•˜κ³  싢은 경우,

  • λ‹€μŒμ˜ μˆœμ„œλŒ€λ‘œ state 값을 νŠΉμ • μš”μ†Œμ—μ„œ λ°˜μ˜ν•  수 μžˆλ‹€.

  • μš°μ„  JSX μš”μ†Œμ— 인라인 μŠ€νƒ€μΌμ„ μ μš©ν•˜κΈ° μœ„ν•΄, κ·Έ μ€‘μ—μ„œλ„ κΈ€μžμƒ‰μ„ μ„€μ •ν•΄μ£ΌκΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같이 μž‘μ„±ν•œλ‹€.

     <h1 style={{ color:  }}>Class Component | State</h1>
  • dot notation을 μ‚¬μš©ν•˜μ—¬ 객체(state)의 νŠΉμ • key(color) 값에 μ ‘κ·Όν•˜μ—¬ κ·Έ 값을 color μ†μ„±μ˜ value둜 μ§€μ •ν•΄μ£Όμ—ˆλ‹€.

      <h1 style={{ color: this.state.color  }}>Class Component | State</h1>
     
      // this : ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈ
      // this.state : ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ state 객체
      // this.state.color : state 객체의 νŠΉμ • key(color)κ°’. 즉 "red"

:: μœ„μ˜ μ˜ˆμ‹œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄, stateμ—μ„œ μƒνƒœκ°’μ„ μ„€μ •ν•˜λŠ” μ΄μœ λŠ” κ²°κ΅­ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ˜ μš”μ†Œμ—μ„œ κ·Έ μƒνƒœκ°’μ„ λ°˜μ˜μ—μ„œ ν™”λ©΄(UI)에 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•¨μΈκ²ƒμ„ κΈ°μ–΅!!

4. Event & setState

import React, { Component } from 'react';

export 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;
  • <h1> νƒœκ·Έ μ•„λž˜μ— <button> μš”μ†Œλ₯Ό μΆ”κ°€ν•˜μ˜€λ‹€.
  • λ‹€μŒμ˜ μˆœμ„œμ— λ”°λΌμ„œ μ½”λ“œκ°€ μ‹€ν–‰λœλ‹€.
    • <button> μš”μ†Œμ—μ„œ onClick 이벀트 λ°œμƒ
    • this.handleColor , 즉 ν˜„μž¬ μ»΄ν¬λ„ŒνŠΈ(State)의 handleColor ν•¨μˆ˜ μ‹€ν–‰
    • handleColor ν•¨μˆ˜ μ‹€ν–‰ μ‹œ setState ν•¨μˆ˜ μ‹€ν–‰ - state의 color 값을 'blue' 둜 λ³€κ²½
    • render ν•¨μˆ˜ 호좜
    • 바뀐 state 값을 λ°˜μ˜ν•˜μ—¬ <h1> νƒœκ·Έ κΈ€μž 색상 λ³€κ²½
profile
Ryuwisdom
post-custom-banner

0개의 λŒ“κΈ€