手风琴
结合 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
属性以移除默认的背景颜色、一些边框和一些圆角,使手风琴与其父容器边缘对齐。
结果
加载中...
实时编辑器
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
手风琴
手风琴项目
手风琴标题
手风琴主体
手风琴按钮
手风琴折叠
useAccordionButton
import { useAccordionButton } from 'react-bootstrap/AccordionButton';
const decoratedOnClick = useAccordionButton(eventKey, onClick);