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);
相关推荐
菜鸟‍10 分钟前
【前端学习】阿里前端面试题
前端·javascript·学习
用户479492835691518 分钟前
告别span嵌套地狱:CSS Highlights API重新定义语法高亮
前端·javascript·css
慧一居士2 小时前
Vue中 class 和 style 属性的区别对比
前端·vue.js
九章云极AladdinEdu3 小时前
项目分享|告别枯燥命令行,构建终端用户界面的 TypeScript 库
javascript·ui·typescript
带着梦想扬帆启航3 小时前
UniApp 多个异步开关控制教程
前端·javascript·uni-app
小高0073 小时前
JavaScript 内存管理是如何工作的?
前端·javascript
是大林的林吖3 小时前
解决 elementui el-cascader组件懒加载时存在选中状态丢失的问题?
前端·javascript·elementui
鹏仔工作室3 小时前
elemetui中el-date-picker限制开始结束日期只能选择当月
前端·vue.js·elementui
默 语4 小时前
Electron 应用中的系统检测方案对比与鸿蒙适配实践
javascript·electron·harmonyos·gwo