首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

react-router v6使用createHashHistory进行history.push,url改变页面不渲染

问题描述 使用history库createHashHistory创建history对象使用history.push进行页面跳转时候,url 变化,但是页面没有渲染。...(可参考:: react-router-dom v6 组件使用路由跳转) 因为太麻烦,没有采用。 最终使用react-router-dom中useNavigate进行页面跳转。...navigate("/"); navigate使用方法可以参考博客:react-router-dom hook中使用 v6 和 v5对比 需要注意是:,useNavigate方法只能在函数式组件使用..., 组件中是不能使用hooks。...③创建组件,函数式组件只需调用函数即可创建组件,而类组件必须先实例化一个对象,然后通过这个实例化对象调用render函数来创建组件 ④类组件是用生命周期钩子函数来实现业务逻辑,而函数式组件使用react

3.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

从零手写react-router

, 而官方是使用组件书写, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...封装自己生成match对象方法封装之前, 想跟大家先分享path-to-regexp这个库为什么要先聊这个库哈, 主要原因是因为react-router中用到了这个库, 看了一下其实我们也没必要自己再去实现一个这个库...}其实我们这里我们跟react-router还有一点区别, 当他Route组件path没有的时候, 他也会直接渲染所匹配组件, 这里没有写, 为什么呢, 因为觉得他这样不合逻辑, 你path都没给我凭什么帮你渲染...官方逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router...}其实我们这里我们跟react-router还有一点区别, 当他Route组件path没有的时候, 他也会直接渲染所匹配组件, 这里没有写, 为什么呢, 因为觉得他这样不合逻辑, 你path都没给我凭什么帮你渲染

3.1K30

从零手写react-router

, 而官方是使用组件书写, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...封装自己生成match对象方法封装之前, 想跟大家先分享path-to-regexp这个库为什么要先聊这个库哈, 主要原因是因为react-router中用到了这个库, 看了一下其实我们也没必要自己再去实现一个这个库...时候, 有createBrowserHistory, createHashHistory等 * 所以我们Router里怎么都不能写死, 我们把history作为属性传递过来 * 而在外部我们根据不同组件来创建不同...}其实我们这里我们跟react-router还有一点区别, 当他Route组件path没有的时候, 他也会直接渲染所匹配组件, 这里没有写, 为什么呢, 因为觉得他这样不合逻辑, 你path都没给我凭什么帮你渲染...官方逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router

1.4K50

从零手写react-router

, 而官方是使用组件书写, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...封装自己生成match对象方法封装之前, 想跟大家先分享path-to-regexp这个库为什么要先聊这个库哈, 主要原因是因为react-router中用到了这个库, 看了一下其实我们也没必要自己再去实现一个这个库...时候, 有createBrowserHistory, createHashHistory等 * 所以我们Router里怎么都不能写死, 我们把history作为属性传递过来 * 而在外部我们根据不同组件来创建不同...}其实我们这里我们跟react-router还有一点区别, 当他Route组件path没有的时候, 他也会直接渲染所匹配组件, 这里没有写, 为什么呢, 因为觉得他这样不合逻辑, 你path都没给我凭什么帮你渲染...官方逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router

1.4K40

从零手写react-router_2023-03-01

, 而官方是使用组件书写, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...实现 聚合api 封装自己生成match对象方法 封装之前, 想跟大家先分享path-to-regexp这个库 为什么要先聊这个库哈, 主要原因是因为react-router中用到了这个库, 看了一下其实我们也没必要自己再去实现一个这个库...null就好了 } 其实我们这里我们跟react-router还有一点区别, 当他Route组件path没有的时候, 他也会直接渲染所匹配组件, 这里没有写, 为什么呢, 因为觉得他这样不合逻辑..., 你path都没给我凭什么帮你渲染, 为什么要提这一点哈, 因为认为我们去学习一个框架或者一个东西时候, 要带着自己思维逻辑去学(比如他为什么要这样做, 如果是你你会怎么做), 他不一定是对..., 我们从react-router官方逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上组件都不会在React组件树里存在 我们react-router目录下新建一个Switch.js

1.3K30

手写react-router

, 而官方是使用组件书写, 所以如果你对hooks还不是很明白的话, 得去补一下这方面的知识, 为什么要选择hooks, 因为现在绝大多数大厂react上基本都在大力推荐使用hook, 所以我们得跟上时代不是...封装自己生成match对象方法封装之前, 想跟大家先分享path-to-regexp这个库为什么要先聊这个库哈, 主要原因是因为react-router中用到了这个库, 看了一下其实我们也没必要自己再去实现一个这个库...时候, 有createBrowserHistory, createHashHistory等 * 所以我们Router里怎么都不能写死, 我们把history作为属性传递过来 * 而在外部我们根据不同组件来创建不同...}其实我们这里我们跟react-router还有一点区别, 当他Route组件path没有的时候, 他也会直接渲染所匹配组件, 这里没有写, 为什么呢, 因为觉得他这样不合逻辑, 你path都没给我凭什么帮你渲染...官方逻辑也可以想到大概是这么回事: 因为你使用了官方Switch以后匹配不上组件都不会在React组件树里存在我们react-router目录下新建一个Switch.js// react-router

