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);
相关推荐
村上小树1 小时前
非常简单地学习一下shareDB的原理
前端·javascript
卤蛋fg62 小时前
VxeTable 实现表尾合计行并支持数据实时统计
vue.js
Hilaku2 小时前
求求你们🙏 ,别再换打包工具了?
前端·javascript·程序员
用户新2 小时前
V8引擎 精品漫游指南--Ignition篇(下 二) JavaScript 栈帧详解
前端·javascript
得闲喝茶2 小时前
JavaScript在数据处理的应用
开发语言·前端·javascript·经验分享·笔记
杨大厨wd2 小时前
Vue3 业务组件封装别只会传 props:如何设计一个真正好用的组件
vue.js
前端那点事2 小时前
Vue3 script setup 语法糖最全教程!零基础吃透+项目落地+面试满分
前端·vue.js
费曼学习法3 小时前
React Hooks 源码级揭秘:为什么必须按顺序调用?
javascript·react.js
卷帘依旧3 小时前
Vue 响应式原理:Object.defineProperty vs Proxy 深度对比
前端·vue.js
之歆3 小时前
DAY_20JavaScript 条件语句与循环结构深度学习(二)
前端·javascript