【问题标题】:React router v6 outlet doesn't seem to workReact 路由器 v6 插座似乎不起作用
【发布时间】:2021-11-11 17:31:30
【问题描述】:
ReactDOM.render(
  <BrowserRouter>
    <nav>
      <Link to="/">Home</Link>
      <Link to="/child">Child</Link>
    </nav>
    <Routes>
      <Route path="/" element={<ParentComponent />} />
      <Route path="child" element={<ChildComponent />} />
    </Routes>
  </BrowserRouter>,
  document.getElementById("root")
);

function ParentComponent() {
  return (
    <div>
      <h1>i am parent component</h1>
      <Outlet />
    </div>
  );
}
function ChildComponent() {
  return (
    <div>
      <h1>i am child component</h1>
    </div>
  );
}

当我访问 /child 路线时,我期待这个输出:
我是父组件
我是子组件

我只是得到:
我是子组件

【问题讨论】:

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


    【解决方案1】:

    下面的代码有效。现在,如果我访问 Home(/) 路由,我会得到“我是父组件”的输出,当我访问 Child(/child) 路由时,我会得到“我是父组件,我是子组件”。 这是我所期待的。

    之前我没有嵌套路由。相应地更正了我的问题。

    ReactDOM.render(
      <BrowserRouter>
        <nav>
            <Link to="/">Home</Link>
            <Link to="/child">Child</Link>
          </nav> 
        <Routes>
          <Route path="/" element={<ParentComponent />}>
            <Route path="child" element={<ChildComponent />} />
          </Route>
        </Routes>
      </BrowserRouter>,
      document.getElementById("root")
    );
    
    function ParentComponent() {
      return <div>
      <h1>i am parent component</h1>
      <Outlet/>         
      </div>;
    }
    function ChildComponent() {
      return <div>
      <h1>i am child component</h1>
      </div>;
    }   
    

    【讨论】:

      【解决方案2】:

      您可能永远不需要手动渲染 &lt;Router&gt;相反,您应该根据您的环境使用更高级别的路由器之一。在给定的应用中,您只需要一个路由器。

      你应该使用&lt;BrowserRouter&gt;

      &lt;BrowserRouter&gt;推荐的 接口,用于在 Web 浏览器中运行 React Router。

      所以你的代码会是这样的:

      ReactDOM.render(
        <BrowserRouter>
          <Routes>
            <Route path="/" element={<ParentComponent />}>
              <Route path="child" element={<ChildComponent />} />
            </Route>
          </Routes>
        </BrowserRouter>,
        document.getElementById("root")
      );
      

      &lt;Router&gt; 是所有路由器组件共享的低级接口 (&lt;BrowserRouter&gt;, &lt;HashRouter&gt;, &lt;StaticRouter&gt;, &lt;NativeRouter&gt;, &lt;MemoryRouter&gt;)。就 React 而言,它是一个上下文提供者,为应用程序的其余部分提供路由信息。

      【讨论】:

      • 我确实使用了 BrowserRouter。在导入中,我为 BrowserRouter 提供了别名作为路由器。忘记在我的代码示例中更正它,所以现在更新。但是使用 BrowserRouter,我的代码也不起作用。无论如何感谢您指出。
      • 应该可以了,你是否也导入了&lt;Outlet&gt;?从 'react-router' 导入 { Outlet };
      • 是的@Haitham6373。代码正在正确编译,并且您提到了导入
      • 之前我没有正确提出我的问题。我现在已经更新了问题和相应的答案。谢谢
      猜你喜欢
      • 2021-03-13
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2019-03-27
      • 2017-10-27
      • 2016-12-15
      • 2012-12-12
      • 2020-03-16
      相关资源
      最近更新 更多