Radio单选框

    • 用于在多个备选项中选中单个状态。

    • 和 Select 的区别是,Radio 所有选项默认可见,方便用户在比较中选择,因此选项不宜过多。

    基本

    最简单的用法。

    Radio单选框 - 图2

    一组互斥的 Radio 配合使用。

    1. class App extends React.Component {
    2. state = {
    3. value: 1,
    4. };
    5. onChange = e => {
    6. console.log('radio checked', e.target.value);
    7. this.setState({
    8. value: e.target.value,
    9. });
    10. };
    11. render() {
    12. return (
    13. <Radio.Group onChange={this.onChange} value={this.state.value}>
    14. <Radio value={1}>A</Radio>
    15. <Radio value={2}>B</Radio>
    16. <Radio value={3}>C</Radio>
    17. <Radio value={4}>D</Radio>
    18. </Radio.Group>
    19. );
    20. }
    21. }
    22. ReactDOM.render(<App />, mountNode);

    通过配置 options 参数来渲染单选框。

    1. import { Radio } from 'antd';
    2. const plainOptions = ['Apple', 'Pear', 'Orange'];
    3. const options = [
    4. { label: 'Apple', value: 'Apple' },
    5. { label: 'Pear', value: 'Pear' },
    6. { label: 'Orange', value: 'Orange' },
    7. ];
    8. const optionsWithDisabled = [
    9. { label: 'Apple', value: 'Apple' },
    10. { label: 'Pear', value: 'Pear' },
    11. { label: 'Orange', value: 'Orange', disabled: false },
    12. ];
    13. class App extends React.Component {
    14. state = {
    15. value1: 'Apple',
    16. value2: 'Apple',
    17. value3: 'Apple',
    18. };
    19. onChange1 = e => {
    20. console.log('radio1 checked', e.target.value);
    21. this.setState({
    22. value1: e.target.value,
    23. });
    24. };
    25. onChange2 = e => {
    26. console.log('radio2 checked', e.target.value);
    27. this.setState({
    28. value2: e.target.value,
    29. });
    30. };
    31. onChange3 = e => {
    32. console.log('radio3 checked', e.target.value);
    33. value3: e.target.value,
    34. });
    35. };
    36. render() {
    37. return (
    38. <div>
    39. <Radio.Group options={plainOptions} onChange={this.onChange1} value={this.state.value1} />
    40. <Radio.Group options={options} onChange={this.onChange2} value={this.state.value2} />
    41. options={optionsWithDisabled}
    42. onChange={this.onChange3}
    43. value={this.state.value3}
    44. />
    45. </div>
    46. );
    47. }
    48. }
    49. ReactDOM.render(<App />, mountNode);

    Radio单选框 - 图4

    单选组合 - 配合 name 使用

    可以为 Radio.Group 配置 name 参数,为组合内的 input 元素赋予相同的 name 属性,使浏览器把 Radio.Group 下的 Radio 真正看作是一组(例如可以通过方向键始终在同一组内更改选项)。

    实色填底的单选按钮样式。

    1. import { Radio } from 'antd';
    2. ReactDOM.render(
    3. <div>
    4. <div>
    5. <Radio.Group defaultValue="a" buttonStyle="solid">
    6. <Radio.Button value="a">Hangzhou</Radio.Button>
    7. <Radio.Button value="b">Shanghai</Radio.Button>
    8. <Radio.Button value="c">Beijing</Radio.Button>
    9. <Radio.Button value="d">Chengdu</Radio.Button>
    10. </Radio.Group>
    11. </div>
    12. <div style={{ marginTop: 16 }}>
    13. <Radio.Group defaultValue="c" buttonStyle="solid">
    14. <Radio.Button value="a">Hangzhou</Radio.Button>
    15. <Radio.Button value="b" disabled>
    16. Shanghai
    17. </Radio.Button>
    18. <Radio.Button value="c">Beijing</Radio.Button>
    19. <Radio.Button value="d">Chengdu</Radio.Button>
    20. </Radio.Group>
    21. </div>
    22. </div>,
    23. mountNode,
    24. );

    Radio单选框 - 图6

    不可用

    1. import { Radio, Button } from 'antd';
    2. class App extends React.Component {
    3. state = {
    4. disabled: true,
    5. };
    6. toggleDisabled = () => {
    7. this.setState({
    8. disabled: !this.state.disabled,
    9. });
    10. };
    11. render() {
    12. return (
    13. <div>
    14. <Radio defaultChecked={false} disabled={this.state.disabled}>
    15. Disabled
    16. </Radio>
    17. <br />
    18. <Radio defaultChecked disabled={this.state.disabled}>
    19. Disabled
    20. </Radio>
    21. <div style={{ marginTop: 20 }}>
    22. <Button type="primary" onClick={this.toggleDisabled}>
    23. Toggle disabled
    24. </Button>
    25. </div>
    26. );
    27. }
    28. }
    29. ReactDOM.render(<App />, mountNode);

    垂直的 Radio.Group,配合更多输入框选项。

    Radio单选框 - 图8

    按钮样式

    按钮样式的单选组合。

    1. import { Radio } from 'antd';
    2. function onChange(e) {
    3. }
    4. ReactDOM.render(
    5. <div>
    6. <div>
    7. <Radio.Group onChange={onChange} defaultValue="a">
    8. <Radio.Button value="a">Hangzhou</Radio.Button>
    9. <Radio.Button value="b">Shanghai</Radio.Button>
    10. <Radio.Button value="c">Beijing</Radio.Button>
    11. <Radio.Button value="d">Chengdu</Radio.Button>
    12. </Radio.Group>
    13. </div>
    14. <div style={{ marginTop: 16 }}>
    15. <Radio.Group onChange={onChange} defaultValue="a">
    16. <Radio.Button value="a">Hangzhou</Radio.Button>
    17. <Radio.Button value="b" disabled>
    18. Shanghai
    19. </Radio.Button>
    20. <Radio.Button value="c">Beijing</Radio.Button>
    21. <Radio.Button value="d">Chengdu</Radio.Button>
    22. </Radio.Group>
    23. </div>
    24. <div style={{ marginTop: 16 }}>
    25. <Radio.Group disabled onChange={onChange} defaultValue="a">
    26. <Radio.Button value="a">Hangzhou</Radio.Button>
    27. <Radio.Button value="b">Shanghai</Radio.Button>
    28. <Radio.Button value="c">Beijing</Radio.Button>
    29. <Radio.Button value="d">Chengdu</Radio.Button>
    30. </Radio.Group>
    31. </div>
    32. </div>,
    33. mountNode,
    34. );

    大中小三种组合,可以和表单输入框进行对应配合。

    1. import { Radio } from 'antd';
    2. ReactDOM.render(
    3. <div>
    4. <div>
    5. <Radio.Group defaultValue="a" size="large">
    6. <Radio.Button value="a">Hangzhou</Radio.Button>
    7. <Radio.Button value="b">Shanghai</Radio.Button>
    8. <Radio.Button value="c">Beijing</Radio.Button>
    9. <Radio.Button value="d">Chengdu</Radio.Button>
    10. </Radio.Group>
    11. </div>
    12. <div style={{ marginTop: 16 }}>
    13. <Radio.Group defaultValue="a">
    14. <Radio.Button value="a">Hangzhou</Radio.Button>
    15. <Radio.Button value="b">Shanghai</Radio.Button>
    16. <Radio.Button value="c">Beijing</Radio.Button>
    17. <Radio.Button value="d">Chengdu</Radio.Button>
    18. </Radio.Group>
    19. </div>
    20. <div style={{ marginTop: 16 }}>
    21. <Radio.Group defaultValue="a" size="small">
    22. <Radio.Button value="a">Hangzhou</Radio.Button>
    23. <Radio.Button value="b">Shanghai</Radio.Button>
    24. <Radio.Button value="c">Beijing</Radio.Button>
    25. <Radio.Button value="d">Chengdu</Radio.Button>
    26. </Radio.Group>
    27. </div>
    28. </div>,
    29. mountNode,
    30. );