繁体   English   中英

如何从另一个组件获取按钮 ID?

[英]How to get button ID from another component?

我尝试使用 Reactstrap 的弹出框

这是我的代码片段:

constructor(props) {
  super(props);
  this.state = {
    popoverOpen: false
  };
}

toggle = () => {
  this.setState({popoverOpen: !this.state.popoverOpen})
};

<div>
  <Button id="Popover1" type="button">
    Launch Popover
  </Button>
  <Popover placement="bottom" isOpen={this.state.popoverOpen} target="Popover1" toggle={this.toggle}>
    <PopoverHeader>Popover Title</PopoverHeader>
    <PopoverBody>Hello there :)</PopoverBody>
  </Popover>
</div>

上面的代码已经可以工作了。

但是,现在我想将另一个组件上的按钮分开。

那么,任何示例如何做到这一点..?

是否可以从另一个组件中获取按钮 ID..? 或者,我应该从另一个组件设置状态..? 如果是这样,请举一个例子或来源来学习。

我认为这个任务可以通过React 状态提升来解决。

这个想法是根据需要创建 Button 组件并将其传递给它的toggle功能,因此 Button 组件将在每次调用时调用它。 您也可以传递this.state.popoverOpen以便 Button 组件知道当前是否打开了this.state.popoverOpen 您的 min 组件将具有相同的状态,但您的 Button 组件将具有父组件的状态作为道具。

这是示例(此代码未经测试!仅用作提示!)

// ButtonComponent.js
// import React and other nesessary things
export default class ButtonComponent extends React.Component {
    constructor(props) {
        super(props);
    }

    render () {
        return <Button id={this.porps.ButtonID} type="button" onClick={this.props.toggle}>
            Launch Popover
        </Button>
    }
}

// mainComponent.js
import ButtonComponent from './ButtonComponent.js'

export default MainComponent extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            popoverOpen: false
        };
    }

    toggle = () => {
        this.setState({popoverOpen: !this.state.popoverOpen})
    };

    render () {
        return <div>
            <ButtonComponent toggle={this.toggle.bind(this)} ButtonID={"Popover1"}/>
            <Popover placement="bottom" isOpen={this.state.popoverOpen} target="Popover1" toggle={this.toggle}>
                <PopoverHeader>Popover Title</PopoverHeader>
                <PopoverBody>Hello there :)</PopoverBody>
            </Popover>
        </div>
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM