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);
相关推荐
zzlyx9927 分钟前
IoTSharp前端VUE采用npm run build编译提示require() of ES Module 出错
前端·vue.js·npm
加洛斯39 分钟前
前端小知识003:JS中 == 与 === 的区别
开发语言·前端·javascript
G***E3161 小时前
前端路由懒加载实现,Vue Router与React Router
前端·vue.js·react.js
半桶水专家2 小时前
ES Module 原理详解
前端·javascript
冴羽2 小时前
Cloudflare 崩溃梗图
前端·javascript·vue.js
Jonathan Star2 小时前
JavaScript 中,原型链的**最顶端(终极原型)只有一个——`Object.prototype`
开发语言·javascript·原型模式
前端摸鱼匠3 小时前
Vue 3 的watchEffect函数:介绍watchEffect的基本用法和特点
前端·javascript·vue.js·前端框架·ecmascript
拉不动的猪4 小时前
基本数据类型Symbol的基本应用场景
前端·javascript·面试
天庭鸡腿哥4 小时前
谷歌出品,堪称手机版PS!
javascript·智能手机·eclipse·maven
Lsx-codeShare4 小时前
一文读懂 Uniapp 小程序登录流程
前端·javascript·小程序·uni-app