【发布时间】:2018-09-17 06:55:13
【问题描述】:
我使用create-react-app 创建了一个带有 React 和 Typescript 的 Web 应用程序。它使用了一个相当繁重的第三方库。我想使用 dynamic import expressions 将其从主包中排除。
所以,我没有做import { Component } from 'library',而是创建了一个看起来像这样的小包装器:
const loadLibrary = async () => {
const x = await import('library').then((r) => r);
return x;
};
const {
Component,
} = loadLibrary() as any;
// tslint:disable-next-line:no-console
console.log(`typeof Component is ${typeof Component}`);
export {
Component,
};
然后,在我的应用程序中,我会使用 import { Component } from '../library-wrapper.ts'。
因为包装器使用动态导入表达式,Webpack 创建了一个单独的块,它只由浏览器下载,然后才是真正需要的。 \o/.
但坏消息是:我的包装器实际上并没有等待动态导入表达式。它调用loadLibrary() 函数但立即继续执行,记录
typeof 组件未定义
所以当我尝试使用Component 时,React 崩溃了:
元素类型无效:应为字符串(用于内置组件)或类/函数(用于复合组件)但得到:未定义。
有什么建议吗?
【问题讨论】:
标签: reactjs typescript async-await