css - React Router 似乎会阻止自定义 CSS

标签 css reactjs react-router

我一直在为我的网络应用程序开发 React Bootstrap 导航栏,并且在设计它时遇到了一些挫折。本质上,我试图使用自定义 CSS 和 classNames 为我的导航栏设置自定义背景颜色,但颜色是否显示似乎取决于用户访问的路线。

当我访问任何“主要”路线时,颜色会按预期显示(例如,//about/donate 显示为this)。然而,每当我访问任何“辅助”路线时,似乎 CSS 都被完全忽略了(例如 /help/contact/donate/methods 看起来像 this )。在上述所有示例中,基本 URL 均为 localhost:3000。我正在使用 React Router ('react-router-dom') 来处理路由,并使用 React Bootstrap 来创建我的导航栏。

要应用自定义背景颜色,我只需向导航栏对象添加一个 className:

'../components/AppNavBar'

<Navbar variant="light" className=custom-color-1>
  *Navbar contents*
</Navbar>

并在直接链接到index.html的自定义CSS文件中选择此类:

.custom-color-1 {
  background-color: #B3E5FC;
}

这些是我运行的测试,使我得出这个结论:

  1. 从“/”或“/ff”访问主页会正常显示导航栏,但通过“/ff/ff”访问同一页面会导致导航栏变成白色。
  2. 创建两个几乎相同的简约页面,并将其中一个路由到“/test”,另一个路由到“/test/route”后,前者正常显示,后者变为白色。这两个文件之间的唯一区别是文件名称和导出名称。下面提供了其中之一的示例。

import React from 'react';

import AppNavBar from '../components/AppNavBar';

const TestPage1 = () => {
    return(
        <>
            <AppNavBar />
            Sample text.
        </>
    );
};

export default TestPage1;

此外,使用 Chrome DevTools 时,两个页面之间的 DOM 看起来是相同的。这是最令我困惑的部分。在适当应用样式的页面上,我可以看到我的自定义 className 出现在 DevTools 面板的“样式”选项卡中,并具有适当的 backgroundColor 属性。在其他页面上,它完全消失了!影响此行为的唯一因素似乎是每个页面映射到的路由。这是 React Router 的一个错误,还是我只是忽略了一些东西?

我在某些页面上对文本颜色进行了类似的测试。在导航栏样式正确的页面上,我可以使用 className 和自定义 CSS(使用颜色:#FAFAFA; 属性)。在导航栏样式不正确的页面上,我无法更改文本颜色。因此,这似乎不是 React Bootstrap Navbar 的问题。

编辑:还注意到我的所有自定义样式表开始出现“资源解释为样式表但使用 MIME 类型 text/html 传输”错误。我的 index.html 文件的副本可以在我制作的 sandbox 中找到,它重现了我的问题。

最佳答案

我在这里看到两个问题。

  1. 您正在使用相对路径链接到样式表
  2. 您没有使用正确的链接组件

有关上述内容的更多详细信息:

  1. 您正在使用相对路径 ( ./style.css ) 链接到您的 style.css文件。这适用于顶级路径,因为 style.css 的相对路径是正确的。但在第二级路径上,相对路径不再正确。

    将链接更改为 style.css

    <link rel="stylesheet" href="/style.css" />
    
  2. 您没有使用正确的链接组件,这使得上述问题更加复杂。目前,当单击导航链接时,页面会使用新路线刷新,而不是作为单页面应用程序运行。

    您需要更新 <Nav.Link>组件使用 Link组件,如下所示:

    import { Link } from "react-router-dom";
    
    <Nav.Link as={Link} to="/other/1">
    

    注意 asto Prop 。这将使<Nav.Link>作为 <Link/> 工作组件和应用程序将作为单页应用程序运行。

此外,自从 <AppNavBar />用于每条路线,您应该考虑将其从各个路线组件中移出,以便在所有路线上使用。

关于css - React Router 似乎会阻止自定义 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59700937/

相关文章:

javascript - 如何在两个组件之间传递数据,React Native

javascript - 数组的不变性更新助手中的动态键

javascript - "Uncaught TypeError: history.push is not a function"发生错误

html - Div 元素位于其兄弟元素下方,其自己的子元素位于其上方

CSS2 替代文本换行 : none

html - 固定导航菜单内容在放大时不随页面水平滚动

reactjs - 使用 React (2/redux-form) 模拟将值粘贴到字段中

css - 应用没有特定子列的 CSS

reactjs - React 路由器访问路由组件中的路由属性

javascript - React.js,ES6,如何访问ES6类中的react-router Lifecycle?