You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在react-router-v6中获取上一页URL?

在React Router v6中获取上一页URL的方法

React Router v6没有提供直接获取上一页URL的内置API,但可以通过以下两种常用方式实现需求:

方法一:自定义Hook监听路由变化

利用useLocation结合useRef记录上一次的路由地址,适合全局追踪浏览历史的场景:

步骤1:创建自定义Hook

import { useLocation, useEffect, useRef } from 'react';

function usePreviousLocation() {
  const location = useLocation();
  const prevLocationRef = useRef();

  useEffect(() => {
    // 每次路由变化时,保存当前地址为上一页地址
    prevLocationRef.current = location;
  }, [location]);

  // 返回上一页的路径名,首次进入应用时为undefined
  return prevLocationRef.current?.pathname;
}

步骤2:在组件中使用

import { usePreviousLocation } from './hooks';

const MyComponent = ({ x }) => {
  const prevUrl = usePreviousLocation();

  // 基于上一页URL的条件逻辑
  const result = prevUrl === '/someUrl' ? x + 2 : x - 2;

  // 打印上一页URL
  console.log('上一页URL:', prevUrl);

  return <div>计算结果:{result}</div>;
};

方法二:跳转时通过state传递来源地址

如果是从特定页面跳转过来,可以在跳转时主动传递上一页地址,适合明确跳转来源的场景:

步骤1:跳转页面传递状态

在发起跳转的页面(如PageA)中,将当前路径作为state参数传递:

import { useNavigate, useLocation } from 'react-router-dom';

const PageA = () => {
  const navigate = useNavigate();
  const location = useLocation();

  const goToTargetPage = () => {
    // 传递当前页面路径作为来源地址
    navigate('/target-page', { state: { from: location.pathname } });
  };

  return <button onClick={goToTargetPage}>跳转到目标页面</button>;
};

步骤2:目标页面获取来源地址

在目标页面中,通过useLocation获取传递的state:

import { useLocation } from 'react-router-dom';

const TargetPage = ({ x }) => {
  const location = useLocation();
  // 取出上一页地址,添加兜底值避免undefined
  const prevUrl = location.state?.from ?? '无来源地址';

  const result = prevUrl === '/pageA' ? x + 2 : x - 2;

  console.log('上一页URL:', prevUrl);

  return <div>计算结果:{result}</div>;
};

注意事项

  • 方法一的自定义Hook会记录每次路由变化的上一页地址,但首次进入应用时prevUrl为undefined,需做兜底处理。
  • 方法二的state仅在通过navigate跳转时有效,若用户直接输入URL进入页面,state会不存在,因此要添加默认值。

内容的提问来源于stack exchange,提问作者Sky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:05:42