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

React路由报No routes matched location错误如何排查解决

React Router 路由匹配失败问题排查

问题现象

开发航司点评功能时触发路由匹配异常:点击按钮跳转至指定航司新增评论路径/airlines/1/reviews/new时,控制台抛出错误:

react_devtools_backend.js:4026 No routes matched location "/airlines/1/reviews/new"

项目路由规则统一在App.js中定义,跳转新增评论表单的<Link>组件写在Reviews.js页面内,涉及核心文件包括App.js、Airlines.js、AirlineCard.js、Reviews.js、AddReviewForm,各文件核心代码如下:

App.js 路由定义代码

const[reviews,setReviews]=useState([]); 
.
.
.

<Routes>
  <Route exact  path="/airlines" element={<><Search search={search} onSearchChange={setSearch} /><Airlines  /></>} />
  <Route exact  path="/myprofile" element={<MyProfile />} />
  <Route exact  path="/airlines/:id" element={<Reviews reviews={reviews} setReviews={setReviews} />} />
  <Route path="/airlines/${id}/reviews/new" element={ <AddreviewForm />} />
  <Route exact path="/" element={<Home user={user}/>} />
</Routes>

Airlines.js 组件代码

function Airlines(){
const[airlines,setAirlines]=useState([]);

useEffect(()=>{
    fetch("/airlines")
    .then(res=>res.json())
    .then(airData=>{
      setAirlines(airData)
    })
  
   },[])
  

   
return(
    <>
    <h1>Airlines</h1>
   {airlines.map((airline)=>(
    <AirlinesCard key={airline.id} airline={airline}/>
   ))

   }
   
    </>
)
}

AirlineCard.js 组件代码

function AirlinesCard({airline}){
const{id,name,image,slogan,wlink}=airline;
return(
<>

<h2>{name}</h2>
<h4>{slogan}</h4>
<Link to={`/airlines/${id}`}>Enter
<h3 >Book your tickets now!</h3>
</Link>
</>
)
}

Reviews.js 组件代码

function Reviews({reviews,setReviews}){

useEffect(()=>{
fetch("/reviews")
.then(res=>res.json())
.then(reviewData=>{
setReviews(reviewData)
})
},[])

function handleAddReviews(newReview){
console.log("in handle add review", newReview)
setReviews([...reviews,newReview]);

}

const {id}=useParams();

console.log(reviews)
 let filteredReviews=reviews.filter(review=>{

  
   return review.airline.id===parseInt(id)})
return(
    <>
    <h1>Reviews</h1>
   
    <Link  to="/airlines"><button>Go Back</button></Link>
    <Link to={`/airlines/${id}/reviews/new`}><button>Add a Review</button></Link>
    { filteredReviews.map((review)=>{
return (

);
})}

    </>
)
}

故障原因

路由规则定义存在语法错误:

  • App.js中新增评论页的路由路径使用普通双引号包裹,内部的${id}不会做变量插值,实际注册的路由是字面量路径/airlines/${id}/reviews/new,和实际跳转的动态路径完全不匹配
  • 即使将双引号改为模板字符串反引号,App.js顶层路由定义作用域内也不存在id变量,会直接触发引用错误。React Router 的动态路由参数必须使用:参数名的占位符语法定义,和已有的/airlines/:id路由规则写法一致。

修复方案

修改App.js中新增评论页的路由定义,将错误的路径写法替换为标准动态路由占位符写法:

{/* 替换原有错误的Route定义 */}
<Route exact path="/airlines/:id/reviews/new" element={ <AddreviewForm />} />

修改后路由即可正常匹配跳转,在AddreviewForm组件内可以通过useParams() Hook 获取路径上的航司id参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:18:14