react跳轉後路由變瞭頁面沒刷新的解決
問題
這樣的問題貌似原因還挺多的,我的問題是帶參數的url不能刷新,router 5.0版本 ,使用withRouter關聯組件進行頁面跳轉
如下所示
路由代碼
解決方案
在路由組件上最上層元素上加一個key增加路由的識別度,因為普通的跳轉是根據path來識別的,但是path帶上參數時,路由無法精確識別。
不過,在跳轉頁面的時候,每個地址都會在localtion對象裡添加一個key。
如下打印
// 組件掛載 componentDidMount() { console.log(this.props.location); }
我們將這個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);
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- React組件通信之路由傳參(react-router-dom)
- 淺談react路由傳參的幾種方式
- React中路由參數如何改變頁面不刷新數據的情況
- React路由動畫切換實現過程詳解
- react實現移動端二級路由嵌套詳解