React Redux functional component 적용

React Hooks는 functional component를 사용할 수밖에 없다. 애초에 그러려고 만든 거니까. 그동안 redux와 react를 connect하기 위해서 hoc를 사용했는데 decorator를 사용했었다.

import React, { Component } from 'react';
import { connect } from 'react-redux';

@connect(state => ({
  name: state.name
}))
class MyComponent extends Component {
  render() {
    const { name } = this.props;
    return (
      <div>{name}</div>
    );
  }
}

export default MyComponent;

이 decorator는 class에만 사용할 수 있다. 그래서 functional component에는 사용할 수가 없다. hooks를 사용해볼까 하고 찾아봤지만 마땅히 좋아 보이는 것이 없었다. Provider를 만드는 부분부터 약간 달라지고 있어서 첨부터 만드는 거면 몰라도 이미 만든 것 전체를 바꿀 수는 없었다.

하지만 방법이 있었다. 아주 쉽고 예전부터 알고 있었지만 생각을 못했던 것.

import React from 'react';
import { connect } from 'react-redux';

function MyComponent(props) {
  const { name } = props;

  return (
    <div>{name}</div>
  );
}

export default connect(state => ({
  name: state.name
}))(MyComponent);

decorator를 사용안하면 된다. 이 간단한 것을 이제야 알았다. 앞으로는 functional component로 모두 만들 수 있을 것 같다.

반응형