--- title: Collapsible accordion tags: components,children,state cover: beach-pineapple firstSeen: 2019-03-02T10:46:34+02:00 lastUpdated: 2021-10-13T19:29:39+02:00 --- Renders an accordion menu with multiple collapsible content elements. - Define an `AccordionItem` component, that renders a `
{children}
); }; const Accordion = ({ defaultIndex, onItemClick, children }) => { const [bindIndex, setBindIndex] = React.useState(defaultIndex); const changeItem = itemIndex => { if (typeof onItemClick === 'function') onItemClick(itemIndex); if (itemIndex !== bindIndex) setBindIndex(itemIndex); }; const items = children.filter(item => item.type.name === 'AccordionItem'); return ( <> {items.map(({ props }) => ( changeItem(props.index)} children={props.children} /> ))} ); }; ``` ```jsx ReactDOM.createRoot(document.getElementById('root')).render( Lorem ipsum Dolor sit amet ); ```