reactjs - 根据文件名从文件夹反应路由到组件
问题描述
foo
给定以下文件夹src
:
.src
..App.js
..foo
...ComponentBah.js
...ComponentFoo.js
...ComponentBaz.js
...ComponentBar.js
每个组件 Bah、Foo 等都导出一个与其文件名匹配的组件,例如ComponentBah.js
exports ComponentBah
。我想写一个根据其名称加载任意组件的Route
in 。即,如果一个组件被添加到文件夹中,一些 url将加载组件而无需更新App.js
/src/foo
ComponentTau
foo
/path/to/route/ComponentTau
App.js
解决方案
index.js
在里面创建一个文件foo
如下:
export default [
'ComponentBah',
'ComponentFoo',
'ComponentBaz',
'ComponentBar'
]
现在您可以在主路由器中动态添加这些组件作为路由,如下所示:
import React, { Suspense, lazy } from 'react';
import routes from './path/to/route';
const routeMap = {};
routes.forEach((route) => {
routeMap[route] = lazy(() => import(`./path/to/route/${route}`));
});
function withSuspense(WrappedComponent) {
return function(props) {
return (
<Suspense fallback={<div>Loading...</div>}>
<WrappedComponent {...props} />
</Suspense>
);
};
}
function Router() {
return (
<BrowserRouter>
<div>
{routes.map(route => (
<Route path={`/path/to/route/${route}`} component={routeMap[route]} />
))}
</div>
</BrowserRouter>
);
}
但是这种方法有两个陷阱:
- 对于每个新文件,您仍然需要在
index.js
文件中添加一个条目。 由于文件夹中的所有文件都需要静态导入,因此您可能会丢失代码拆分和延迟加载。上面已经完成了代码拆分。
推荐阅读
- openshift - 在 Openshift 4.5 中间歇性观察到 502 bad gateway 错误
- tomcat - 即使未在应用程序中配置 hsql,Tomee Server Startup Error 数据库锁定获取失败
- devexpress - 在 DevExpress RichTextEdit 中呈现分页符
- pandas - 循环问题中的 Xlsxwriter 条件格式
- 2d - 如何在 C# 中创建一个永久变量
- scala - 从 10 个用户开始,每 5 分钟添加 50 个用户 gatling scala
- linux-kernel - 为什么函数 __pud_alloc() 在内核模块中未定义?
- javascript - 在 JavaScript 中操作 MySql 时间戳值
- reactjs - 预期的服务器 HTML 包含匹配项
- ios - IOS:如何从 Firebase 实时数据库中的列表中获取特定的更改子项?