问题描述
在我使用history库的createHashHistory创建history对象时,使用history.push进行页面跳转的时候,url 变化,但是页面没有渲染。

import {createHashHistory } from 'history'
const history = createHashHistory({window})
history.push("/");

解决方法
经查阅是因为push操作只是修改了props里的属性,不会触发页面渲染,还需要监听 history 的变化,手动重新渲染页面。(可参考:: react-router-dom v6 组件外使用路由跳转
因为太麻烦,没有采用。
最终使用了react-router-dom中的useNavigate进行页面跳转。

import { useNavigate } from 'react-router-dom'
const navigate = useNavigate()//useNavigate需要在函数组件内部使用
navigate("/");

navigate的使用方法可以参考博客:react-router-dom 在hook中的使用 v6 和 v5的对比

需要注意的是:,useNavigate方法只能在函数式组件中使用, 在类组件中是不能够使用hooks的。

在这里插入图片描述

函数式组件和类组件的区别

函数式组件和类组件都能实现相同的效果。但是他们有一些区别,体现在两个方面:

①设计思想不同:函数式组件是函数式编程思想,而类组件是面向对象编程思想。面向对象编程将属性和方法封装起来,屏蔽很多细节,不利于测试

②类组件有状态管理,而函数式组件的状态需要使用useState自定义。

③创建组件时,函数式组件只需调用函数即可创建组件,而类组件必须先实例化一个对象,然后通过这个实例化对象调用render函数来创建组件

④类组件是用生命周期钩子函数来实现业务逻辑的,而函数式组件使用react Hooks来实现业务逻辑。

Q.E.D.


悟已往之不谏,知来者之可追

江子辰,读书人,爱文学,软件工程理工男,IP浙江在职,从业五年。主攻前端方向技术研发,副攻Unity 3D、IOS客户端、Python人工智能等。2021年被评为华为云享专家,阿里云专家博主,前端领域优质创作者等,都是虚名。

新网站链接:https://jiangsihan.cn/frontend