javascript - 如何将字符串作为函数传递给 react-router-dom Route?
问题描述
我正在使用 React 16.11.0 和 react-router-dom 5.1.2。
我有一个代表这样的页面的对象数组:
const pages = [{ url: "/", component: "Home" }, {...}, ... ]
更新:也许我应该提到这是来自 JSON 字符串,所以我无法确定值的类型。
我想通过映射在 React 中动态生成路由:
import Home from './components/Home';
...
<BrowserRouter>
<div className="App">
<Switch>
{pages.map(page => (
<Route path={page.url} component={page.component} />
))}
</Switch>
</div>
</BrowserRouter>
page.url
有效,但 URL 无论如何都可以是字符串。page.component
没有正确加载,我认为是因为它是一个字符串,而导入Home
的是一个 React 函数组件。
我尝试使用eval()
并将字符串Function()
转换page.component
为对象,但它们不起作用。
我已经尝试过文档和搜索引擎,但无法找到解决方案。也许我在错误的地方搜索。
这可能吗?我该怎么做呢?
解决方案
实际上,您甚至可以避免导入模块 -require
很方便:
const pages = [{ url: "/", component: "Home" }, {...}, ...]
.map((obj) => (
{ url: obj.url, component: require(`./components/${obj.component}`).default }
);
然后按照你的逻辑:
<Switch>
{pages.map(page => (
<Route path={page.url} component={page.component} />
))}
</Switch>
推荐阅读
- mysql - 具有特定条件的最长连续 SQL 查询
- shell - 詹金斯管道 - 错误的替换错误
- javascript - 反应添加新的数组方法以通过它的键返回数组的对象项
- android - 我在android studio中遇到过这些错误?
- c - float cf = *(float *)&ci; 是什么意思?在C里做什么?
- environment-variables - 关于在常规组件/插件之外使用 Nuxt 的 privateRuntimeConfig 变量的问题
- sql - Vertica:如果未找到记录,则返回零
- javascript - CefSharp 运行 JavaScript
- r - 使用与绘图相同的背景颜色扩展 ggplot 的画布
- python - 实际上使用 scikit-learn 从多元多项式回归中检索多项式