共享tracking的逻辑

使用高阶组件能在很多的UI组件中追踪逻辑.
例如: 在许多组件中加入分析数据的追踪.

eg. Adding analytics tracking across various components.

  • 一次实现,多次使用
  • 易于剔除, 我们的组件还是能保持很好的测试性,不会被这个tracking组件影响.
  1. import tracker from './tracker.js';
  2. // 高阶组件
  3. const pageLoadTracking = (ComposedComponent) => class HOC extends Component {
  4. componentDidMount() {
  5. tracker.trackPageLoad(this.props.trackingData);
  6. }
  7. componentDidUpdate() {
  8. tracker.trackPageLoad(this.props.trackingData);
  9. }
  10. render() {
  11. return <ComposedComponent {...this.props} />
  12. }
  13. };
  14. // 用法
  15. import LoginComponent from "./login";
  16. const LoginWithTracking = pageLoadTracking(LoginComponent);
  17. class SampleComponent extends Component {
  18. render() {
  19. const trackingData = {/** Nested Object **/};
  20. return <LoginWithTracking trackingData={trackingData}/>
  21. }
  22. }