如何找出 React 中正在渲染的 Router 组件?

How to find out which Router component is being rendered in React?

我有一个 Navbar 组件,我正在尝试使用 styled-components 以不同的 CSS 样式呈现它,以呈现正在呈现的组件路由。我如何检查该组件是否正在渲染?

const NavbarContainer = styled.div`
  height: 115px;
  font-family: 'Domine', serif;
  align-content: center;
  align-items: center;
  position: absolute;
  z-index: 4;
  width: 100vw;
  overflow: hidden;

  &:hover {
    background-color: white;
    color: black !important;
  }
`;

让我们说这个组件,我想在登录页面中将 position: absolute 更改为 position: static 但我希望在主页中将其保留为 position: absolute 。我怎样才能做到这一点?

一个想法是将您的组件包装在另一个组件中 喜欢 在登录页面

const NavWrapper = styled.div`
>div{
 position: static 
}
`
<NavWrapper>
<NavbarContainer/>
</NavWrapper>

您可以使用基于登录路径的条件样式来实现此目的

<Appbar style={{ position: pathname === '/login' ? 'static' : 'absolute' }}></Appbar>

创建一个特定于登录路由的 NavbarContainer 版本并覆盖 position 规则,并使用布局路由以适当的 layout/navbar 呈现适当的路由。

示例:

const NavbarContainer = styled.div`
  height: 115px;
  font-family: 'Domine', serif;
  align-content: center;
  align-items: center;
  position: absolute;
  z-index: 4;
  width: 100vw;
  overflow: hidden;

  &:hover {
    background-color: white;
    color: black !important;
  }
`;

const StaticNavbarContainer = styled(NavbarContainer)`
  position: static;
`;

...

import { Outlet } from 'react-router-dom';

const NavbarLayout = ({ children }) => (
  <>
    <NavbarContainer>{children}</NavbarContainer>
    <Outlet />
  </>
);

const StaticNavbarLayout = ({ children }) => (
  <>
    <StaticNavbarContainer>{children}</StaticNavbarContainer>
    <Outlet />
  </>
);

...

<Routes>
  <Route
    element={(
      <NavbarLayout>
        // ... render links here as children
      </NavbarLayout>
    )}
  >
    <Route path="/" element={<Home />} />
    // ... routes to render with absolute positioned navbar
  </Route>

  <Route
    element={(
      <StaticNavbarLayout>
        // ... render links here as children
      </StaticNavbarLayout>
    )}
  >
    <Route path="/login" element={<Login />} />
    // ... other routes with static positioned navbar
  </Route>

  // ... other routes without navbars
</Routes>