首頁 >web前端 >前端問答 >react路由回傳時不刷新怎麼辦

react路由回傳時不刷新怎麼辦

藏色散人
藏色散人原創
2023-01-04 10:11:522717瀏覽

react路由回傳時不刷新的解決方法:1、在路由元件上最上層元素上加一個key增加路由的辨識度;2、將key綁定在路由頂層元素上,精確定位路由;3、使用withRouter關聯下元件即可。

react路由回傳時不刷新怎麼辦

本教學操作環境:Windows10系統、react18.0.0版、Dell G3電腦。

react路由回傳時不刷新怎麼辦?

react 跳轉後路由變了頁面沒刷新的解決方案

最近在學習React的過程中遇到了路由跳轉後頁面不刷新的問題,本文就詳細的介紹一下解決方法,需要的朋友們下面隨著小編來一起學習學習吧

問題

這樣的問題貌似原因還挺多的,我的問題是帶參數的url不能刷新,router 5.0版本,使用withRouter關聯元件進行頁面跳躍

#如下所示

react路由回傳時不刷新怎麼辦

##路由代碼

react路由回傳時不刷新怎麼辦

解決方案

在路由元件上最上層元素上加上一個key增加路由的辨識度,因為普通的跳躍是根據path來辨識的,但是path帶上參數時,路由無法精確辨識。不過,在跳頁的時候,每個位址都會在localtion物件裡新增一個key。如下列印

// 组件挂载
 componentDidMount() {
   console.log(this.props.location);
 }

react路由回傳時不刷新怎麼辦

我們將這個key綁定在路由頂層元素上就能精確定位路由了

render() {
   return (
     {/*就是这个key*/}
     <div key={this.props.location.key}>
         <Switch>
           <Route exact path="/" component={Home} />
           <Route exact path="/products/:id" component={Products} />
           <Route exact path="/about" component={About} />
           <Route exact path="/solution" component={Solution} />
           <Route
             exact
             path="/solutionDetails/:id"
             component={SolutionDetails}
           />
           <Route exact path="/download" component={Download} />
           <Route path="/about" component={Download} />
           <Route exact path="/details/:id" component={Details} />
           <Route path="/contact" component={Contact} />
           <Route component={ErrorPage} />
         </Switch>
     </div>
   );
 }

然鵝,可能你發現this. props為{} 空物件

那可能是因為你沒有使用withRouter關聯元件,關聯一下就好了。注意一點,app.js無法關聯,withrouter只能關聯路由元件或app.js的子元件

import React, { Component } from "react";
import {withRouter } from "react-router";
 
class routers extends Component {
 /**
  * 生命周期函数
  */
 // 组件挂载
 componentDidMount() {
   console.log(this.props.location);
 }
 render() {
   return (
     <div key={this.props.location.key}>
     </div>
   );
 }
}
export default withRouter(routers);

#推薦學習:《

react影片教學

以上是react路由回傳時不刷新怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn