我已经看到我们可以使用以下命令动态导入默认组件:
const MyComponent = React.lazy(() => import('./myPath'));
我们可以使用<MyComponent/>来渲染它。据我所知,这种方法只允许从指定路径导入默认组件。我的问题是:如何动态导入从myPath(非默认)导出的其他组件或函数?
<MyComponent/>
myPath
jmp7cifd1#
React.lazy目前只支持默认导出。文档中的建议解决方案是:如果要导入的模块使用命名导出,则可以创建一个中间模块,将其重新导出为默认值。这可以确保树摇动继续工作,并且不会拉入未使用的组件。举个例子
// ManyComponents.js export const MyComponent = /* ... */; export const MyUnusedComponent = /* ... */; // MyComponent.js export { MyComponent as default } from "./ManyComponents.js"; // MyApp.js import React, { lazy } from 'react'; const MyComponent = lazy(() => import("./MyComponent.js"));
另一种解决方案是添加一些如下所示的样板文件。这样,就不需要中间组件:
const MyComponent = React.lazy(() => import('./MyComponent').then((module) => ({ default: module.MyComponent })) )
或者,你可以像这样使用react-lazily:
react-lazily
const { MyComponent } = lazily(() => import('./MyComponent'))
1条答案
按热度按时间jmp7cifd1#
React.lazy目前只支持默认导出。文档中的建议解决方案是:
如果要导入的模块使用命名导出,则可以创建一个中间模块,将其重新导出为默认值。这可以确保树摇动继续工作,并且不会拉入未使用的组件。
举个例子
另一种解决方案是添加一些如下所示的样板文件。这样,就不需要中间组件:
或者,你可以像这样使用
react-lazily
: