当前位置: 首页 > news >正文

react获取访问过的路由历史记录

看了下,好像没有很好的解决方案,之前的useHistory现在也用不了了,

chatgpt说使用useMatch,也报错

看了下浏览器原生的。本来浏览器就会限制这个histroy的读取,只能获取length

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/history

那考虑useEffect每次在location.pathname 进行变化的时候,直接进行存取队列。~~ 自己手动做吧。


const RouterComponent = (router: any) => {const location = useLocation()// 每一次路由变化的时候,去更新useEffect(() => {store.dispatch(setLastRouter(location.pathname))}, [location.pathname])return (<><Routes>{routers.map((router) => (<Routepath={router.path}element={router.authentication ? (<Authentication>{router.element}</Authentication>) : (router.element)}key={router.path}></Route>))}</Routes></>)
}

然后

import { PayloadAction, createSlice } from "@reduxjs/toolkit"
import { RootState } from "./store"interface taskState {router: { lastRouter: null; currentRouter: null }
}
const initialState: taskState = {router: { lastRouter: null, currentRouter: null },
}export const taskSlice = createSlice({name: "task1111",initialState,reducers: {setLastRouter: (state, action: PayloadAction<any>) => {state.router.lastRouter= state.router.currentRouterstate.router.currentRouter = action.payload}},
})export const { setLastRouter } = taskSlice.actions
export const selectLastRouter = (state: RootState) => state.task.router.lastRouter
export default taskSlice.reducer

但是,发现有问题啊啊啊,store的更新是惰性的,

chatgpt说,可以给他强制更新,但好像又不太好,如果需要所有的历史长度,或许可以

this.forceUpdate(); // 强制重新渲染组件

或者包一个connect
export default connect(mapStateToProps, mapDispatchToProps, null, { shouldComponentUpdate: () => true })(Counter);

(未验证)

后来请教了下大神,实际上可以在组件销毁方法里去监听,原理和去监听路由一样的,而且这样可以更好的~去维护,不用浪费全局的router资源。

【销毁组件的方法就更简单了……直接useEffect里return出去就行,用的少竟然忘记掉了】

这样每次读去到type的时候,可以再去取消掉,有点类似订阅的机制,总之更好管理。

感叹一下还是得

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 强制升级最新系统,微软全面淘汰Win10和部分11用户
  • 香橙派AIpro部署YOLOv5:探索强悍开发板的高效目标检测能力
  • 一键优雅为Ubuntu20.04服务器挂载新磁盘
  • 产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)
  • Cesium--获取当前相机中心与地面的射线焦点
  • 处理线程安全的列表CopyOnWriteArrayList 和Collections.synchronizedList
  • Java中的输入输出
  • [misc]-流量包-wireshark-icmp
  • wifi信号处理的CRC8、CRC32
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十三)-更换无人机控制器
  • uniapp引入 uview( HBuilder 和 npm 两种安装方式) #按需引入
  • Leetcode3202. 找出有效子序列的最大长度 II
  • 【高中数学/幂函数】比较a=2^0.3,b=3^0.2,c=7^0.1的大小
  • 【面试题】Golang 之Channel底层原理 (第三篇)
  • 前端Vue组件化实践:自定义加载组件的探索与应用
  • ➹使用webpack配置多页面应用(MPA)
  • canvas 五子棋游戏
  • DataBase in Android
  • Java基本数据类型之Number
  • Nodejs和JavaWeb协助开发
  • Vue ES6 Jade Scss Webpack Gulp
  • Zsh 开发指南(第十四篇 文件读写)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 基于Android乐音识别(2)
  • 坑!为什么View.startAnimation不起作用?
  • 蓝海存储开关机注意事项总结
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 最近的计划
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #### go map 底层结构 ####
  • #android不同版本废弃api,新api。
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (33)STM32——485实验笔记
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (zhuan) 一些RL的文献(及笔记)
  • (八)c52学习之旅-中断实验
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)斐波那契Fabonacci函数
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)计算机毕业设计大学生兼职系统
  • (回溯) LeetCode 40. 组合总和II
  • (三)uboot源码分析
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)为什么要选择C++
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET CLR基本术语
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Remoting学习笔记(三)信道
  • .NET 表达式计算:Expression Evaluator