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

React与React Router DOM中布局页面同级组件props传递方法

解决方法

方法一:通过路由配置的meta字段传递标题(推荐)

这种方式能把页面标题统一管理在路由配置中,不用在组件里单独传props,逻辑更清晰。

  1. 修改路由配置,为目标路由添加meta字段存储标题:
const router = createBrowserRouter([
  {
    element: (
      <>
        <GlobalStyles />
        <MainLayout />
      </>
    ),
    children: [
      {
        path: '/',
        element: <Dashboard />,
        meta: { title: 'Dashboard' } // 将标题存入路由元信息
      }
    ]
  }
]);
  1. 在Header组件中用useMatches钩子获取当前路由的meta信息:
import { useMatches } from 'react-router-dom';

export default function Header() {
  const matches = useMatches();
  // 取最内层的路由匹配项,提取标题
  const currentRoute = matches[matches.length - 1];
  const pageTitle = currentRoute?.meta?.title || '默认标题';

  return (
    <header>
      <h1>{pageTitle}</h1>
    </header>
  );
}

方法二:通过Outlet上下文动态传递标题(适合动态场景)

如果标题需要根据组件内的状态动态变化(比如从接口获取的标题),可以用这种方式:

  1. 修改MainLayout,用状态管理标题,并把更新函数通过Outlet上下文传给子组件:
import { Outlet } from 'react-router-dom';
import { useState } from 'react';

export default function MainLayout() {
  const [pageTitle, setPageTitle] = useState('默认标题');

  return (
    <>
      <Header title={pageTitle} />
      <Outlet context={{ setPageTitle }} />
    </>
  );
}
  1. 在Dashboard组件中接收上下文并设置标题:
import { useOutletContext } from 'react-router-dom';
import { useEffect } from 'react';

export default function Dashboard() {
  const { setPageTitle } = useOutletContext();
  
  // 组件挂载时设置标题,也可根据组件内状态动态更新
  useEffect(() => {
    setPageTitle('Dashboard');
    return () => setPageTitle('默认标题'); // 可选:组件卸载时重置标题
  }, [setPageTitle]);

  return (
    <div>
      {/* Dashboard内容 */}
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:50:09