从多个类导出的js进行反应加载导入

时间:2018-05-02 15:03:06

标签: javascript reactjs code-splitting react-loadable

如何从js中的多类导出的react-loadable文件导入。
我正在尝试使用CustomButton中的MyButton.jsreact-loadable导入Home.js。这是我知道的唯一方法,不起作用。

MyButton.js

import {
  CustomButton,
  BUTTON_STYLE,
  BUTTON_TYPE,
  BUTTON_SIZE,
  BUTTON_ALIGN,
  COLOR
} from './buttons';
module.exports = {
  CustomButton,
  BUTTON_STYLE,
  BUTTON_TYPE,
  BUTTON_SIZE,
  BUTTON_ALIGN,
  COLOR
}

Home.js

const AsyncButton = Loadable({
  loader: () => import('../../button/MyButton'),
  loading: Loading
});

请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:6)

我能够这样做:

const AsyncButton = Loadable({
  loader: () => import('../../button/MyButton').then(module => module.CustomButton),
  loading: Loading
});

但是,如果一个变量包含所有其他导出,我无法得到它。

答案 1 :(得分:1)

我找到了

的解决方案

react-loadable documentation

Loadable({
  loader: () => import('./my-component'),
  render(loaded, props) {
    let Component = loaded.namedExport;
    return <Component {...props}/>;
  }
});

它的工作。

答案 2 :(得分:0)

我知道答案是正确的,但是我想出了一种方法来获取一个包含所有命名出口的变量。见下文。

    AsyncSubSites = namedComponent => Loadable({
    loader: () =>
      import( /*webpackChunkName: "SubSites"*/ "./SubSites/SubSites"),
    loading: () => <Loading/>, //loader/spinner etc.
    modules: ["SubSites"],
    render(loaded, props) {
      let Component = loaded[namedComponent];
      return <Component {...props}/>;
    }
  })

并与react-router一起用作...

<Route path="/:slug" exact component={AsyncSubSites('Membership')} />
<Route path="/:slug" exact component={AsyncSubSites('About')} />

以及其他任何命名的导出