State & Event

quokkaยท2021๋…„ 10์›” 25์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
3/12
post-thumbnail

๐ŸŒˆ State์™€ Evnet์— ๋Œ€ํ•ด์„œ,,,

๐ŸŒ€ State

๐Ÿ‘‰ state : ์ƒํƒœ
๐Ÿ‘‰ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๊ฐ’
๐Ÿ‘‰ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ปดํฌ๋„ŒํŠธ์˜ UI์ •๋ณด๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋Š” ๊ฐ์ฒด
๐Ÿ‘‰ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒ€ State ๊ฐ์ฒด

๐Ÿ‘‰ classํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ 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๋ฌธ ์•ˆ์— ๋“ค์–ด๊ฐ€์žˆ๋‹ค.
โœ๏ธ render ํ•จ์ˆ˜ ์œ„์— constructorํ•จ์ˆ˜๋ฅผ ๋ณด์Ÿˆ
โœ๏ธ state๋ฅผ ์„ค์ •ํ•  ๋•Œ๋Š” ํ™”๋ฉด์— ๋ณด์ด๋“ฏ์ด constructorํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์„ค์ •ํ•œ๋‹ค.
โœ๏ธ constructor ํ•จ์ˆ˜๋Š” ์ปดํฌ๋„ŒํŠธ ์„ ์–ธ๋ฌธ๊ณผ renderํ•จ์ˆ˜ ์‚ฌ์ด์— ์ž‘์„ฑํ•œ๋‹ค.
โœ๏ธ constructor ๋ฉ”์†Œ๋“œ ์•ˆ์—๋Š” super()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
โœ๏ธ this.state๊ฐ’์— ์ปดํฌ๋„ŒํŠธ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ’์„ ์„ค์ •ํ•ด์ค€๋‹ค.

๐ŸŒ€ state ๊ฐ์ฒด

    this.state = {
      color: 'red'
    };

๐Ÿ‘‰ component๋Š” state ๊ฐ์ฒด์ด๋‹ค.
๐Ÿ‘‰ ๊ฐ์ฒด ์•ˆ์— key์ด๋ฆ„์€ ์›ํ•˜๋Š”๋Œ€๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ‘‰ key์ด๋ฆ„์„ ์ƒ‰ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ color๋กœ ์ง€์ •ํ–ˆ๋‹ค.
๐Ÿ‘‰ color์˜ key๊ฐ’์œผ๋กœ red๋ฅผ value๋กœ ์ง€์ •ํ–ˆ๋‹ค.

State ์‚ฌ์šฉ ์˜ˆ์‹œ

๐Ÿ‘‰ return ๋ฌธ ์•ˆ์— <h1> ํƒ€์ดํ‹€ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ‘‰ ํ•ด๋‹น ์š”์†Œ์˜ ๊ธ€์ž ์ƒ‰์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์„ค์ •ํ•œ state ๊ฐ’์œผ๋กœ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ,
๐Ÿ‘‰ ๋‹ค์Œ์˜ ์ˆœ์„œ๋Œ€๋กœ state ๊ฐ’์„ ํŠน์ • ์š”์†Œ์—์„œ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ‘‰ ์šฐ์„  JSX ์š”์†Œ์— ์ธ๋ผ์ธ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ๊ทธ ์ค‘์—์„œ๋„ ๊ธ€์ž์ƒ‰์„ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

```jsx
<h1 style={{ color:  }}>Class Component | State</h1>
```

๐Ÿ‘‰ dot notation์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด(state)์˜ ํŠน์ • key(color) ๊ฐ’์— ์ ‘๊ทผํ•˜์—ฌ ๊ทธ ๊ฐ’์„ color ์†์„ฑ์˜ value๋กœ ์ง€์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

```jsx
<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;

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

profile
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๋งค์ผ๋งค์ผ์ด ๊ธฐ๋Œ€๋˜๋Š” ๊ฐœ๋ฐœ์ž ^^

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