State, Props, Event

kirin.logΒ·2021λ…„ 1μ›” 24일
0

βœ… State & Event
πŸ‘‰ State 객체

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

πŸ‘‰ Classν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ state 객체, 즉 ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ₯Ό μ–΄λ–»κ²Œ μ •μ˜ ν•˜λŠ”κ°€?

import React from 'react';   

class Practice extends React.Component {
  constructor() {     // constructor() { } ν•¨μˆ˜ μ„ μ–Έ(μœ„μΉ˜ μœ μ˜ν•˜κΈ°)
    super();
    this.state = {    // μ»΄ν¬λ„ŒνŠΈμ˜ μ΄ˆκΈ°κ°’ μ„€μ •, μ»΄ν¬λ„ŒνŠΈμ˜ stateλŠ” 객체이닀.
      color: 'red'    // 객체 μ•ˆμ— 'ν‚€:κ°’' ν˜•νƒœμ˜ μ΄ˆκΈ°κ°’μ΄ λ‹΄κ²¨μžˆλ‹€
    };
  }

  render() {     // μ΄ν•˜ ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈ μ•ˆμ˜ ν•„μˆ˜μš”μ†Œ(render ν•¨μˆ˜, returnλ¬Έ μ•ˆμ˜ JSX μš”μ†Œ)
    return (
      <div>
        <h1> Hello! </h1>
      	<main>
      	   <p style={{ color: this.state.color }}>I like blue </p>
          // pνƒœκ·Έ 객체(state)의 νŠΉμ • key(color) 값에 μ ‘κ·Όν•˜μ—¬ κ·Έ 값을 color μ†μ„±μ˜ value둜 지정 (μ€‘κ΄„ν˜Έ 2번 겹치기 유의)
          // this.state.color둜 μ •μ˜ν•˜μ—¬ constructor ν•¨μˆ˜μ˜ 킀값을 적용(ν•΄λ‹Ή μš”μ†Œμ˜ κΈ€μž 색을 μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ„€μ •ν•œ state κ°’μœΌλ‘œ ν•˜κ³  싢은 경우)
      	</main>
      </div>
    );
  }
}

export default State;

❗ stateλ₯Ό μ„€μ •ν•  λ•ŒλŠ” constructorΒ ν•¨μˆ˜λ₯Ό μž‘μ„± ν›„ κ·Έ μ•ˆμ— μ„€μ •.
❗ constructor ν•¨μˆ˜λŠ” μ»΄ν¬λ„ŒνŠΈ μ„ μ–Έλ¬Έ(class State extends Component)κ³Ό render ν•¨μˆ˜ 사이에 μž‘μ„±. μœ„μΉ˜ 유의!!
➑ constructor ν•¨μˆ˜μ™€ μ»΄ν¬λ„ŒνŠΈκ°€ 잘 μ—°κ²°λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ render() μœ„μ—μ„œ console.log 찍어보기
❗ constructor λ©”μ†Œλ“œ μ•ˆμ—λŠ”Β super()λ₯Ό 호좜.
❗ this.state 값에 μ»΄ν¬λ„ŒνŠΈμ˜ 초기 μƒνƒœκ°’μ„ μ„€μ •.

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

βœ… Event & setState
πŸ‘‰ State 객체

  • state 객체에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό μ‹€ν–‰ν•œλ‹€. stateκ°€ λ³€κ²½λ˜λ©΄, μ»΄ν¬λ„ŒνŠΈλŠ” λ¦¬λ Œλ”λ§λœλ‹€.

πŸ‘‰ setStateλ₯Ό 톡해 Event μ μš©ν•˜λŠ” 방법

import React from 'react';   

class Practice extends React.Component {
  constructor() {         // constructor() { } ν•¨μˆ˜ λ‚΄ μ»΄ν¬λ„ŒνŠΈμ˜ μ΄ˆκΈ°κ°’ μ„€μ •
    super();
    this.state = {    
      color: 'red'    
    };
  }

  handleColor = () => {   // this.handleColor, 즉 ν˜„μž¬ μ»΄ν¬λ„ŒνŠΈ(State)의 handleColor ν•¨μˆ˜ μ‹€ν–‰
    this.setState({
      color: 'blue'
    })
  }

  render() {     
    return (
      <div>
        <h1> Hello! </h1>
      	<main>
      	   <p style={{ color: this.state.color }}>I like blue </p>
           // button μš”μ†Œ μΆ”κ°€ 및 onClick 이벀트 적용
           <button onClick={this.handleColor> Click </button>
           // handleColor ν•¨μˆ˜ μ‹€ν–‰ μ‹œ setState ν•¨μˆ˜ μ‹€ν–‰ ➑ state의 color 값을 'blue' 둜 λ³€κ²½
      	</main>
      </div>
    );
  }
}

export default State;

❗ μ½”λ“œ μ‹€ν–‰ μˆœμ„œ
πŸ”Έ JSX λ‚΄ <button> μš”μ†Œμ—μ„œ onClick 이벀트 λ°œμƒ
πŸ”Έ this.handleColor (=ν˜„μž¬ μ»΄ν¬λ„ŒνŠΈμΈ state의 handlerColor ν•¨μˆ˜) μ‹€ν–‰
πŸ”Έ handleColor ν•¨μˆ˜ μ‹€ν–‰ μ‹œ, setState ν•¨μˆ˜ μ‹€ν–‰ ➑ state의 color값을 blue둜 λ³€κ²½
πŸ”Έ render ν•¨μˆ˜ 호좜

🍧 JSX ν•¨μˆ˜λ₯Ό 읽어내렀 κ°€λ©΄μ„œ 지정 ν•¨μˆ˜λ₯Ό 마주치면, ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ°Ύμ•„ μ˜¬λΌκ°€μ„œ μ‹€ν–‰. 즉 re-renderλœλ‹€.
(값이 redμ˜€μ„ λ•Œ(<p>νƒœκ·Έ) render, 값이 blueμ˜€μ„ λ•Œ(<button>νƒœκ·Έ) re-render)

profile
boma91@gmail.com

0개의 λŒ“κΈ€