按钮
使用 Bootstrap 的自定义按钮样式,在表单、对话框等中执行操作,支持多种尺寸、状态等。
示例
使用任何可用的按钮样式类型,快速创建一个样式化的按钮。只需修改 variant
属性。
import Button from 'react-bootstrap/Button';function TypesExample() {return (<><Button variant="primary">Primary</Button>{' '}<Button variant="secondary">Secondary</Button>{' '}<Button variant="success">Success</Button>{' '}<Button variant="warning">Warning</Button>{' '}<Button variant="danger">Danger</Button>{' '}<Button variant="info">Info</Button>{' '}<Button variant="light">Light</Button>{' '}<Button variant="dark">Dark</Button><Button variant="link">Link</Button></>);}export default TypesExample;
轮廓按钮
为了更轻盈的触感,按钮也提供 outline-*
变体,没有背景色。
import Button from 'react-bootstrap/Button';function OutlineTypesExample() {return (<><Button variant="outline-primary">Primary</Button>{' '}<Button variant="outline-secondary">Secondary</Button>{' '}<Button variant="outline-success">Success</Button>{' '}<Button variant="outline-warning">Warning</Button>{' '}<Button variant="outline-danger">Danger</Button>{' '}<Button variant="outline-info">Info</Button>{' '}<Button variant="outline-light">Light</Button>{' '}<Button variant="outline-dark">Dark</Button></>);}export default OutlineTypesExample;
按钮标签
通常 <Button>
组件将渲染一个 HTML <button>
元素。但是你可以渲染任何你想要的东西,添加一个 href
属性将自动渲染一个 <a />
元素。你可以使用 as
属性来渲染你想要的任何东西。React Bootstrap 会为你处理正确的 ARIA 角色。
import Button from 'react-bootstrap/Button';function TagTypesExample() {return (<><Button href="#">Link</Button> <Button type="submit">Button</Button>{' '}<Button as="input" type="button" value="Input" />{' '}<Button as="input" type="submit" value="Submit" />{' '}<Button as="input" type="reset" value="Reset" /></>);}export default TagTypesExample;
尺寸
想要更大或更小的按钮?添加 size="lg"
、size="sm"
来获得额外的尺寸。
import Button from 'react-bootstrap/Button';function SizesExample() {return (<><div className="mb-2"><Button variant="primary" size="lg">Large button</Button>{' '}<Button variant="secondary" size="lg">Large button</Button></div><div><Button variant="primary" size="sm">Small button</Button>{' '}<Button variant="secondary" size="sm">Small button</Button></div></>);}export default SizesExample;
块级按钮
使用我们的显示和间距实用程序,创建响应式全宽“块按钮”堆栈,类似于 Bootstrap 4 中的那些。
import Button from 'react-bootstrap/Button';function BlockExample() {return (<div className="d-grid gap-2"><Button variant="primary" size="lg">Block level button</Button><Button variant="secondary" size="lg">Block level button</Button></div>);}export default BlockExample;
活动状态
要设置按钮的活动状态,只需设置组件的 active
属性。
import Button from 'react-bootstrap/Button';function ActiveExample() {return (<><Button variant="primary" size="lg" active>Primary button</Button>{' '}<Button variant="secondary" size="lg" active>Button</Button></>);}export default ActiveExample;
禁用状态
通过添加 disabled
属性来使按钮看起来处于非活动状态。
import Button from 'react-bootstrap/Button';function DisabledExample() {return (<><Button variant="primary" size="lg" disabled>Primary button</Button>{' '}<Button variant="secondary" size="lg" disabled>Button</Button>{' '}<Button href="#" variant="secondary" size="lg" disabled>Link</Button></>);}export default DisabledExample;
注意!<a>
元素本身不支持 disabled
属性。在支持它的浏览器中,这是通过 point-events: none
样式处理的,但并非所有浏览器都支持它。
React Bootstrap 将阻止任何 onClick
处理程序触发,无论渲染的元素是什么。
按钮加载状态
当从按钮激活异步操作时,向用户提供有关加载状态的反馈是一个很好的 UX 模式,这可以通过从状态更改(如下所示)更新您的 <Button />
属性来轻松完成。
import { useEffect, useState } from 'react';import Button from 'react-bootstrap/Button';function LoadingButton() {const [isLoading, setLoading] = useState(false);useEffect(() => {function simulateNetworkRequest() {return new Promise((resolve) => setTimeout(resolve, 2000));}if (isLoading) {simulateNetworkRequest().then(() => {setLoading(false);});}}, [isLoading]);const handleClick = () => setLoading(true);return (<Buttonvariant="primary"disabled={isLoading}onClick={!isLoading ? handleClick : null}>{isLoading ? 'Loading…' : 'Click to load'}</Button>);}export default LoadingButton;
复选框/单选按钮
按钮也可以用来为 checkbox
和 radio
表单元素设置样式。当您想要一个在 HTML 表单中整齐工作的切换按钮时,这很有用。
import { useState } from 'react';import ButtonGroup from 'react-bootstrap/ButtonGroup';import ToggleButton from 'react-bootstrap/ToggleButton';function ToggleButtonExample() {const [checked, setChecked] = useState(false);const [radioValue, setRadioValue] = useState('1');const radios = [{ name: 'Active', value: '1' },{ name: 'Radio', value: '2' },{ name: 'Radio', value: '3' },];return (<><ButtonGroup className="mb-2"><ToggleButtonid="toggle-check"type="checkbox"variant="secondary"checked={checked}value="1"onChange={(e) => setChecked(e.currentTarget.checked)}>Checked</ToggleButton></ButtonGroup><br /><ButtonGroup className="mb-2">{radios.map((radio, idx) => (<ToggleButtonkey={idx}id={`radio-${idx}`}type="radio"variant="secondary"name="radio"value={radio.value}checked={radioValue === radio.value}onChange={(e) => setRadioValue(e.currentTarget.value)}>{radio.name}</ToggleButton>))}</ButtonGroup><br /><ToggleButtonclassName="mb-2"id="toggle-check"type="checkbox"variant="outline-primary"checked={checked}value="1"onChange={(e) => setChecked(e.currentTarget.checked)}>Checked</ToggleButton><br /><ButtonGroup>{radios.map((radio, idx) => (<ToggleButtonkey={idx}id={`radio-${idx}`}type="radio"variant={idx % 2 ? 'outline-success' : 'outline-danger'}name="radio"value={radio.value}checked={radioValue === radio.value}onChange={(e) => setRadioValue(e.currentTarget.value)}>{radio.name}</ToggleButton>))}</ButtonGroup></>);}export default ToggleButtonExample;
以上处理了样式设置,但需要手动控制组中每个单选按钮或复选框的 checked
状态。
为了获得更好的选中状态管理体验,请使用 <ToggleButtonGroup>
而不是 <ButtonGroup>
组件。该组的行为类似于表单组件,其中 value
是命名复选框组中选定 value
的数组,或者类似命名单选按钮组中单个切换的 value
。
非受控
import ToggleButton from 'react-bootstrap/ToggleButton';import ToggleButtonGroup from 'react-bootstrap/ToggleButtonGroup';function ToggleButtonGroupUncontrolled() {return (<><ToggleButtonGroup type="checkbox" defaultValue={[1, 3]} className="mb-2"><ToggleButton id="tbg-check-1" value={1}>Checkbox 1 (pre-checked)</ToggleButton><ToggleButton id="tbg-check-2" value={2}>Checkbox 2</ToggleButton><ToggleButton id="tbg-check-3" value={3}>Checkbox 3 (pre-checked)</ToggleButton></ToggleButtonGroup><br /><ToggleButtonGroup type="radio" name="options" defaultValue={1}><ToggleButton id="tbg-radio-1" value={1}>Radio 1 (pre-checked)</ToggleButton><ToggleButton id="tbg-radio-2" value={2}>Radio 2</ToggleButton><ToggleButton id="tbg-radio-3" value={3}>Radio 3</ToggleButton></ToggleButtonGroup></>);}export default ToggleButtonGroupUncontrolled;
受控
import { useState } from 'react';import ToggleButton from 'react-bootstrap/ToggleButton';import ToggleButtonGroup from 'react-bootstrap/ToggleButtonGroup';function ToggleButtonGroupControlled() {const [value, setValue] = useState([1, 3]);/** The second argument that will be passed to* `handleChange` from `ToggleButtonGroup`* is the SyntheticEvent object, but we are* not using it in this example so we will omit it.*/const handleChange = (val) => setValue(val);return (<ToggleButtonGroup type="checkbox" value={value} onChange={handleChange}><ToggleButton id="tbg-btn-1" value={1}>Option 1</ToggleButton><ToggleButton id="tbg-btn-2" value={2}>Option 2</ToggleButton><ToggleButton id="tbg-btn-3" value={3}>Option 3</ToggleButton></ToggleButtonGroup>);}export default ToggleButtonGroupControlled;