提问者:小点点

如何在react JS中的可重用组件中隐藏div?


我有navbar可重用组件,其中包含徽标,和公司名称,现在我想隐藏公司名称在我的组件之一,我将使用这个navbar,我如何做到这一点?

注意:我使用的是功能组件

这是导航栏

<nav className="navbar">
  <div className="container">
    <span className="navbar-brand">
      logo
    </span>
    <ul showName={true} className="nav navbar-nav">
      <li className="nav-item ">
        <a className="nav-link" href="#">Company name</a>
      </li>
    </ul>
    </>}
  </div>
</nav>

这是我的另一个组件,我使用navbar,我想隐藏公司名称

<Navbar showName={false}/>

但这不起作用,我得到以下错误

警告:React无法识别DOM元素上的showname属性。 如果您有意希望它作为自定义属性出现在DOM中,请将其拼写为小写的showname。 如果您意外地从父组件传递了它,请将它从DOM元素中删除。

我需要做什么改变才能使它工作?


共2个答案

匿名用户

你应该使用我们所说的条件渲染,至少有5种方法,其中一种是:

像以前那样调用导航栏

<Navbar showName={false}/>

然后在组件中使用这些道具,如下所示:

<nav className="navbar">
    <div className="container">
         <span className="navbar-brand">
             logo
         </span>

         { 
             props.showName && 
                 <ul className="nav navbar-nav">
                     <li className="nav-item ">
                         <a className="nav-link" href="#">Company name</a>
                     </li>
                 </ul> 
         }
    </div>
</nav>

这里有一篇介绍其他方法的文章:(即使在这个用法中,这可能是最好的。。。)https://blog.bitsrc.io/5-ways-to-implement-conditional-rendering-in-react-64730323b434

匿名用户

你在这里犯了错误,

<ul showName={true} className="nav navbar-nav">

在这里,showname={true}直接在DOM中添加。 它没有反应成分。 因此,对你犯的错误作出反应(你就是这样)

您可能希望像这样直接添加额外的css类/样式,

<ul className={`nav navbar-nav ${ showName ? 'hide-it' : '' }`}>
<ul style={{ display: 'none' }} className="nav navbar-nav">