在React中是否存在将生命周期挂钩作为HOC的参数传递的途径?

时间:2019-05-17 13:28:08

标签: reactjs high-order-component

我正在尝试创建一个包装HOC,我可以在其中选择要传递的生命周期挂钩。我尝试了以下HOC:

const HOC = lifeCycleHook => WrappedComponent => {
  return class OriginalComponent extends React.Component {
    lifeCycleHook
    render(){
      return (
        <WrappedComponent {...this.props} />
      );
    }
  }
}

export default HOC;

用于包装原始组件的组件:

import React from 'react';
import HOC from './helpers/hoc';
import componentDidMount from './helpers/componentDidMount';

const Home = () => <h1>Home</h1>;

export default HOC(componentDidMount)(Home);

最后是生命周期挂钩:

import React from 'react';

function componentDidMount(){
  console.log('Test')
}

export default componentDidMount;

编辑:不会引发任何编译错误,但不会触发控制台日志来打印“测试”

1 个答案:

答案 0 :(得分:3)

recompose软件包可以为您完成此任务。以下是lifecycle助手中的示例:

const PostsList = ({ posts }) => (
  <ul>{posts.map(p => <li>{p.title}</li>)}</ul>
)

const PostsListWithData = lifecycle({
  componentDidMount() {
    fetchPosts().then(posts => {
      this.setState({ posts });
    })
  }
})(PostsList);