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

React Router v6:路径缺失时如何自动重定向到正确路径?

React Router v6 实现父路由自动重定向到默认子路由

你的场景是访问 /recipe/:id 时,希望自动跳转到 /recipe/:id/ingredients,可以通过以下两种方式实现:

方法一:添加索引路由(推荐)

React Router v6 中的索引路由专门用于处理父路由匹配但没有子路由路径的情况。只需在父路由下添加带 index 属性的路由,通过 Navigate 组件完成重定向。

先简化路由配置(子路由可用相对路径,无需重复父路由的完整路径),再添加索引路由:

<Route path='/recipe/:id' element={<RecipePage />}>
    {/* 索引路由:匹配 /recipe/:id 时自动重定向到 ingredients 子路由 */}
    <Route index element={<Navigate to="ingredients" />} />
    {/* 子路由使用相对路径更简洁 */}
    <Route path='ingredients' element={<Ingredients />} />
    <Route path='instructions' element={<Instructions />} />
</Route>

这里的 to="ingredients" 是相对路径,React Router 会自动基于当前匹配的父路由路径(/recipe/:id)拼接成完整路径 /recipe/:id/ingredients。

方法二:在组件内判断并重定向

如果需要依赖组件内逻辑(比如数据加载完成后再重定向),可以在 RecipePage 组件中使用 useNavigate 和 useParams 钩子:

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

function RecipePage() {
  const navigate = useNavigate();
  const { id } = useParams();

  useEffect(() => {
    if (data) {
      // 判断当前路径是否为父路由根路径,是的话执行重定向
      const currentPath = window.location.pathname;
      if (currentPath === `/recipe/${id}`) {
        navigate(`/recipe/${id}/ingredients`);
      }
    }
  }, [data, id, navigate]);

  // 原组件渲染内容...
}

不过这种方法不如索引路由简洁,推荐优先使用方法一。

额外优化提示

你原本的子路由写了完整路径 /recipe/:id/ingredients,其实在父路由下可以直接写相对路径 ingredients,路由会自动继承父路由的路径参数和前缀,代码更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:33:31