1.3K40

一场升级 React-Router 带来‘血案’

二 问题背景 接下来介绍一下具体问题,最近有同学(化名小明)开发中遇到了一个问题,就是使用 React-Router 带来线上事故。...事故发生源头就是因为一个全局组件使用React-Router自定义 hooks —— useHistory,具体细节是这样。...显然这个不是最佳答案,首先我们应该从问题本质入手,为什么 react-router 不能通过 useHistory 订阅路由信息了。那么本质上到底改了些什么呢?...我们回到小明遇到问题,之前小明用 useHistory 来订阅路由变化,当路由更新,那么使用 useHistory 组件会重新渲染,因为之前逻辑是,路由更新就会更新 history 对象 。...react-router改版 上面知道了 context 订阅更新机制,那么为什么现在 useHistory ,那么新版本 react-router 改动了些什么呢?

1.4K30

ReactRouter知识点

本文讨论React Router版本是V5以上 react-routerreact-router-dom区别 为什么有时候我们看到如下写法: 写法1: import {Switch, Route...react-router-dom(用于浏览器环境): 基于react-router,加入了浏览器运行环境下一些功能,例如:Link组件,会渲染一个a标签,Link组件源码a标签行; BrowserRouter...react-router-dom依赖react-router,所以我们使用npm安装依赖时候,只需要安装相应环境下库即可,不用再显式安装react-router。...简而言之,一个 history 知道如何去监听浏览器地址栏变化, 并解析这个 URL 转化为 location 对象, 然后 router 使用它匹配到路由,最后正确地渲染对应组件。...StaticRouter不需要保持UI同步(以浏览器来说,我们url变化,UI对应更新,但可能是局部,会保留部分状态),由于服务端是无状态只要拿到对应组件渲染出HTML扔给客户端就行 这是理解

1.5K30

React一些 Router 必备知识点

于是React Router 使用方法为例,整理了一些知识点小记和大家分享~ React-Router 基本用法 通常我们使用 React-Router (https://reactrouter.com...后续对比 React-Router 版本发现,是因为 V4 版本中变更了其渲染逻辑,原因据说是为了践行 React 组件化理念,不能让 Route 标签看起来只是一个标签(奇怪知识又增加了)。...处理 URL ,除了问号带参数方式,React-Router 能帮我们做什么呢?在这其中,Route 组件 path 属性便可用于指定路由匹配规则。...路由基本原理 路由做事情:管控 URL 变化,改变浏览器中地址。 Router 做事情:URL 改变,触发渲染渲染对应组件。...但这种情况下 React-Router不能识别的,于是我们写了一个 Plugin 放在 Webpack 中,目的是将各个文件夹下路由汇总,并生成 router-config.js 文件。

2.8K40

React Router 邦邦两拳🥊 🥊

path2'); 导航栏 传统 使用react或Vue这种脚手架框架之前。之前写过boostarp导航栏,左侧导航栏是要在每个文件中都写一次。然后选中那页tab状态样式是选中样式。...: 基于react-router,加入了浏览器运行环境下一些功能。...例如:Link组件,会渲染一个a标签,Link组件源码a标签行BrowserRouter和HashRouter组件,前者使用pushState和popState事件构建路由,后者使用window.location.hash.../>} /> // 新版本 6.v 和渲染 会搜索其子元素,然后根据子元素路径找到匹配组件。...简而言之,一个 history 知道如何去监听浏览器地址栏变化, 并解析这个 URL 转化为 location 对象, 然后 router 使用它匹配到路由,最后正确地渲染对应组件

3.4K20

React一些 Router 必备知识点

于是React Router 使用方法为例,整理了一些知识点小记和大家分享~ React-Router 基本用法 通常我们使用 React-Router (https://reactrouter.com...后续对比 React-Router 版本发现,是因为 V4 版本中变更了其渲染逻辑,原因据说是为了践行 React 组件化理念,不能让 Route 标签看起来只是一个标签(奇怪知识又增加了)。...处理 URL ,除了问号带参数方式,React-Router 能帮我们做什么呢?在这其中,Route 组件 path 属性便可用于指定路由匹配规则。...路由基本原理 路由做事情:管控 URL 变化,改变浏览器中地址。 Router 做事情:URL 改变,触发渲染渲染对应组件。...但这种情况下 React-Router不能识别的,于是我们写了一个 Plugin 放在 Webpack 中,目的是将各个文件夹下路由汇总,并生成 router-config.js 文件。

2.6K20

「源码解析 」这一次彻底弄懂react-router路由原理

写在前面:为什么要学习react-router底层源码? 为什么要弄明白整个路由流程?...笔者个人感觉学习react-router,有助于我们学习单页面应用(spa)路由跳转原理,让我们理解从history.push,到组件页面切换全套流程,使我们面试时候不再为路由相关问题发怵,废话不说...react-router可以理解为是react-router-dom核心,里面封装了Router,Route,Switch等核心组件,实现了从路由改变到组件更新核心功能,我们项目中只要一次性引入...react-router-dom,react-router核心基础上,添加了用于跳转Link组件,和histoy模式下BrowserRouter和hash模式下HashRouter组件等。...react-router提供路由渲染组件,路由唯一性匹配组件,重定向组件等功能组件。 流程分析 当地址栏改变url,组件更新渲染都经历了什么???? 拿history模式做参考。

3.8K40

面试官又叫我手写 React-router决定好好理解路由本质

先用最简单的话来概括一下 React-router 到底做了什么? 本质上, React-Router 就是页面 URL 发生变化时候,通过我们写 path 去匹配,然后渲染对应组件。...核心库是 react-router. react-router-dom 是浏览器中使用react-router-native是 rn 中使用。 如果不理解,直接看一下源码就懂了。... 匹配外层,包裹了,作用是如果匹配了一个,则不会再继续渲染另外一个。如何实现? Route 中有 path 匹配路径,包裹则是渲染组件。...因此,当使用匿名函数渲染,请使用 render 或 children 。...React-router 使用了Compound components(复合组件模式),在这种模式中,组件将被一起使用,它们可以方便共享一种隐式状态,比如 Switch , 可以在这里通过 React.children

79230

使用React-Router实现前端路由鉴权

本文想写一下React-Router使用,但是光介绍API又太平淡了,而且官方文档已经写得很好了,这里就用一个常见开发场景来看看React-Router是怎么用吧。...然后我们就可以App.js里面引入React-Router做路由跳转了,注意我们浏览器上使用react-router-dom,新版React-Router将核心逻辑层和展示层分开了,核心逻辑会处理路由匹配等...RN相关路由监听和跳转 实际使用时,我们一般不需要引用react-router,而是直接用react-router-dom就行,因为它自己会去引用react-router。...但是对于需要登录才能访问页面和管理员页面我们不能直接渲染Route组件,我们最好再封装一个高级组件,将鉴权工作放到这个组件里面去,这样我们普通页面实现时就不需要关心怎么鉴权了。...封装高级组件 要封装这个鉴权组件思路也很简单,前面我们将publicRoutes直接拿来循环渲染了Route组件,我们鉴权组件只需要在这个基础上再加一个逻辑就行了:渲染真正Route组件前先检查一下当前用户是否有对应权限

2.3K41

React Router源码浅析

---- 前言 为什么去看React Router源码?...了解React Router实现原理 如何监听路有变化以及渲染对应组件 一直认为,会用框架和用好框架是有很大区别的,当用框架到一定程度时候,就需要看看框架对应生态中那些不可获取库,这样能加深不同框架中同样功能优秀实现方案...一般前端写web页面多数是使用react-router-dom这个库,那么react-routerreact-router-dom有什么区别呢?...其实react-router-dom是基于react-router再封装一个带有React DOM组件库,其中包括了Link、HashRouter、BrowserRouter等组件提供给开发者通过使用标签方式控制路由跳转...通过查看源码发现,react-router使用了一个history库来监听不同路由变化,react-router支持我们使用hash和bowser两种路由规则,所以history这个库可以根据调用

1.1K20

React项目中全量使用 Hooks

区别就是这,那么应用场景肯定是从区别中得到,useLayoutEffect渲染前执行,也就是说我们如果有状态变了需要依据该状态来操作DOM,为了避免状态变化导致组件渲染,然后更新 DOM 后又渲染,...当然这个不只是状态改变,在任何导致组件重新渲染,而且又要改变 DOM情况下都是 useLayoutEffect使用场景。...当然这种场景不多,useLayoutEffect 也不能多用,且使用时同步操作时长不能过长,不然会给用户带来明显的卡顿。...useRef细心同学有可能发现在上面写 useEffect 中有一个 timer 变量,将其定义了函数组件外面,这样写简单使用是没问题,但是如果该组件同一页面有多个实例,那么组件外部这个变量将会成共用...,如果将此函数传递到子组件,每次父组件渲染此函数更新,就会导致子组件也重新渲染,可以通过传递第二个参数以避免一些非必要性渲染

3K51
领券