reactjs - 将 2 个或多个动态导入组合成一个块用于 webpack
问题描述
我正在根据 browserRouter 中加载的路由拆分 react-webpack 应用程序的代码。现在我想将 2 个或更多动态导入打包成一个块。例如,我有一个/A
渲染 A Dashboard 的路由和另一个/A/{id}
显示单个项目的详细信息视图的路由。因为,当我的用户导航到仪表板时,他们很有可能也会打开某些项目的详细信息视图,所以我想将两个动态导入的组件打包在同一个块中。这可能吗?
let aDetails: any;
let aDashboard: any;
const [isLoadedADashboard, setIsLoadedADashboard] = useState<boolean>(false);
const [isLoadedADetails, setIsLoadedADetails] = useState<boolean>(false);
return (
<BrowserRouter>
<Route
exact
path="/A"
render={(props) => {
import('../A/Dashboard').then((mod) => {
aDashboard = mod.default;
setLoadedADashboard(true);
});
return loadedADashboard ? (
<aDashboard />
) : <div />;
}}
/>
<Route
exact
path="/A/{id}"
render={(props) => {
import('../A/Details').then((mod) => {
aDetails = mod.default;
setLoadedADetails(true);
});
return loadedADetails ? (
<aDetails />
) : <div />;
}}
/>
</BrowserRouter>
);
解决方案
创建代理模块,其中包括您需要在一个块中的两个模块:
import Dashboard from 'Dashboard';
import Details from 'Details';
export {Dashboard, Details};
现在假设上面模块的名称是“代理”(仅作为示例),它与您的模块位于同一目录中。您可以动态加载它:
<Route
exact
path="/A"
render={(props) => {
import('../A/Proxy').then((mod) => {
aDashboard = mod.Dashboard;
setLoadedADashboard(true);
});
return loadedADashboard ? (
<aDashboard />
) : <div />;
}}
/>
<Route
exact
path="/A/{id}"
render={(props) => {
import('../A/Proxy').then((mod) => {
aDetails = mod.Details;
setLoadedADetails(true);
});
return loadedADetails ? (
<aDetails />
) : <div />;
}}
/>
推荐阅读
- javascript - 将响应数据传递给全局变量或将其传递给另一个函数 nodejs express js
- java - 没有数据库连接的 Spring Boot 测试
- android - Gson 在条件下忽略序列化字段
- c - C中整数之后(而不是整数之前)的保留空间
- python - 如何在 Python 中绘制半透明矩形?
- haskell - 在列表中找到一个整数并返回 [haskell]
- laravel - 测试 Laravel Sanctum 会导致错误的方法调用
- google-colaboratory - Does Colab run on randomly selected Google Cloud Platform regions?
- python - Why the code ins't reaching the IFTTT webhooks server?
- python - Bubble Sort Function on MIPS returning "Invalid language element:-..." error for all negative numbers