如何正确配置 React 路由器以导航到新页面?

How can I configure React router correctly to navigate to a new page?

我有一个包含 3 个锚点的导航栏,我想在单击每个锚点时在不同页面之间导航。 我已经使用 react-router(版本 6.3.0)来实现这一点,但我遇到了两个问题并且我得到了一个堆栈。

第一个是当我单击 LaunchApp 锚点时,URL 更改为 http://localhost:3000/launchApp 页面显示其内容但在顶部主页,而不是新页面。 第二个是当我刷新页面时,页面没有返回到主页(http://localhost:3000)但它呈现了我点击的最后一个锚点。

App.js

return (
  <s.Main>
    <>  
      <Navbar/>
      <HeroSection/>
      <About/>
      <Testimonials/>
      <ContactForm/>
      <Footer/>
      <Routes>
        <Route path="/" element={<HeroSection/>}/>
        <Route path="/about" element={<About/>}/>
        <Route path="/launchApp" element={<LaunchApp />}>
        <Route path="submitSubscription" 
                element={<SubmitSubscription/>}/>
        <Route path="CancelSubscription" 
                element={<CancelSubscription />}/>
        </Route>
      </Routes> 
    </>
  </s.Main>
);

导航栏return

return (
  <nav> 
    <ul>
      <li>
        <Link to="/">Home</Link> 
      </li>
      <li>
        <Link to="/about">About</Link> 
      </li>
      <li>
        <Link to="/launchApp">Launch App</Link>     
      </li>      
    </ul>
  </nav>
)

我是不是漏掉了什么?

您正在两次渲染多个组件,一次是无条件地在 App 中,然后是有条件地在一条路线中。如果我没理解错的话,您不希望路由内容与主页内容重复。

删除不在路线上的重复组件,并将路线向上移动到 NavbarFooter 组件之间。

示例:

return (
  <s.Main>
    <Navbar/>
    <Routes>
      <Route path="/" element={<HeroSection />} />
      <Route path="/about" element={<About />} />
      <Route path="/launchApp" element={<LaunchApp />} />
    </Routes>
    <Testimonials/>
    <ContactForm/>
    <Footer/>
  </s.Main>
);

要在页面加载时处理重定向回“主”页面,请使用 useNavigation 挂钩在应用程序组件的挂载 useEffect 挂钩中重定向。

示例:

import { Routes, Route, useNavigate } from 'react-router-dom';

const App = () => {
  const navigate = useNavigate();

  React.useEffect(() => {
    navigate("/", { replace: true });
  }, []); // note *

  return (
    <s.Main> ... </s.Main>
  );
};

* linter 可能会抱怨缺少依赖项导航,它是一个稳定的引用并且可以安全添加。