アコーディオン
Collapseコンポーネントと組み合わせて、垂直に折りたたみ可能なアコーディオンを作成します。
例
以下のアコーディオンをクリックして、アコーディオンの内容を展開/折りたたみします。
基本例
結果
読み込み中...
ライブエディター
import Accordion from 'react-bootstrap/Accordion';function BasicExample() {return (<Accordion defaultActiveKey="0"><Accordion.Item eventKey="0"><Accordion.Header>Accordion Item #1</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item><Accordion.Item eventKey="1"><Accordion.Header>Accordion Item #2</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item></Accordion>);}export default BasicExample;
完全に折りたたまれた状態
Accordion
を完全に折りたたまれた状態で開始するには、Accordion
にdefaultActiveKey
プロップを渡さないようにします。
結果
読み込み中...
ライブエディター
import Accordion from 'react-bootstrap/Accordion';function AllCollapseExample() {return (<Accordion><Accordion.Item eventKey="0"><Accordion.Header>Accordion Item #1</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item><Accordion.Item eventKey="1"><Accordion.Header>Accordion Item #2</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item></Accordion>);}export default AllCollapseExample;
Flush
flush
を追加すると、デフォルトの背景色、一部の境界線、および一部の角丸が削除され、アコーディオンが親コンテナとエッジトゥエッジでレンダリングされます。
結果
読み込み中...
ライブエディター
import Accordion from 'react-bootstrap/Accordion';function FlushExample() {return (<Accordion defaultActiveKey="0" flush><Accordion.Item eventKey="0"><Accordion.Header>Accordion Item #1</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item><Accordion.Item eventKey="1"><Accordion.Header>Accordion Item #2</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item></Accordion>);}export default FlushExample;
常に開く
alwaysOpen
プロップを使用すると、別の項目が開かれた場合でも、アコーディオン項目を開いたままにすることができます。コンポーネントを制御する場合は、activeKey
またはdefaultActiveKey
に文字列の配列を使用する必要があります。
結果
読み込み中...
ライブエディター
import Accordion from 'react-bootstrap/Accordion';function AlwaysOpenExample() {return (<Accordion defaultActiveKey={['0']} alwaysOpen><Accordion.Item eventKey="0"><Accordion.Header>Accordion Item #1</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item><Accordion.Item eventKey="1"><Accordion.Header>Accordion Item #2</Accordion.Header><Accordion.Body>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed doeiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim adminim veniam, quis nostrud exercitation ullamco laboris nisi utaliquip ex ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.</Accordion.Body></Accordion.Item></Accordion>);}export default AlwaysOpenExample;
カスタムアコーディオン
Bootstrap 4のようなカードベースのアコーディオンを作成することもできます。カスタム切り替えコンポーネントを作成するには、useAccordionButton
を使用してアコーディオンの切り替え機能を利用できます。
カスタム切り替え
結果
読み込み中...
ライブエディター
import Accordion from 'react-bootstrap/Accordion';import { useAccordionButton } from 'react-bootstrap/AccordionButton';import Card from 'react-bootstrap/Card';function CustomToggle({ children, eventKey }) {const decoratedOnClick = useAccordionButton(eventKey, () =>console.log('totally custom!'),);return (<buttontype="button"style={{ backgroundColor: 'pink' }}onClick={decoratedOnClick}>{children}</button>);}function Example() {return (<Accordion defaultActiveKey="0"><Card><Card.Header><CustomToggle eventKey="0">Click me!</CustomToggle></Card.Header><Accordion.Collapse eventKey="0"><Card.Body>Hello! I'm the body</Card.Body></Accordion.Collapse></Card><Card><Card.Header><CustomToggle eventKey="1">Click me!</CustomToggle></Card.Header><Accordion.Collapse eventKey="1"><Card.Body>Hello! I'm another body</Card.Body></Accordion.Collapse></Card></Accordion>);}render(<Example />);
展開状態を認識するカスタム切り替え
関連付けられたセクションが展開されている場合に切り替えに異なるスタイルを使用したい場合があります。これは、コンテキストを認識し、useAccordionButton
フックも活用するカスタム切り替えを使用することで実現できます。
結果
読み込み中...
ライブエディター
import { useContext } from 'react';import Accordion from 'react-bootstrap/Accordion';import AccordionContext from 'react-bootstrap/AccordionContext';import { useAccordionButton } from 'react-bootstrap/AccordionButton';import Card from 'react-bootstrap/Card';const PINK = 'rgba(255, 192, 203, 0.6)';const BLUE = 'rgba(0, 0, 255, 0.6)';function ContextAwareToggle({ children, eventKey, callback }) {const { activeEventKey } = useContext(AccordionContext);const decoratedOnClick = useAccordionButton(eventKey,() => callback && callback(eventKey),);const isCurrentEventKey = activeEventKey === eventKey;return (<buttontype="button"style={{ backgroundColor: isCurrentEventKey ? PINK : BLUE }}onClick={decoratedOnClick}>{children}</button>);}function Example() {return (<Accordion defaultActiveKey="0"><Card><Card.Header><ContextAwareToggle eventKey="0">Click me!</ContextAwareToggle></Card.Header><Accordion.Collapse eventKey="0"><Card.Body>Hello! I am the body</Card.Body></Accordion.Collapse></Card><Card><Card.Header><ContextAwareToggle eventKey="1">Click me!</ContextAwareToggle></Card.Header><Accordion.Collapse eventKey="1"><Card.Body>Hello! I am another body</Card.Body></Accordion.Collapse></Card></Accordion>);}render(<Example />);
API
Accordion
AccordionItem
AccordionHeader
AccordionBody
AccordionButton
AccordionCollapse
useAccordionButton
import { useAccordionButton } from 'react-bootstrap/AccordionButton';
const decoratedOnClick = useAccordionButton(eventKey, onClick);