text: import React, { Component } from 'react';
  import type { ComponentType } from 'react';
  
  type State = {
    component: ?ComponentType<any>
  };
  
  type ImportedComponent = {
    default: ComponentType<any>
  }
  
  export default function asyncComponent<Props: {}>(loadComponent: () => Promise<ImportedComponent>): ComponentType<Props> {
    class AsyncComponent extends Component<Props, State> {
      constructor(props: Props) {
        super(props);
  
        this.state = {
          component: null
        };
      }
  
      componentDidMount() {
        this.fetchComponent();
      }
  
      async fetchComponent() {
        const { default: component } = await loadComponent();
  
        this.setState({ component });
      }
  
      render() {
        const C = this.state.component;
  
        return C ? <C {...this.props} /> : null;
      }
    }
  
    return AsyncComponent;
  }
  