高階組件中的withRouter
, 作用是將一個組件包裹進Route
里面, 然后react-router
的三個對象history, location, match
就會被放進這個組件的props
屬性中.
1 // withRouter實現原理: 2 // 將組件包裹進 Route, 然后返回 3 // const withRouter = () => { 4 // return () => { 5 // return <Route component={Nav} /> 6 // } 7 // } 8 9 // 這里是簡化版 10 const withRouter = ( Component ) => () => <Route component={ Component }/>
上面是實現的原理, react-router-dom
里面是有這個組件的, 直接引入使用就可以了。
1 import React from 'react' 2 import './nav.css' 3 import { 4 NavLink, 5 withRouter 6 } from "react-router-dom" 7 8 class Nav extends React.Component{ 9 handleClick = () => { 10 // Route 的 三個對象將會被放進來, 對象里面的方法可以被調用 11 console.log(this.props); 12 } 13 render() { 14 return ( 15 <div className={'nav'}> 16 <span className={'logo'} onClick={this.handleClick}>掘土社區</span> 17 <li><NavLink to="/" exact>首頁</NavLink></li> 18 <li><NavLink to="/activities">動態</NavLink></li> 19 <li><NavLink to="/topic">話題</NavLink></li> 20 <li><NavLink to="/login">登錄</NavLink></li> 21 </div> 22 ); 23 } 24 } 25 26 // 導出的是 withRouter(Nav) 函數執行 27 export default withRouter(Nav)
所以withRouter
的作用就是, 如果我們某個東西不是一個Router
, 但是我們要依靠它去跳轉一個頁面, 比如點擊頁面的logo
, 返回首頁, 這時候就可以使用withRouter
來做.
在這個例子中, 我將span
使用withRouter
作為一個可點擊跳轉的Link