Materialise 导航栏链接条件渲染

Materialize navbar links conditional rendering

我正在使用 React Materialize 和 React Router Dom。我试图仅向经过身份验证的用户显示导航链接,因此我使用的是条件呈现。但是如果我像下面那样做,导航链接呈现为垂直,而不是像往常一样水平。有解决办法吗?谢谢

    <Navbar>
      {isAuthenticated && (
      <>
      <NavLink to="/locations" href="/locations">
        Locations
      </NavLink>
      <NavLink to="/categories" href="/categories">
        Categories
      </NavLink>
      </>
      )}
    </Navbar>

看起来 Navbar 组件正在渲染 li 元素内的所有子项。当您将它们包装在片段中时,组件会将其视为其唯一的子元素,并将所有 NavLink 元素放在一个 li.

我可以想到两种简单的方法来处理这个问题:

  1. 如果只有几个链接,可以对它们进行条件渲染:
<Navbar>
 {isAuthenticated && (<NavLink to="/locations" href="/locations">Locations</NavLink>)}
 {isAuthenticated && (<NavLink to="/categories" href="/categories">Categories</NavLink>)}
</Navbar>

但是,此解决方案并不可靠,尤其是当您有很多链接时。

  1. NavLink 元素存储在某个数组中并有条件地添加 auth-dependant 项:
// In the component:
const links = [/* some public links */];
const privateLinks = [
    // Don't forget keys. The numbers here are only for example.
    <NavLink key={1} to="/locations" href="/locations">Locations</NavLink>,
    <NavLink key={2} to="/categories" href="/categories">Categories</NavLink>
];

if(isAuthenticated){
 links.push(...privateLinks);
}
// In the template:
<Navbar>{links}</Navbar>

链接数组的逻辑非常简单(将私有链接设置为最后一项)只是为了让演示更简单。