Reactstrap如何崩溃只能打开一项?

时间:2018-12-05 15:07:05

标签: reactjs bootstrap-4 reactstrap

我正在使用Reactstrap折叠来查看常见问题解答。但是,我一次只想打开一个。我曾尝试更改崩溃状态,但没有任何效果。我可以打开所有物品。我还尝试将其替换为不受控制的崩溃,因此不必管理状态。有什么想法吗?

这是我的代码:

import React from 'react';
import PropTypes from 'prop-types';
import { Col, Collapse } from 'reactstrap';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg- 
icons';

class ListGroupCollapse extends React.Component {
static propTypes = {
    item: PropTypes.object,
};
state = {
    collapse: false,
    active: false,
};

toggle = () =>
    this.setState({
        collapse: !this.state.collapse,
        active: !this.state.active,
    });

render() {
    const item = this.props.item;
    return (
        <Col key={item.title}>
            <div
                className={this.state.active ? 'title active' : 'title'}
                onClick={this.toggle}
            >
                {item.title}
                <FontAwesomeIcon
                    icon={
                        this.state.active ? faChevronUp : faChevronDown
                    }
                />
            </div>
            <Collapse isOpen={this.state.collapse}>
                <div className="content">
                    <span
                        dangerouslySetInnerHTML={{
                            __html: this.props.item.content,
                        }}
                    />
                </div>
            </Collapse>
        </Col>
    );
}
}

export default ListGroupCollapse;

3 个答案:

答案 0 :(得分:0)

尝试在标签项中添加isOpen = {true}属性,希望这可以满足您的需求。

答案 1 :(得分:0)

要打开一个收合,您应该将要打开的收合与某种ID绑定在一起。因此它知道要打开什么折叠。

this.state = {
  collapse: null
};

toggle = (id) => {
  if (!this.state.collapse || id !== this.state.collapse) {
    this.setState({
      collapse: id
    });
  } else if (this.state.collapse === id) {
      this.setState({ collapse: false })
  }
}

<Collapse isOpen={this.state.collapse === id}>
  <div className="content">
    <span
      dangerouslySetInnerHTML={{
        __html: this.props.item.content,
      }}
    />
  </div>
</Collapse>

您只需要为ID确定一个系统,自己生成它们,或者也许已经将它们包含在元素中,由您决定。希望对您有所帮助。

答案 2 :(得分:0)

这是答案,您应该将折叠状态设置为布尔值数组,然后使用toggleCollapse函数根据索引更改值:

const [collapse, setCollapse] = useState([]);

const toggleCollapse = (index) => {
    let collapseCopy = [...collapse];
    collapseCopy[index] = !collapseCopy[index];
    setCollapse(collapseCopy);
}

地图功能内的JSX代码:

<ListGroupItem onClick={() => toggleCollapse(index)} key={index}>
  <Collapse isOpen={collapse[index]}>
Hello world!
 </Collapse>
</ListGroupItem>