content logo

React Accordions:

Simple Colorless Accordion with Border using React

You can use this code to display the description of the buttons or when we need a simple and small accordion. This code indicates a button. By clicking on this button, the content will be written under its title. The thin, black border also surrounds the entire accordion. This accordion has received help from React.

#

Simple React Accordion

#

Colorless Accordion Code

#

React Accordion with Border

#

HTML Accordion Code

<!-- This script got from frontendfreecode.com -->
<a style="font-size: 8pt; text-decoration: none" target="_blank" href="http://frontendfreecode.com">Free Frontend</a>
                                                                            
class Collapse extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isOpen: props.isOpen
        };
        this.setContentRef = r => this.contentEl = r;
        this.setContainerRef = r => this.containerEl = r;
        this.toggle = () => this.setState(s => ({ isOpen: !s.isOpen }));
    }
    componentWillReceiveProps(nextProps) {
        if (nextProps.isOpen !== this.props.isOpen && nextProps.isOpen !== this.state.isOpen) {
            this.toggle();
        }
    }
    componentDidMount() {
        this.updateHeight(this.state.isOpen);
    }
    componentDidUpdate() {
        this.updateHeight(this.state.isOpen);
    }
    updateHeight(isOpen) {
        if (isOpen) {
            this.containerEl.style.height = `${this.contentEl.scrollHeight}px`;
        } else {
            this.containerEl.style.height = '0px';
        }
    }
    render() {
        return /*#__PURE__*/(
            React.createElement("div", { style: mainStyle }, /*#__PURE__*/
                React.createElement("div", { onClick: this.toggle, style: toggleStyle }, "Click me to open/close"), /*#__PURE__*/
                React.createElement("div", { ref: this.setContainerRef, style: containerStyle }, /*#__PURE__*/
                    React.createElement("div", { ref: this.setContentRef, style: contentStyle }, "Inner content", /*#__PURE__*/
                        React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/
                        React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null)))));
    }
}
const mainStyle = { fontFamily: '"Lato", "Lucida Grande", "Lucida Sans Unicode", Tahoma, Sans-Serif', border: '1px solid black', display: 'inline-block', padding: '0 15px', borderRadius: '4px' };
const toggleStyle = { padding: '15px', cursor: 'pointer' };
const containerStyle = { transition: 'all 0.5s ease', overflow: 'hidden' };
const contentStyle = { paddingBottom: '15px' };
Collapse.defaultProps = {
    isOpen: false
};
const root = document.createElement('div');
const root2 = document.createElement('div');
const root3 = document.createElement('div');
document.body.appendChild(root);
document.body.appendChild(root2);
document.body.appendChild(root3);
ReactDOM.render( /*#__PURE__*/React.createElement(Collapse, null), root);
ReactDOM.render( /*#__PURE__*/React.createElement(Collapse, null), root2);
ReactDOM.render( /*#__PURE__*/React.createElement(Collapse, null), root3);
<script src='https://cdnjs.cloudflare.com/ajax/libs/react/16.0.0-rc.3/umd/react.production.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.0.0-rc.3/umd/react-dom.production.min.js'></script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- This script got from frontendfreecode.com -->

<script src='https://cdnjs.cloudflare.com/ajax/libs/react/16.0.0-rc.3/umd/react.production.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.0.0-rc.3/umd/react-dom.production.min.js'></script>
</head>
<body>
<div id="bcl"><a style="font-size:8pt;text-decoration:none;" href="http://www.devanswer.com">Free Frontend</a></div>
<script>
class Collapse extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            isOpen: props.isOpen
        };
        this.setContentRef = r => this.contentEl = r;
        this.setContainerRef = r => this.containerEl = r;
        this.toggle = () => this.setState(s => ({ isOpen: !s.isOpen }));
    }
    componentWillReceiveProps(nextProps) {
        if (nextProps.isOpen !== this.props.isOpen && nextProps.isOpen !== this.state.isOpen) {
            this.toggle();
        }
    }
    componentDidMount() {
        this.updateHeight(this.state.isOpen);
    }
    componentDidUpdate() {
        this.updateHeight(this.state.isOpen);
    }
    updateHeight(isOpen) {
        if (isOpen) {
            this.containerEl.style.height = `${this.contentEl.scrollHeight}px`;
        } else {
            this.containerEl.style.height = '0px';
        }
    }
    render() {
        return /*#__PURE__*/(
            React.createElement("div", { style: mainStyle }, /*#__PURE__*/
                React.createElement("div", { onClick: this.toggle, style: toggleStyle }, "Click me to open/close"), /*#__PURE__*/
                React.createElement("div", { ref: this.setContainerRef, style: containerStyle }, /*#__PURE__*/
                    React.createElement("div", { ref: this.setContentRef, style: contentStyle }, "Inner content", /*#__PURE__*/
                        React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/
                        React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null), "Inner content", /*#__PURE__*/React.createElement("br", null)))));
    }
}
const mainStyle = { fontFamily: '"Lato", "Lucida Grande", "Lucida Sans Unicode", Tahoma, Sans-Serif', border: '1px solid black', display: 'inline-block', padding: '0 15px', borderRadius: '4px' };
const toggleStyle = { padding: '15px', cursor: 'pointer' };
const containerStyle = { transition: 'all 0.5s ease', overflow: 'hidden' };
const contentStyle = { paddingBottom: '15px' };
Collapse.defaultProps = {
    isOpen: false
};
const root = document.createElement('div');
const root2 = document.createElement('div');
const root3 = document.createElement('div');
document.body.appendChild(root);
document.body.appendChild(root2);
document.body.appendChild(root3);
ReactDOM.render( /*#__PURE__*/React.createElement(Collapse, null), root);
ReactDOM.render( /*#__PURE__*/React.createElement(Collapse, null), root2);
ReactDOM.render( /*#__PURE__*/React.createElement(Collapse, null), root3);
</script>

</body>
</html>
Preview