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

React Router v6中如何通过嵌套路由实现详情组件单独展示?

解决React Router v6嵌套路由中列表与详情分离显示的问题

这个问题的核心在于你当前把PizzaDetails设置成了Pizzas的子路由,所以Pizzas组件里的<Outlet />会把详情内容渲染在列表下方。要实现两者分开独立显示,我们只需要调整路由结构,让它们成为共享Sidebar布局的同级路由即可。

步骤1:修改路由配置文件(routes.js)

将PizzaDetails从Pizzas的children数组中移出,作为Sidebar的直接子路由,这样两个组件就会各自独立渲染:

import Sidebar from "./components/Layout/sidebar/Sidebar";
import Pizzas from "./screens/Pizzas/pizzasScreen";
import PizzaDetails from "./screens/PizzaDetails/pizzaDetails";
const routes = [
  {
    path: "/",
    element: <Sidebar />,
    children: [
      {
        path: "/pizzas",
        element: <Pizzas/>
      },
      {
        path: "/pizzas/:id",
        element: <PizzaDetails />
      }
    ],
  },
];
export default routes;

步骤2:移除Pizzas组件中的Outlet

因为现在PizzaDetails不再是Pizzas的子路由了,所以Pizzas组件里的<Outlet />可以删掉,这样列表页面就只会显示列表内容:

import React from "react";
import { Link } from "react-router-dom";
const Pizzas = () => {
  return (
    <div>
      <p>Example of pizzas</p>
      <Link to="/pizzas/1">
        <span>Pizza 1</span>
      </Link>
    </div>
  );
};
export default Pizzas;

关键注意点

确保你的Sidebar组件内部包含了<Outlet />,因为父路由的element需要通过<Outlet />来渲染它的子路由内容。如果Sidebar里还没有的话,记得加上:

// Sidebar组件示例
import { Outlet } from 'react-router-dom';

const Sidebar = () => {
  return (
    <div className="sidebar-layout">
      {/* 你的侧边栏内容 */}
      <Outlet /> {/* 这里用来渲染Pizzas或PizzaDetails */}
    </div>
  );
};

这样修改后,访问/pizzas时只会显示披萨列表,点击链接跳转到/pizzas/1时就只会显示对应的详情内容,两者完全独立,不会同时出现在页面上了。

内容的提问来源于stack exchange,提问作者S.Marx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:54:10