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 小时前
栗子前端技术周刊第 91 期 - 新版 React Compiler 文档、2025 HTML 状态调查、Bun v1.2.19...
前端·javascript·react.js
今禾15 小时前
前端开发中的Mock技术:深入理解vite-plugin-mock
前端·react.js·vite
我想说一句15 小时前
掘金移动端React开发实践:从布局到样式优化的完整指南
前端·react.js·前端框架
码间舞15 小时前
Zustand 与 useSyncExternalStore:现代 React 状态管理的极简之道
前端·react.js
爱编程的喵18 小时前
深入理解JSX:从语法糖到React的魔法转换
前端·react.js
海底火旺18 小时前
单页应用路由:从 Hash 到懒加载
前端·react.js·性能优化
G等你下课1 天前
你还在 import { Button } from './components'?
前端·react.js
挽淚1 天前
AI对话+React 项目实战(半成品)
javascript·react.js
PineappleCoder1 天前
React函数组件的"生活管家"——useEffect Hook详解
前端·react.js
G等你下课1 天前
React 中的 Diff 算法:理解虚拟 DOM 的高效更新机制
前端·react.js