如何隐藏和显示列表内容:ReactJS

如何隐藏和显示列表内容:ReactJS,reactjs,Reactjs,我有一个项目列表,如果点击一个项目,它将显示其内容。我需要在state对象中为每个列表项添加一个布尔值,还是可以像在jquery中那样使用add和removeclassname 代码: <ul> <li> item <div className="hidden"> some extra text ... </div> </li> <li> item <div className="hidden"> so

我有一个项目列表,如果点击一个项目,它将显示其内容。我需要在state对象中为每个列表项添加一个
布尔值
,还是可以像在
jquery
中那样使用add和remove
classname

代码:

 <ul>
  <li> item <div className="hidden"> some extra text ... </div> </li>
  <li> item <div className="hidden"> some extra text ... </div> </li>
  <li> item <div className="hidden"> some extra text ... </div> </li>
  <li> item <div className="hidden"> some extra text ... </div> </li>
</ul>
  • 项目一些额外的文本
  • 项目一些额外的文本
  • 项目一些额外的文本
  • 项目一些额外的文本
我是否需要在状态对象中为每个列表项指定一个布尔值

是的,您需要为
状态
变量中的每个列表项维护一个
布尔值
,并基于该
状态
值,呈现
列表
项的内容,尝试以下操作:

this.state = {showItems: []}

onClick(index){
     console.log(index);
     let showItems = this.state.showItems.slice();
     showItems[index] = !showItems[index];
     this.setState({showItems});
}

<ul>
  <li onClick={this.onClick.bind(this,0)}> item {this.state.showItems[0] ? <div> some extra text ... </div> : null} </li>
  <li onClick={this.onClick.bind(this,1)}> item {this.state.showItems[1] ? <div> some extra text ... </div> : null}</li>
  <li onClick={this.onClick.bind(this,2)}> item{this.state.showItems[2] ? <div> some extra text ... </div> : null} </li>
  <li onClick={this.onClick.bind(this,3)}> item {this.state.showItems[3] ? <div> some extra text ... </div> : null}</li>
</ul>

我是否需要在状态对象中为每个列表项指定一个布尔值

是的,您需要为
状态
变量中的每个列表项维护一个
布尔值
,并基于该
状态
值,呈现
列表
项的内容,尝试以下操作:

this.state = {showItems: []}

onClick(index){
     console.log(index);
     let showItems = this.state.showItems.slice();
     showItems[index] = !showItems[index];
     this.setState({showItems});
}

<ul>
  <li onClick={this.onClick.bind(this,0)}> item {this.state.showItems[0] ? <div> some extra text ... </div> : null} </li>
  <li onClick={this.onClick.bind(this,1)}> item {this.state.showItems[1] ? <div> some extra text ... </div> : null}</li>
  <li onClick={this.onClick.bind(this,2)}> item{this.state.showItems[2] ? <div> some extra text ... </div> : null} </li>
  <li onClick={this.onClick.bind(this,3)}> item {this.state.showItems[3] ? <div> some extra text ... </div> : null}</li>
</ul>

这是一个非常简单易用的库,它允许您定义类名的条件。图书馆也被称为

例如:

import classNames from 'classnames'


<li> item 
    <div className={ classNames({
       'some-static-classname' : true,
       'hidden'                : this.state.hiddenItems.includes('itemX')
     }) }
    > 
        some extra text ... 
    </div> 
</li>
从“classNames”导入类名
  • 项目 一些额外的文本。。。
  • 因此,这个库只对减少您的条件下的样板文件有用。您还需要保留隐藏/显示项目的数据。您可以将这种状态保持在react内部状态。那就把你的条件写下来


    我回答了另一个类似的问题。希望能有帮助

    这里有一个非常简单易用的库,它允许您定义类名的条件。图书馆也被称为

    例如:

    import classNames from 'classnames'
    
    
    <li> item 
        <div className={ classNames({
           'some-static-classname' : true,
           'hidden'                : this.state.hiddenItems.includes('itemX')
         }) }
        > 
            some extra text ... 
        </div> 
    </li>
    
    从“classNames”导入类名
    
  • 项目 一些额外的文本。。。
  • 因此,这个库只对减少您的条件下的样板文件有用。您还需要保留隐藏/显示项目的数据。您可以将这种状态保持在react内部状态。那就把你的条件写下来


    我回答了另一个类似的问题。希望能有帮助

    我认为您应该使用react引导。否则,您可以使用状态并手动更新它

    const accordionInstance = (
      <Accordion>
        <Panel header="Collapsible Group Item #1" eventKey="1">
          test
        </Panel>
        <Panel header="Collapsible Group Item #2" eventKey="2">
         test 1
        </Panel>
        <Panel header="Collapsible Group Item #3" eventKey="3">
          test 2
        </Panel>
      </Accordion>
    );
    
    ReactDOM.render(accordionInstance, mountNode);
    
    常数一致性=(
    

    我认为您应该使用react引导。否则您可以使用状态并手动更新它

    const accordionInstance = (
      <Accordion>
        <Panel header="Collapsible Group Item #1" eventKey="1">
          test
        </Panel>
        <Panel header="Collapsible Group Item #2" eventKey="2">
         test 1
        </Panel>
        <Panel header="Collapsible Group Item #3" eventKey="3">
          test 2
        </Panel>
      </Accordion>
    );
    
    ReactDOM.render(accordionInstance, mountNode);
    
    常数一致性=(