React withRouter的使用及源码实现

一 基本介绍

作用: 把不是通过路由切换过来的组件中,将react-router 的 history、location、match 三个对象传入props对象上。比如首页!

默认情况下必须是经过路由匹配渲染的组件才存在this.props,才拥有路由参数,才能使用编程式导航的写法,执行this.props.history.push('/detail')跳转到对应路由的页面

然而不是所有组件都直接与路由相连(通过路由跳转到此组件)的,当这些组件需要路由参数时,使用withRouter就可以给此组件传入路由参数,此时就可以使用this.props

二 withRouter使用

bash 复制代码
import React from 'react';
import {withRouter} from '../react-router-dom';
class NavHeader extends React.Component{
    render(){
        return <div onClick={()=>this.props.history.push('/')}>{this.props.title}</div>
    }
}

export default withRouter(NavHeader);

三 withRouter源码实现

bash 复制代码
import React from 'react';
import RouterContext from './RouterContext';
function withRouter(OldComponent){
  return props=>(
    <RouterContext.Consumer>
        {
            (value)=>(
                <OldComponent {...value} {...props}/>
            )
        }
    </RouterContext.Consumer>
  )
}
export default withRouter;
相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
魔云连洲1 小时前
深入解析:Vue与React的异步批处理更新机制
前端·vue.js·react.js
资深前端之路5 小时前
react 面试题 react 有什么特点?
前端·react.js·面试·前端框架
秋秋小事5 小时前
React Hooks useContext
前端·javascript·react.js
还有多远.7 小时前
jsBridge接入流程
前端·javascript·vue.js·react.js
hj5914_前端新手9 小时前
React 基础 - useState、useContext/createContext
前端·react.js
阳光阴郁大boy9 小时前
大学信息查询平台:一个现代化的React教育项目
前端·react.js·前端框架
拜无忧11 小时前
2025最新React项目架构指南:从零到一,为前端小白打造
前端·react.js·typescript
冰冷的bin12 小时前
【React Native】点赞特效动画组件FlowLikeView
react native·react.js·typescript
光影少年13 小时前
react16到react19更新及底层实现是什么以及区别
前端·react.js·前端框架