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);
相关推荐
SuperEugene1 小时前
Vue生态精选篇:Element Plus 的“企业后台常用组件”用法扫盲
前端·vue.js·面试
Neptune11 小时前
JavaScript回归基本功之---类型判断--typeof篇
前端·javascript·面试
进击的尘埃1 小时前
微前端沙箱隔离:qiankun 和 wujie 到底在争什么
javascript
子兮曰2 小时前
后端字段又改了?我撸了一个 BFF 数据适配器,从此再也不怕接口“屎山”!
前端·javascript·架构
颜酱4 小时前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
比尔盖茨的大脑5 小时前
事件循环底层原理:从 V8 引擎到浏览器实现
前端·javascript·面试
bluceli5 小时前
Vue 3 Composition API深度解析:构建可复用逻辑的终极方案
前端·vue.js
程序员ys5 小时前
前端权限控制设计
前端·vue.js·react.js
卓卓不是桌桌5 小时前
如何优雅地处理 iframe 跨域通信?这是我的开源方案
javascript·架构
滕青山5 小时前
腾讯域名拦截查询 在线工具核心JS实现
前端·javascript·vue.js