如何使用Reactstrap制作手风琴组件?

时间:2019-05-15 04:29:04

标签: javascript html css reactjs reactstrap

Reactstrap在文档中没有 Accordion 的正式示例。

  

使用卡组件,您可以扩展默认的折叠行为以创建手风琴。要正确实现手风琴样式,请确保使用.accordion作为包装器。

<div class="accordion" id="accordionExample">
  <div class="card">
    <div class="card-header" id="headingOne">
      <h2 class="mb-0">
        <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
          Collapsible Group Item #1
        </button>
      </h2>
    </div>

    <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
      <div class="card-body">
        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird
        on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
        raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
      </div>
    </div>
  </div>
  <div class="card">
    <div class="card-header" id="headingTwo">
      <h2 class="mb-0">
        <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
          Collapsible Group Item #2
        </button>
      </h2>
    </div>
    <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample">
      <div class="card-body">
        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird
        on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
        raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
      </div>
    </div>
  </div>
  <div class="card">
    <div class="card-header" id="headingThree">
      <h2 class="mb-0">
        <button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
          Collapsible Group Item #3
        </button>
      </h2>
    </div>
    <div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordionExample">
      <div class="card-body">
        Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird
        on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
        raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
      </div>
    </div>
  </div>
</div>

是否有像Bootstrap 4文档示例这样的Accordion组件?

2 个答案:

答案 0 :(得分:3)

Reactstrap docs是正确的。您可以使用CardCollapse组件创建一个手风琴。     首先,初始化您的构造函数和状态。

    constructor(props) {
      super(props);
      this.toggle = this.toggle.bind(this);
      this.state = { collapse: 0, cards: [1, 2, 3, 4, 5] };
    }

然后是切换/折叠手风琴的方法。

    toggle(e) {
      let event = e.target.dataset.event;
      this.setState({ collapse: this.state.collapse === Number(event) ? 0 : Number(event) });
    }

还有render()函数:

render() {
  const {cards, collapse} = this.state;
  return (
    <div className="container">
        <h3 className="page-header">Reactstrap Accordion using card component</h3>
        {cards.map(index => {
          return (
            <Card style={{ marginBottom: '1rem' }} key={index}>
              <CardHeader onClick={this.toggle} data-event={index}>Header</CardHeader>
              <Collapse isOpen={collapse === index}>
              <CardBody>Example</CardBody>
              </Collapse>
            </Card>
          )
        })}     

      </div>
  );
}

别忘了导入:

import { Collapse, CardBody, Card, CardHeader } from 'reactstrap';

Source Code

答案 1 :(得分:2)

如果您使用reactstrap和react Hooks,则可以按以下步骤操作

1从reactstrap导入所需的组件

import { Collapse, CardBody, Card, CardHeader} from 'reactstrap';

2-从react导入useState

import React, {useState} from 'react';

3-在组件内创建状态

const [toggleQuestion, setToggequestion] = useState(1);//1 is the default id to be opened by default

4-创建您的手风琴。注意:在我的情况下,我仅切换身体,但您可以通过移动折叠来切换所有内容。

<Card>
    <CardHeader onClick={() => setToggequestion(1)}>
        <span className="font-weight-bold">title</span>
    </CardHeader>
    <Collapse  isOpen={toggleQuestion === 1 ? true : false}>
        <CardBody>
            example text
        </CardBody>
    </Collapse>
</Card>

<Card>
    <CardHeader onClick={() => setToggequestion(2)}>
        <span className="font-weight-bold">title 2</span>
    </CardHeader>
    <Collapse  isOpen={toggleQuestion === 2 ? true : false}>
        <CardBody>
            example text 2
        </CardBody>
    </Collapse>
</Card>

现在,您可以创建任意数量的内容,而只需更改ID。在我的情况下,ID仅为1和2