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

react-router-dom v6点击链接地址栏变化但未跳转至目标页面求助

React Router DOM v6 路由渲染异常问题

问题现象

从首页跳转至Subscription页面功能正常,但点击Subscription页面中的Mounth链接时,仅地址栏更新为localhost:3000/subscription/Mounth,Mounth页面却未渲染。

相关代码

Root.jsx

import { Route, Routes } from "react-router-dom"
import Layout from "../Layout/Layout"
import Main from "../Main/main"
import Subscription from "../Subscription/subscription"
import Mounth from "../Subscription/Mounth"

function Root(){
    return(
        <>
          <Routes>
            <Route element={<Layout/>}>
                <Route path="/" element={<Main/>}/>
                <Route path="subscription" element={<Subscription/>}>
                 <Route path="Mounth" element={<Mounth/>}/>
                </Route>
            </Route>
          </Routes>
        </>
    )
}

export default Root

Subscription.jsx

import { Link } from "react-router-dom"
import { Outlet } from "react-router-dom"
function Subscription(){
    return(
        <>
            <Outlet /> 
       
            <div className="main-content">
            <div className="container-primary">
                <div className="subscription-primary">
          
                    <form className="search-bar">
                        <input placeholder="Поиск" className="search-bar__input"/>
                    </form>
                    <h1 className="primary-title">Subscription</h1>
                    <h2 className="subscription-primary__title">Choose:</h2>
                    <ul className="subscription-primary__list">
                        <li className="subscription-primary__item">
                            <Link className="subscription-primary__link" to="Mounth">
                                <div className="subscription-primary__bg">
                                    <span className="subscription-primary__mounth">1 month</span>
                                    <h3 className="subscription-primary__price">
                                        2499 ₽
                                    </h3>
                                </div>
                            </Link>
                        </li>
                    </ul>
          
                    <div className="promo">
                        <form className="promo__form" action="">
                            <input type="text" placeholder="" className="promo__field"/>
                            <button type="submit" className="promo__btn primary-btn">Accept</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        </>
    )
}

问题原因及解决方案

路由结构本身是正确的,但**<Outlet />的位置导致Mounth页面内容被后续元素覆盖,或者显示位置不符合预期**,以下两种方案可解决问题:

方案1:调整Outlet位置(保留Subscription布局,嵌入子页面内容)

如果希望Mounth页面在Subscription的布局框架内展示,把<Outlet />移动到你想要显示子内容的区域,比如订阅选项下方:

function Subscription(){
    return(
        <>
            <div className="main-content">
            <div className="container-primary">
                <div className="subscription-primary">
                    <form className="search-bar">
                        <input placeholder="Поиск" className="search-bar__input"/>
                    </form>
                    <h1 className="primary-title">Subscription</h1>
                    <h2 className="subscription-primary__title">Choose:</h2>
                    <ul className="subscription-primary__list">
                        <li className="subscription-primary__item">
                            <Link className="subscription-primary__link" to="Mounth">
                                <div className="subscription-primary__bg">
                                    <span className="subscription-primary__mounth">1 month</span>
                                    <h3 className="subscription-primary__price">
                                        2499 ₽
                                    </h3>
                                </div>
                            </Link>
                        </li>
                    </ul>
                    {/* 将Outlet移至此处,Mounth内容会显示在订阅选项和优惠码区域之间 */}
                    <Outlet />
                    <div className="promo">
                        <form className="promo__form" action="">
                            <input type="text" placeholder="" className="promo__field"/>
                            <button type="submit" className="promo__btn primary-btn">Accept</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        </>
    )
}

方案2:将Mounth设为独立路由(点击后替换Subscription页面)

如果希望点击Mounth链接后完全替换Subscription页面内容,调整路由结构,将Mounth设为Layout的直接子路由:

// Root.jsx 修改后的代码
function Root(){
    return(
        <>
          <Routes>
            <Route element={<Layout/>}>
                <Route path="/" element={<Main/>}/>
                <Route path="subscription" element={<Subscription/>}/>
                {/* 将Mounth路由改为Layout的直接子路由 */}
                <Route path="subscription/Mounth" element={<Mounth/>}/>
            </Route>
          </Routes>
        </>
    )
}

同时更新Subscription中的Link为绝对路径:

<Link className="subscription-primary__link" to="/subscription/Mounth">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:15:38