react-bootstrap ButtonGroup作为单选按钮

时间:2015-05-08 17:33:10

标签: react-bootstrap

我试图将一组react-bootstrap按钮组成一个单选按钮组。我可以使用带有<input type="radio">元素的bootstrap轻松完成此操作,但无法通过react-bootstrap找出如何执行此操作。以下代码允许用户选择每个按钮,而不只是一个。

JS:

const operationButtons = (    
  <ButtonGroup>
    <Button active>Radio 1</Button>
    <Button>Radio 2</Button>
  </ButtonGroup>
);

React.render(operationButtons, document.getElementById('operationButtonsDiv'));

HTML:

<div name="operationButtonsDiv" id="operationButtonsDiv" data-toggle="buttons"/>

5 个答案:

答案 0 :(得分:11)

自接受的答案以来,框架已经发生了变化,现在他们已经复制了Bootstrap框架的选项组行为。您现在需要做的就是为组中的每个选项添加组名称:

<Radio name="groupOptions">Option 1</Radio>
<Radio name="groupOptions">Option 2</Radio>
<Radio name="groupOptions">Option 3</Radio>

答案 1 :(得分:6)

所以我最终在Input中嵌入了一个无线电Button,就像你在Bootstrap中通常做的那样。

render() {
  return (
    <ButtonGroup>
      <Button active>Radio 1
        <Input ref="input1" type="radio" name="radioButtonSet" value='input1' standalone defaultChecked/>
      </Button>
      <Button>Radio 2
        <Input ref="input2" type="radio" name="radioButtonSet" value='input2' standalone/>
      </Button>
    </ButtonGroup>
  )
}

我还覆盖默认的.radio css来修复它的显示方式。

.radio {
  margin-top: 0;
  margin-bottom: 0;
}

React-bootstrap最终计划实施RadioGrouphttps://github.com/react-bootstrap/react-bootstrap/issues/342

答案 2 :(得分:4)

我刚遇到同样的问题并通过使用组件的状态来解决它:

_onOptionChange(option) {
    this.setState({
        option: option
    });
}

render() {
    render (
        <ButtonGroup>
            <Button onClick={this._onOptionChange.bind(this, 'optionA')} active={this.state.option === 'optionA'}>Option A</Button>
            <Button onClick={this._onOptionChange.bind(this, 'optionB')} active={this.state.option === 'optionB'}>Option B</Button>
        </ButtonGroup>
    );
}

答案 3 :(得分:3)

此页面上的某些答案无效。从那以后也许情况发生了变化。

我在React Bootstrap网站的帮助下将其组合在一起。

<Col>
    <InputGroup>
        <InputGroup.Prepend>
            <InputGroup.Radio  name="group1"/>
            <InputGroup.Text >London</InputGroup.Text>
        </InputGroup.Prepend>
        <FormControl/>
    </InputGroup> 
    <InputGroup>
        <InputGroup.Prepend>
            <InputGroup.Radio  name="group1"/>
            <InputGroup.Text >New York</InputGroup.Text>
        </InputGroup.Prepend>
        <FormControl/>
    </InputGroup> 
    <InputGroup>
        <InputGroup.Prepend>
            <InputGroup.Radio  name="group1"/>
            <InputGroup.Text >Colombo</InputGroup.Text>
        </InputGroup.Prepend>
        <FormControl/>
    </InputGroup> 

要使单选按钮组成为一个组,您必须给它们起一个名字(以便在任何给定时间只能选择一个单选按钮)。

添加表单控件可以使输入的边缘圆滑,但也可以使单选按钮标签可编辑。如果存在问题,则可以省略表单控件。

如果您想改变外观,可以尝试一下。

<Form.Check
    type="radio"
    label="London"
    name="group2"
    id="radio1"
/> 
<Form.Check
    type="radio"
    label="New York"
    name="group2"
    id="radio2"
/> 
<Form.Check
    type="radio"
    label="Colombo"
    name="group2"
    id="radio3"
/> 

但是,使用这些方法获得价值并处理onChange十分困难。最终我使用了另一个控件。

这是一个名为react-radio-group的npm软件包。您必须通过在命令上运行此行来安装它。

npm install react-radio-group

然后将其导入您的文件中。

import { Radio, RadioGroup} from 'react-radio-group'

这是按钮组的代码。

<RadioGroup name="fruits" onChange={(e) => handleOnChange(e)}>
   <div className="radio-button-background">
       <Radio value="Apple" className="radio-button" />Apple
   </div>
   <div className="radio-button-background">
       <Radio value="Orange" className="radio-button" />Orange
   </div>
   <div className="radio-button-background">
       <Radio value="Banana" className="radio-button" />Banana
   </div>
</RadioGroup>

classNames是我提供样式的地方。

答案 4 :(得分:0)

只需使用适用于我的标签。确保它们都具有相同的名称=“radio-group-value-here”。要在渲染时选择其中一个按钮,请使用checked = {bool}。我也使用disabled = {bool}来显示但不允许一些选择。我决定使用似乎正在工作的onClick。最后,这一切都在一个对话框中,并且需要偏移以防止单选按钮在左边缘上滑动。

<Row>
    <Col sm={11} smOffset={1} >
        <Radio name="changeset-chooser"
               checked={this.state.checked === 'current'}
               disabled={this.props.changeset.status === "pending"}
               onClick={ (e) => { /* event handler */ } } >
            Current Data
        </Radio>
    </Col>
</Row>
<Row>
    <Col sm={3} smOffset={1} >
        <Radio name="changeset-chooser"
               onClick={ (e) => { /* event handler */ } } >
            History
        </Radio>
    </Col>
    <Col sm={7}  >
          <NotPartOfSample />
    </Col>
</Row>