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

Ham*_*thi 4 html javascript 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>
Run Code Online (Sandbox Code Playgroud)

是否可以使用像 Bootstrap 4 文档示例这样的手风琴组件?

Igo*_*ves 8

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

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

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

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

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>
  );
}
Run Code Online (Sandbox Code Playgroud)

并且不要忘记导入:

import { Collapse, CardBody, Card, CardHeader } from 'reactstrap';
Run Code Online (Sandbox Code Playgroud)

源代码


jer*_*naa 8

如果你使用reactstrap和react Hooks你可以这样做

1 从reactstrap导入需要的组件

import { Collapse, CardBody, Card, CardHeader} from 'reactstrap';
Run Code Online (Sandbox Code Playgroud)

2-从react导入useState

import React, {useState} from 'react';
Run Code Online (Sandbox Code Playgroud)

3-在您的组件内创建您的状态

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

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>
Run Code Online (Sandbox Code Playgroud)

现在您可以创建任意多个,只需更改 ID。就我而言,id 只是 1 和 2