[React] (2) props & state

React Basic - (2) props & state

React Component 의 Data

  1. props : 부모 Component → 자식 Component로 전달하는 값. 자식 Component에서는 props 값을 변경할 수 없다.
  2. state : Component 내부에서 선언하며, state 값 변경 가능

props 다루기 - 클래스형 컴포넌트 & defaultProps

Myname.js

import React, {Component} from 'react';

class Myname extends Component {
    // props 값을 기본 지정할 수 있음. (누락 방지) - (1)
    static defaultProps = {
        name : "default"
    }
    render () {
        return (
        <div>My name is <b>{this.props.name}</b></div> 
        );
    }
}
export default Myname;

App.js

class App extends Component {
    render() {
      return (
        <Myname name="리액트"></Myname>
      );
    }
}
// props 값을 기본 지정할 수 있음. (누락 방지) - (2)
Myname.defaultProps = {
  name : 'default'
};

export default App;

props 다루기 - 함수형 컴포넌트

Myname.js

// 함수형 컴포넌트로 간단하게 작성 가능
const Myname = ({name}) => {
    return (
        <div>My name is {name}</div>  
    );
}
export default Myname;

State 다루기

state : 동적인 data를 다룰 때 사용됨.

Counter.js

import react, {Component} from 'react';

class Counter extends Component {
    // Component의 state를 정의할 때는 class field를 사용함
    state = {
        number : 0
    }
    // Component에 method 작성
    handleIncrease = () => {
        this.setState({
            number: this.state.number +1
        });
    }
    handleDecrease = () => {
        this.setState({
            number : this.state.number -1;
        });
    }

    // handleIncrease() {
    //     this.setState({
    //       number: this.state.number + 1
    //     });
    //   }
    // // 이렇게 작성한 경우, this가 undefined라고 인식됨 : 
    // => 화살표 함수를 사용하여 함수명에 () 익명함수를 할당해야 함

    render() {
        return (
            <div>
                <h1>Counter : </h1>
                <div>Value : {this.state.number}</div>
                <button onClick={this.handleIncrease}>+</button>
                <button onClick={this.handleDecrease}>-</button>
            </div>
        )
    }
}
export default Counter;

App.js

return (
        <Fragment>
            <Myname name="리액트"></Myname>
            <Counter></Counter>
        </Fragment>
      );

SetState

state 값을 변경하기 위해 반드시 거쳐야 하는 함수.

SetState() 괄호 안에 전달되는 객체만 업데이트 됨.

  • Variation
// 1.
this.setState({
    number: this.state.number + 1
});

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

// 3. 비구조화 할당 문법
this.setState(({number}) => ({
    number: number + 1
}));
handleIncrease = () => {
    const { number } = this.state;
    this.setState({
      number: number + 1
    });
  }

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

React에서 이벤트 함수 설정 시 주의사항 !

  1. onClick 과 같은 이벤트 이름은 camelCase 방식으로 작성해야 한다.
  2. 이벤트에 전달하는 값은 함수여야 한다.

    onClick={this.handleIncrease()} 이 아니라,

    onClick={this.handleIncrease} 형태로 작성해야 함 !