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;
相关推荐
化作繁星9 小时前
如何在 React 中测试高阶组件?
前端·javascript·react.js
初遇你时动了情9 小时前
react module.scss 避免全局冲突类似vue中scoped
vue.js·react.js·scss
Au_ust9 小时前
千峰React:函数组件使用(2)
前端·javascript·react.js
来一碗刘肉面10 小时前
React - ajax 配置代理
前端·react.js·ajax
界面开发小八哥12 小时前
可视化工具SciChart如何结合Deepseek快速创建一个React仪表板?
react.js·信息可视化·数据可视化·原生应用·scichart
Java知识技术分享15 小时前
使用LangChain构建第一个ReAct Agent
python·react.js·ai·语言模型·langchain
谢尔登17 小时前
【React】React 性能优化
前端·react.js·性能优化
Rowrey21 小时前
react+typescript,初始化与项目配置
javascript·react.js·typescript
谢尔登21 小时前
Vue 和 React 的异同点
前端·vue.js·react.js
风清云淡_A1 天前
【react18】如何使用useReducer和useContext来实现一个todoList功能
react.js