【发布时间】:2023-03-15 07:03:01
【问题描述】:
我正在构建一个应用程序,该应用程序需要根据 URL 中提供的 slug 从数据库加载“工作区”。我的 URL 结构是/app/<workspace slug>/<workspace view>。目前每个工作区有 3 个视图:地图、列表和设置。我需要从 URL 中获取 <workspace slug> 的值,以便从数据库中加载正确的工作区。如果找不到工作区,我也需要返回错误。
我对 React 还很陌生,所以我目前可能没有遵循最佳实践。
我的路线
目前,我通过循环遍历每个工作区并为App.js 中的 3 个视图中的每一个创建一个路由来路由到每个工作区视图:
renderContent() {
return (
<Switch>
<Route path="/" component={NetworkMap} exact />
{this.state.workspaces.map(function(workspace, index){ // Map View Routes
return (
<Route path={"/app/" + workspace.slug + "/map"} render={(props) => <Workspace {...props} workspace={workspace} component={Map} />} />
);
})}
{this.state.workspaces.map(function(workspace, index){ // List View Routes
return (
<Route path={"/app/" + workspace.slug + "/list"} render={(props) => <Workspace {...props} workspace={workspace} component={List} />} />
);
})}
{this.state.workspaces.map(function(workspace, index){ // Settings View Routes
return (
<Route path={"/app/" + workspace.slug + "/settings"} render={(props) => <Workspace {...props} workspace={workspace} component={WorkspaceSettings} />} />
);
})}
<Route component={Error} />
</Switch>
);
}
我的链接
{props.workspaces.map(function(workspace, index){
return (<Link key={index} to={"/app/" + workspace.slug + "/map"} className="dropdown-item cursor-pointer">{workspace.name}</Link>);
})}
我的 Index.js
<BrowserRouter>
<App />
</BrowserRouter>
我尝试将 Route 路径中的 workspace.slug 更改为 :slug,我认为应该让它出现在道具中,但我似乎无法让它正常工作:
{this.state.workspaces.map(function(workspace, index){
return (
<Route path={"/app/:slug/map"} render={(props) => <Workspace {...props} workspace={workspace} component={Map} />} />
);
})}
【问题讨论】:
标签: javascript reactjs url routing