You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router路由正常但子组件无法渲染问题求助

嵌套路由跳转后子组件不渲染问题解决

问题描述

点击路由链接后URL正常更新,但子组件(如ChooseBun、ChooseFillet)无法在页面上渲染,控制台无任何报错信息。

问题根源

在NewOrder.jsx的嵌套路由配置中,使用了绝对路径定义子路由,而父路由/newOrder/*已经匹配了前缀路径,此时子路由应该使用相对路径来匹配。

修复后的代码

修改NewOrder.jsx的路由配置

import React from 'react'
import { Link, Route, Routes } from 'react-router-dom'
import ChooseBun from './ChooseBun.jsx'
import ChooseFillet from './ChooseFillet.jsx'
import './NewOrder.css'

const NewOrder = () => {
  return (
    <>
      <div className='container'>
        <h1>Make Your Own Burger!</h1>
        <ul>
          <li>
            <Link to="choose-bun">Child 1</Link> {/* 改为相对路径 */}
          </li>
          <li>
            <Link to="choose-meat">Child 2</Link> {/* 改为相对路径 */}
          </li>
        </ul>
        <Routes>
          <Route path="choose-bun" element={<ChooseBun />} /> {/* 去掉前缀,用相对路径 */}
          <Route path="choose-meat" element={<ChooseFillet />} /> {/* 去掉前缀,用相对路径 */}
        </Routes>
      </div>
    </>
  )
}

export default NewOrder

修改ChooseBun.jsx中的导航路径

<button
  className='btn btn-danger'
  disabled={!select}
  onClick={() => navigate('choose-meat')} {/* 改为相对路径 */}
>
  Next
</button>

原理说明

当父路由使用/newOrder/*这种带通配符的路径时,React Router会将/newOrder/之后的部分作为子路由的匹配基准。此时子路由使用相对路径(不带斜杠开头),会自动继承父路由的路径前缀,确保路由匹配正确。如果使用绝对路径,会从根路径开始匹配,导致嵌套路由无法正确识别子路由规则,进而无法渲染对应的组件。

内容的提问来源于stack exchange,提问作者Haseeb Irfan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:35:28