React-Bootstrap 麻烦 w/ButtonGroup 或者放在哪里?

React-Bootstrap trouble w/ ButtonGroup OR where to put modals?

react-bootstrap 中,我正在尝试创建一个可重复使用的按钮 class,单击该按钮会显示模式。最终,Modal 将包含一个 "edit" 表单,用于修改 table/list 中的多个条目之一。

在这里,我将问题简化为一个简单的 "confirm" 对话框,以尝试获得一个最基本的完整示例。

我遇到的问题是在 ButtonGroup 中嵌入 ModalButton 会破坏按钮组的格式。具体来说,自定义 ConfirmActionButton 将显示为独立按钮,而不是组的一部分。

我知道我可以通过将 Modal 完全移到 ButtonGroup 之外来解决布局问题(也许这是正确的做法?),但这似乎不太好封装/模块化.

有没有办法让这个渲染像一个普通的按钮组?还是重新安排 Modal 居住的地方是唯一真正的前进方向?

以下是我在 jsfiddle 中的示例:

/* A bunch of var 'X = ReactBootstrap.X' lines ommitted here */

var ConfirmActionButton = React.createClass({
  getInitialState : function(){
    return {show : false};
  },
  ok : function(){ 
    this.setState({showModal:false}); 
    this.props.onClick();
  },
  cancel : function(){ 
    this.setState({showModal:false}); 
  },
  show : function(){ 
    this.setState({showModal:true}); 
  },
  render : function() {
    return (
      <span>
        <Button onClick={this.show} >
          {this.props.children}
        </Button>
        <Modal show={this.state.showModal} >
          <ModalHeader>Confirm</ModalHeader>
          <ModalBody>{this.props.confirmMessage}</ModalBody>
          <ModalFooter>
            <Button onClick={this.cancel}>Ok</Button>
            <Button onClick={this.ok}>Ok</Button>
          </ModalFooter>
        </Modal>
      </span>
    );
  }
});

var MyToolbar = React.createClass({

  render: function(){
    return (
      <ButtonToolbar>
        <ButtonGroup>
          <Button>Click Here</Button>
          <Button>No, Here</Button>
          <ConfirmActionButton confirmMessage="Are you sure?" 
                               onClick={this.someAction}
          >
            Do Something
          </ConfirmActionButton>
        </ButtonGroup>
      </ButtonToolbar>
    );
  },

  someAction : function()
  {
    alert("you did it");
  },
});

ReactDOM.render(
    <div>
      <MyToolbar />
    </div>,
    document.getElementById('example')
);

您可以将 <Modal /> 放在 <ConfirmActionButton /><Button /> 中,并删除破坏 btn-grp 布局的 <span>

    <Button onClick={this.show} >
      {this.props.children}
      <Modal show={this.state.showModal} >
        <ModalHeader>Confirm</ModalHeader>
        <ModalBody>{this.props.confirmMessage}</ModalBody>
        <ModalFooter>
          <Button onClick={this.cancel}>Cancel</Button>
          <Button onClick={this.ok}>Ok</Button>
        </ModalFooter>
      </Modal>
    </Button>