
React Router v6 中 Route 组件已移除 exact 属性,若误写为 exactpath 或保留 v5 的 exact 用法,将导致路由匹配失败;正确做法是直接使用 path 和 element,并确保 包裹整个应用结构(尤其是导航与路由出口需处于同一 Router 上下文)。
react router v6 中 `route` 组件已移除 `exact` 属性,若误写为 `exactpath` 或保留 v5 的 `exact` 用法,将导致路由匹配失败;正确做法是直接使用 `path` 和 `element`,并确保 `
在你提供的代码中,问题核心在于两个关键错误:一是 exactpath 是非法属性名(v6 中既无 exact 也无连写形式),二是 的包裹范围不合理——它仅包裹了 和 ,但未将顶部的 和 纳入其上下文,更重要的是,React Router v6 要求所有导航()和路由出口()必须位于同一个 组件内部,否则路由状态无法同步,点击链接不会触发渲染更新。
此外, 在 v6 中不再支持 exact 属性(该特性已在 v6 中被移除),路径匹配默认采用“精确匹配”逻辑(即 path="/" 仅匹配根路径,不自动向下匹配子路径),因此无需、也不能添加 exact。
✅ 正确写法如下(已修正结构与语法):
来自 Vercel Engineering 的 React 和 Next.js 性能优化指南。用于编写、审查或重构 React/Next.js 代码以确保最佳性
import React from 'react';
import Quote from './components/Quote';
import './index.css';
import Abraham from './components/Abraham';
import {
BrowserRouter as Router,
Routes,
Route,
Link
} from "react-router-dom";
function App() {
return (
<router> {/* ✅ Router 必须包裹全部路由相关元素 */}
<div>
<quote></quote><h2>List of authors</h2>
{/* ✅ Link 与 Routes 同处一个 Router 内 */}
<nav><link to="/">Author1
</nav><routes>
{/* ✅ 正确:仅用 path + element,无 exact,无 exactpath */}
<route path="/" element="{<Abraham"></route>} />
</routes>
</div>
</router>
);
}
export default App;
⚠️ 注意事项:
- 不要将
放在组件返回值中间(如原代码中仅包裹部分 JSX),必须作为最外层路由容器; -
element属性接收的是 JSX 元素(即带括号的),不是组件引用(Abraham)或字符串; - 若需多级路由或嵌套路由,请配合
useNavigate或Navigate组件,并确保父Route设置element中包含; - 开发时建议启用 React Router 的
内置调试能力(如添加basename或使用createBrowserRouter配合RouterProvider进行更可控的配置)。
总结:React Router v6 的设计理念是声明式、精简且上下文敏感。一次路由跳转失效,大概率源于 Router 嵌套层级错误、属性名拼写错误(如 exactpath),或混淆了 v5/v6 的 API 差异。牢记「一个 Router、一个 Routes、标准 path + element」三原则,即可避免绝大多数重定向失败问题。










