React实现类似Vue的路由监听Hook

React实现类似Vue的路由监听Hook

  • 监听路由变化;
  • React Hook封装,返回回调函数,新旧路由为函数参数;

代码

javascript 复制代码
import { useEffect, useRef } from 'react';
import { useHistory, useLocation } from 'react-router-dom';

/**
 * 监听路由变化
 * @param callback
 */
const useRouteChange = (callback: (prevLocation: string, newLocation: string) => void) => {
  const location = useLocation();
  const history = useHistory();
  const prevLocation = useRef(location.pathname);

  useEffect(() => {
    const unListen = history.listen(newLocation => {
      callback(prevLocation.current, newLocation.pathname);
      prevLocation.current = newLocation.pathname;
    });

    return () => {
      unListen();
    };
  }, [history, callback]);
};

export default useRouteChange;

使用

javascript 复制代码
  const routeChange = useCallback((prevLocation, newLocation) => {
    console.log(`RouteChange:From ${prevLocation} To ${newLocation}`);
  }, []);

  useRouteChange(routeChange);
相关推荐
小大宇11 小时前
Vue知识点6-computed计算属性
前端·javascript·vue.js
程序员海军11 小时前
尤雨溪 : Vue 4 已经在规划中了!
前端·javascript·vue.js
2601_9499706911 小时前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
天外飞雨道沧桑14 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
鶴哥只手遮天14 小时前
jQuery 4.0 源码架构与工程实践-第 01 章 · 全景与工程结构:一个 20 岁库的自省
前端·javascript·jquery
徐小夕14 小时前
doc2docx方案,开源!
前端·vue.js·github
徐小夕15 小时前
JitOFD:一款面向信创与档案场景的 Web 端 OFD 编辑器
前端·vue.js·github
inksci15 小时前
在线编辑表格,功能强大,json互转
前端·javascript·html
咩咩啃树皮16 小时前
JavaScript 中 this 指向为什么总在变?
开发语言·前端·javascript
星光开发者16 小时前
基于springboot智慧草场牛羊管理系统-计算机毕设【课程设计】50360
vue.js·spring boot·后端·mysql·php·课程设计·express