【问题标题】:header to be show only in "/" and "/checkout" react reuter dom标头仅在“/”和“/checkout”中显示
【发布时间】:2021-12-03 10:13:55
【问题描述】:

我希望仅在“/checkout”和“/”期间可见,而不是在整个路径中可见。 在 react reuter dom v6 中很难做到。

import React from "react";
import "./App.css";
import Header from "./Header";
import Home from "./Home";
import Checkout from "./Checkout";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Login from "./Login";

function App() {
  return (
    // BEM
    <BrowserRouter>
      <div className="app">
        <Header />
        <Routes>
          <Route path="/" element={<Home />}></Route>
          <Route path="/checkout" element={<Checkout />}></Route>
          <Route path="/login" element={<Login />}></Route>
        </Routes>
      </div>
    </BrowserRouter>
  );
}

export default App;

【问题讨论】:

    标签: reactjs react-native react-dom-server


    【解决方案1】:

    您可以在Header 组件中使用useLocation() 挂钩并检查pathname 以获取渲染所需的条件。

    Header.js

      import { useLocation } from "react-router-dom";
      ....
      const { pathname } = useLocation();
    

    JSX

    return (
      <div>
         {!pathname.includes("login") && <div>Not Login page</div>}
      </div>
    )
    

    【讨论】:

      【解决方案2】:

      react-router v6 上,您可以为特定路线进行布局。您可以添加&lt;Outlet/&gt; 来检测所有路由子项,如下面的代码。 Documentation React-Router

      function App() {
        return (
          // BEM
          <BrowserRouter>
            <div className="app">
              <Routes>
                <Route path="/" element={<Layout/>}>
                     <Route path="/" element={<Home />}></Route>
                     <Route path="/checkout" element={<Checkout />}></Route>
                </Route>
                <Route path="/login" element={<Login />}></Route>
              </Routes>
            </div>
          </BrowserRouter>
        );
      }
      

      Layout.jsx 的代码

      import {Outlet} from "react-router"
      
      const Layout = () => {
      
          return (
              <>
                  <Header/>
                  <Outlet/>
              </>
          )
      }
      
      export default Layout;
      

      【讨论】:

      • 那不工作的伙伴,如果可能的话在linkedin上联系我以解决我的错误linkedin.com/in/vishalmishra2810
      • 我在使用 react-router v6 的项目中使用这些方法
      • 如果您有异议,请随时添加我的帐户WAD#5227
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多