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;
相关推荐
WYiQIU5 小时前
11月面了7.8家前端岗,兄弟们12月我先躺为敬...
前端·vue.js·react.js·面试·前端框架·飞书
Bigger8 小时前
🎨 用一次就爱上的图标定制体验:CustomIcons 实战
前端·react.js·icon
weixin79893765432...12 小时前
React + Fastify + DeepSeek 实现一个简单的对话式 AI 应用
人工智能·react.js·fastify
用户6000718191013 小时前
【翻译】使用 React 19 操作构建可复用组件
react.js
禁止摆烂_才浅14 小时前
Taro 小程序页面返回传参完整示例
react.js·微信小程序·taro
还是大剑师兰特17 小时前
React面试题及详细答案150道(51-60)
react.js·react面试题·大剑师
10share18 小时前
React组件间通信
react.js
是一碗螺丝粉19 小时前
React Native 运行时深度解析
前端·react native·react.js
骑自行车的码农19 小时前
🍂 React DOM树的构建原理和算法
javascript·算法·react.js
前端老宋Running2 天前
一次从“卡顿地狱”到“丝般顺滑”的 React 搜索优化实战
前端·react.js·掘金日报