React Base Fiddle (JSX)
Starting point for creating JSFiddles with React.
HTML
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
Babel + JSX
class App extends React.Component {
constructor(){
super();
this.state = {
myData: []
};
this.setOpenStatus = this.setOpenStatus.bind(this);
}
componentDidMount() {
// this would be inside the API call
const myData = [
{
id: 1,
name: 'Item 1',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut varius metus tellus, eu tincidunt est viverra vitae. Fusce et mollis libero.'
}, {
id: 2,
name: 'Item 2',
description: 'Ut interdum ut justo ac euismod. Phasellus vitae pellentesque lectus, et cursus erat. Suspendisse eget risus gravida tellus rutrum gravida et vitae felis.'
}, {
id: 3,
name: 'Item 2',
description: ' Cras euismod massa eu mi consequat mollis. Sed aliquam tellus sed sem dictum feugiat. Nullam pretium purus sed ipsum pharetra luctus.'
}
];
myData.forEach(item => {
item.open = false;
});
this.setState({ myData });
}
componentDidUpdate() {
console.log('updated');
}
setOpenStatus(id) {
console.log(this.state);
const myData = this.state.myData;
myData.forEach(item => {
if (item.id == id) {
item.open = !item.open;
} else {
item.open = false;
}
});
this.setState({ myData });
}
render() {
return (
<div className="App">
<Accordion data={this.state.myData} setOpenStatus={this.setOpenStatus} />
</div>
);
}
}
const Accordion = props => {
let accordionElements = [];
const {data} = props;
if (data && data.length > 0) {
data.forEach(item => {
console.log('props', item);
accordionElements.push(<AccordionElement
{...item}
setOpenStatus={props.setOpenStatus}
key={item.id}
/>);
});
}
return (
<ul className="accordion">
{accordionElements}
</ul>
);
}
const AccordionElement = props => {
const handleOnClick =...