All Articles

리액트 props와 state


리액트 컴포넌트에서 데이터는 “props”와 “state” 두 개로 나뉜다.

Props

부모 컴포넌트가 자식 컴포넌트에게 주는 값(자식이름의 태그를 사용)

  • 부모 —> 자식으로 내려줌

  • 자식 입장에서는 읽기 전용


1.클래스 를 통한 Props 구현 방법

// App.js (부모)
import React, { Component } from 'react';
import MyName from './MyName';

class App extends Component {
  render(){
    return (
      <MyName name="kingso" />
    );
  }
}

export default App;
// MyName.js (자식)
import React, { Component } from 'react';

class MyName extends Component {
  static defaultProps = {
    name: "default"
  }

  render(){
    return (
      <div>안녕하세요. 제 이름은 <b>{this.props.name}</b>입니다.</div>
    );
  }
}

export default MyName;

2.함수 를 통한 Props 구현 방법

// MyName.js (자식)
import React from 'react';

const MyName = ({ name }) => {
  return <div>안녕하세요! 제 이름은 <b>{name}</b>입니다.</div>
}

MyName.defaultProps = {
  name: "default2"
}

export default MyName;

State

자신의 컴포넌트 내부에 선언하고, 내부에서 값을 변경할 수 있다. 변경 시엔, 컴포넌트의 내장함수인 setState()를 사용한다.


1.클래스 를 통한 State 예제

// App.js (부모)
import React, { Component } from 'react';
import Counter from './Counter';

class App extends Component {
  render(){
    return (
      <Counter />
    );
  }
}

export default App;
// Counter.js (자식)
import React, { Component } from 'react';

class Counter extends Component {

  state = {
    number: 0
  }

  handlerIncrease = () => {
    this.setState({
      number: this.state.number + 1
    });
  }

  handlerDecrease = () => {
    this.setState({
      number: this.state.number - 1
    });
  }

  render(){
    return (
      <h2>카운터</h2>
      <div>: {this.state.number}</div>
      <button onClick={this.handlerIncrease}>+</button>
      <button onClick={this.handlerDecrease}>-</button>
    );
  }
}

export default Counter;

클래스형 컴포넌트 vs 함수형 컴포넌트

함수형 컴포넌트

  • 초기 마운트 속도가 아주 미세하게 좀 더 빠르다.

  • 불필요한 기능이 없기 떄문에, 메모리 자원도 덜 사용한다.

    • state, 라이프사이클 기능이 없다.

비구조화 할당 문법

비구조화 할당 문법 링크


참고 - https://velopert.com/3629