React AsyncComponent 的一些问题

找到一个 react-async-component 可以实现 React 组件的异步加载。

使用方法大概是这样的:(以 react-cropper 为例)

import { asyncComponent } from 'react-async-component';

export default asyncComponent({
  resolve: () => import('react-cropper')
});

但是这样导致的问题是无法获取到 react-cropper 组件的 ref 属性,此时获取到的 ref 是 AsyncComponent

所以需要把 react-cropper 包一层:

// Cropper.js
import React from 'react';
import PropTypes from 'prop-types';
import ReactCropper from 'react-cropper';
import 'cropperjs/dist/cropper.css';

export default class Cropper extends React.Component {
  static defaultProps = {
    onRef() {}
  };

  static propTypes = {
    onRef: PropTypes.func
  };

  componentDidMount() {
    this.props.onRef(this.cropperRef);
  }

  render() {
    return (
      <ReactCropper ref={ref => (this.cropperRef = ref)} {...this.props} />
    );
  }
}
// AsyncCropper.js
import { asyncComponent } from 'react-async-component';

export default asyncComponent({
  resolve: () => import('@/components/Cropper')
});

然后引入 AsyncCropper 就可以了 = w=

<AsyncCropper onRef={ref=>this.cropper = ref} />