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);
相关推荐
FogLetter4 小时前
当JavaScript学会“分身术”:异步编程的进化简史
前端·javascript·面试
java1234_小锋4 小时前
Vue3+Vite简介以及构建第一个HelloWorld实例
前端·javascript·vue.js·vite
天天鸭6 小时前
5 万处中文的老项目实现国际化,如何用架构思维完成改造?
前端·javascript·架构
西门啐血6 小时前
Vue 缓存之坑,变量赋值方式和响应式数据
前端·vue.js·缓存
观察员7 小时前
Vue3 猜字游戏前端实战:从零搭建聊天交互界面
vue.js
月月大王的3D日记7 小时前
Three.js 入门系列(7):让甜甜圈围着我转 —— 3D文字生成
前端·javascript
半兽先生8 小时前
深度对比:Mapbox GL JS vs Maptalks,WebGIS 开发该如何选型?
开发语言·javascript·ecmascript
only-lucky9 小时前
QML深入学习五(Controls模块)
前端·javascript·学习
其美杰布-富贵-李10 小时前
第 5 篇:Object3D、Group 与场景树
javascript·three.js
海带紫菜菠萝汤10 小时前
H.264 宏块划分与码率分配机制:影响压缩效率的关键参数详解
前端·javascript·音视频