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;
相关推荐
Lee川3 小时前
从零构建现代化登录界面:React + Tailwind CSS 前端工程实践
前端·react.js
Embrace9244 小时前
React Native + Realm 离线方案处理
javascript·react native·react.js·realm
TheRouter7 小时前
构建一个支持多模型的 AI 聊天应用:React + TheRouter API 全栈教程
前端·人工智能·react.js
yuki_uix7 小时前
面试题里的 Custom Hook 思维:从三道题总结「异步状态管理」通用模式
前端·react.js·面试
Cxiaomu9 小时前
React Native 双端一体工程,如何实现分端运行与分端打包?
javascript·react native·react.js
斌味代码9 小时前
React 开发者学 Vue3:Composition API 核心用法对照与避坑实录
javascript·vue.js·react.js
一只小阿乐9 小时前
react路由中使用context
前端·javascript·react.js·context 上下文
早點睡39010 小时前
ReactNative项目OpenHarmony三方库集成实战:react-native-shadow-2
javascript·react native·react.js
我命由我1234511 小时前
在 React 项目中,配置了 setupProxy.js 文件,无法正常访问 http://localhost:3000
开发语言·前端·javascript·react.js·前端框架·ecmascript·js
辻戋11 小时前
从零手写mini-react
javascript·react.js·ecmascript