react中的withRouter


高階組件中的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM