React中使用navigate跳转动态路由失效,点击Card无法渲染对应User组件
问题排查与解决方案
- 跳转路径写法错误
当前页面处于/dashboard/students路由下,你使用的navigate(students/${elem.id})是相对路径写法,会直接在当前路由后拼接路径,最终生成的跳转地址为/dashboard/students/students/xxx,和你配置的/dashboard/students/:id路由规则不匹配,导致跳转失败。
修改方案二选一即可:
// 方案1:使用绝对路径,路径匹配更稳妥 navigate(`/dashboard/students/${elem.id}`, { replace: true }) // 方案2:使用标准相对路径,./表示基于当前路由层级拼接 navigate(`./${elem.id}`, { replace: true })
- 父路由组件缺少子路由渲染出口
你为students路由配置了子路由:id,但students路由对应的StudentsCards组件如果没有引入并渲染react-router-dom提供的<Outlet />组件,子路由对应的User组件没有挂载入口,即使路径跳转成功也不会显示对应内容。
修改方案:在StudentsCards组件的合适位置新增<Outlet />作为子路由渲染占位:
import { Outlet } from 'react-router-dom' function StudentsCards() { // 原有业务逻辑 return ( <div> {/* 原有卡片列表渲染代码 */} <CardComponent /> {/* 新增子路由出口 */} <Outlet /> </div> ) }
- 可选优化项
列表渲染时的key属性不要使用data.indexOf(elem),直接用遍历项的唯一idelem.id即可,可避免列表重排时出现异常渲染问题:
<Grid item xs={12} sm={6} md={3} key={elem.id}>
内容的提问来源于stack exchange,提问作者Maria Andre
相关产品推荐
相关产品推荐

