【问题标题】:How to change title of the page of React-Router v6+ in history menu如何在历史菜单中更改 React-Router v6+ 页面的标题
【发布时间】:2022-12-03 13:37:38
【问题描述】:

SO 上有一些这样的问题,但它们已经过时且过时了,解决方案不再有效

我怎样才能更改页面的标题,使我在“历史记录”菜单中没有相同的名称?

我在尝试过的文档中找不到任何内容:

<Link to="/home" title="Home"/>

但它不起作用,我正在查看代码:

export interface LinkProps
  extends Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, "href"> {
  reloadDocument?: boolean;
  replace?: boolean;
  state?: any;
  to: To;
}

没有标题只有状态对象。

该状态在 v5 的迁移指南中可见,但没有说明它的用途。我猜这是一个历史状态对象,但它与标题 AFAIK 无关。

有没有什么办法可以改变历史的标题?对于修改历史标题的路由库来说,这似乎是很常见的行为。

【问题讨论】:

  • 您可以在路由状态中传递标题,并在接收路由组件上更新页面标题,或者创建一个自定义 Link 组件在 onClick 处理程序中执行此操作,如果是你所指的。
  • @DrewReese 我需要检查这是否有效,因为我只关心历史菜单的标题而不是文档的标题。如果它们由历史 API 处理,则页面标题将与历史菜单无关。

标签: reactjs react-router react-router-dom


【解决方案1】:

通过title

给出下面的 React Router 6 代码:

// App.jsx
<Routes>
  <Route path="/home" element={<HomePage />} />
  <Route path="/about" element={<AboutPage />} />
</Routes>

可以修改如下,将自定义标题传递给相应的组件:

// App.jsx
<Routes>
  <Route path="/home" element={<HomePage title="Home"/>} />
  <Route path="/about" element={<AboutPage title="About" />} />
</Routes>

// HomePage.jsx
export function HomePage(props) {
  useEffect(() => document.title = props.title, [])
  
  return <div>...</div>
}

然后 Link 就可以照常使用了。
它可以通过应用 HOC pattern 进一步“美化”——将标题修改逻辑从每个 element 组件移动到 HOC。


解析网址

或者,可以预先定义一个路由到标题的映射,并在 url 更改时响应式地更新文档的标题:

// App.jsx
const titles = {
  '/home': 'Home',
  '/about': 'About',
}

function App() {
  const location = useLocation()
  useEffect(
    () => (document.title = titles[location.pathname] ?? 'Hello World'),
    [location],
  )

  return (
    <Routes>
      <Route path="/home" element={<HomePage />} />
      <Route path="/about" element={<AboutPage />} />
    </Routes>
  )
}

尽管 url 参数需要一些额外的解析。

【讨论】:

  • 感谢您的回答,我需要检查这是否可行,因为当您右键单击后退按钮(在 Chrome 中)时,我只关心历史菜单的文档标题。
  • 它可以工作,我预计它不会工作,因为您不访问history.pushState 但它按预期工作。
  • 高兴听到! :)
猜你喜欢
  • 2020-12-07
  • 2022-07-18
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2022-08-20
  • 2015-09-04
  • 2021-12-27
相关资源
最近更新 更多