【问题标题】:React Router v6 | FavIcon based on Route反应路由器 v6 |基于路由的收藏夹图标
【发布时间】:2023-01-16 22:32:29
【问题描述】:

使用React Router v6,我有一个基本的路由设置,如下所示:

<Routes>
    <Route index path={'/'} element={<Foo />} exact />
    <Route index path={'/bar/*'} element={<Bar />} />
</Routes>

问题:

基于 Route 更改 FavIcon 的正确(本机)方法是什么?
-没有任何额外的库!



寻找一个原生的 React 解决方案来根据来自 React Router 的活动 Route 更改 FavIcon

所以只是为了澄清,我不想要任何解决方案,包括:

  • document.getElementBy...()
    和/或
  • document.querySelector()

  • 反应 17 / 18
  • React 路由器 Dom 6.6.2
  • 反应脚本 5.0.1

【问题讨论】:

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


    【解决方案1】:

    使用 React Router v6 基于路由更改 FavIcon 的最佳方法是使用 useLocation 挂钩。此挂钩允许您访问当前位置并读取路径名,这可用于确定活动路线。

    获得活动路由后,您可以使用 React Helmet 库或内置 HTML 标签来动态更改 FavIcon。下面是一个使用 React Helmet 库的示例:

    import { useLocation } from 'react-router-dom';
    
    const MyApp = () => {
        const location = useLocation();
    
        // Detect changes to location pathname and update favicon href
        React.useEffect(() => {
            let favIconUrl = '/favicon.ico';
            if (location.pathname === '/foo') {
                favIconUrl = '/favicon-foo.ico';
            } else if (location.pathname === '/bar') {
                favIconUrl = '/favicon-bar.ico';
            }
            const element = document.querySelector("link[rel='shortcut icon']");
            element.setAttribute('href', favIconUrl);
        }, [location.pathname]);
    
        return (
            <div>
                {/* Routes, components etc. */}
            </div>
        );
    };
    
    export default MyApp;
    

    【讨论】:

    • 我不想添加另一个库。
    • 另一种选择是使用 useEffect 挂钩检测位置路径名的更改,并使用 document.querySelector 和 setAttribute 方法在路径名更改时更新网站图标 href 属性。这看起来像这样:
    猜你喜欢
    • 2021-10-17
    • 2021-03-29
    • 1970-01-01
    • 2020-10-04
    • 2022-01-14
    • 1970-01-01
    • 2022-01-11
    • 2021-03-17
    • 2018-09-06
    相关资源
    最近更新 更多