我有一个反应应用程序,需要链接到一个名为“CourseSelectionContainer”的组件,并传递一个“lessonId”参数。链接是在“CoursesSetupMenu”组件中设置的,我使用下面的链接格式。
<Link to = {
{ pathname: `${activity.gradeLevelURL}` + "/GradeLevel",
state: {lessonId: activity.lessonId}
}
}>
路由器代码位于“CoursesSetupRouter”组件中,如下所示:
return (
<>
<Switch>
<PrivateRoute path="/learners/publicCourses/Vocabulary/GradeLevel"
component={() => (<CourseSelectionContainer />)}/>
<PrivateRoute
path="/learners/publicCourses/History/GradeLevel"
render={(props) => <CourseSelectionContainer {...props} />} />
</Switch>
</>
);
请注意,基于其他一些 Stackoverflow 问题,我已经尝试了上面显示的两种格式来路由到组件。渲染 Menu 和 router 的容器包含如下代码:
</div>
{ (lessonMenuItems != undefined &&
lessonMenuItems != null &&
lessonMenuItems.length > 0) &&
<CoursesSetupMenu
coursesMenuItems = {lessonMenuItems}
coursesURL={url}
/>}
</Drawer>
<Container maxWidth="lg" className={classes.container}>
<Grid container spacing={1}>
<CoursesSetupRouter/>
</Grid>
</Container>
</div>
由于某种原因,该路径被维护为进入菜单之前的路径。我使用下面的控制台日志打印出这些值,以查看发生了哪些变化,哪些没有发生变化。
let location = useLocation();
console.log ("GradeLevelSetupMenu - Start - location = ", location)
let { path, url } = useRouteMatch();
console.log ("GradeLevelSetupMenu - path = ", path);
console.log ("GradeLevelSetupMenu - url = ", url);
这表明,根据位置,路径名 =“/learners/publicCourses/Vocabulary/GradeLevel”,这是预期的。
不幸的是,路径和 URL 仍然指示,path = “/learners/publicCourses/Vocabulary”。URL 指向相同的位置。这是应用程序被路由到的地方。
根据对链接的选择,我预计路径和 URL 都会更改为 /learners/publicCourses/Vocabulary/GradeLevel 并路由到随附的组件。那没有发生。
我是否需要做其他事情来强制路由按预期发生,到 /learners/publicCourses/Vocabulary/GradeLevel ?我的逻辑或语法还有其他问题吗?