Jun 개발노트

ES6 없이 사용하는 React

November 08, 2020

Q1. 현재 Class 문법을 활용하여 잘 사용하고 있는데… 만약 Class가 없다면?

  1. create-react-class의 createReactClass를 활용
  2. class 문법 또한 컴파일 되면 객체로 변환하기 때문 상관없다.
  3. 사용하는 방법만 다를뿐, 만들어지는 결과나, 안의 속성은 같다.
//es6 
class Greeting extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

//var 
var createReactClass = require('create-react-class');
var Greeting = createReactClass({
  render: function() {
    return <h1>Hello, {this.props.name}</h1>;
  }
});

Q2. defaultProps는 어떻게 사용?

  1. es6에서도 class의 defaultProps의 속성에 접근해서 값을 할당한다.
  2. createReactClass에서는 getMethod와 비슷한 getDefaultProps를 정의
class Greeting extends React.Component {
  // ...
}

Greeting.defaultProps = {
  name: 'Mary'
};

var Greeting = createReactClass({
  getDefaultProps: function() {
    return {
      name: 'Mary'
    };
  },

  // ...

});

Q3. State 정의는?

  1. props와 비슷하게 getInitialState를 정의한다.
class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: props.initialCount};
  }
  // ...
}

var Counter = createReactClass({
  getInitialState: function() {
    return {count: this.props.initialCount};
  },
  // ...
});

Q4. 내부 method의 this 할당은?

  1. class Properties를 활용한다면, 쉽게 this를 바인딩 하지 않아도 된다.
  2. createReactClass의 내부 함수를 구현하므로 this는 createReactClass를 바라보기 때문에 this를 바인딩하지 않아도 된다.
class SayHello extends React.Component {
  constructor(props) {
    super(props);
    this.state = {message: 'Hello!'};
  }
  // 경고: 이 문법은 실험적입니다!
  // 화살표 함수를 통해 메서드를 바인딩합니다.
  handleClick = () => {
    alert(this.state.message);
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        Say hello
      </button>
    );
  }
}

var SayHello = createReactClass({
  getInitialState: function() {
    return {message: 'Hello!'};
  },

  handleClick: function() {
    alert(this.state.message);
  },

  render: function() {
    return (
      <button onClick={this.handleClick}>
        Say hello
      </button>
    );
  }
});

Mixins의 기능이 있지만, 공식 문서에서 추천하지 않는다.

createReactClass에서는 구현이 가능


Written by Junho You 배운것을 기록하자