首页 > 解决方案 > 如何从父组件打开或关闭 reactstrap 模式

问题描述

我正在尝试从父组件按钮打开/关闭 reactstrap 模式,但我无法让它工作。

我将状态isModalOpen作为道具传递给子ModalExample组件,它的变化如我制作的调试文本字段中所示,但模式似乎没有打开。

任何帮助表示赞赏。这是一个 jsfiddle:https ://jsfiddle.net/67wy5nqp/

const { Button, Modal, ModalHeader, ModalBody, ModalFooter } = Reactstrap;

class ModalExample extends React.Component {
  constructor(props) {
    super(props);
    console.log(this.props);
  }

  render() {
    return (
      <div>
        <br />
        <label>
          (child) this.props.isOpen
          <input type="text" value={this.props.isOpen} />
        </label>

        <Modal
          isOpen={this.props.isModalOpen}
          toggle={this.props.toggleModalView}
          className={this.props.className}
        >
          <ModalHeader toggle={this.props.toggleModalView}>
            Modal title
          </ModalHeader>
          <ModalBody>
            Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
            eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
            ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
            aliquip ex ea commodo consequat. Duis aute irure dolor in
            reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
            pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
            culpa qui officia deserunt mollit anim id est laborum.
          </ModalBody>
          <ModalFooter>
            <Button color="primary" onClick={this.props.toggleModalView}>
              Do Something
            </Button>
            <Button color="secondary" onClick={this.props.toggleModalView}>
              Cancel
            </Button>
          </ModalFooter>
        </Modal>
      </div>
    );
  }
}

class SampleApp extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isModalOpen: true
    };

    this.showModal = this.showModal.bind(this);
    this.toggle = this.toggle.bind(this);
  }

  toggle() {
    this.setState({
      isModalOpen: !this.state.isModalOpen
    });
  }

  showModal() {
    this.setState({
      isModalOpen: true
    });
  }

  render() {
    return (
      <div>
        <ModalExample
          isOpen={this.state.isModalOpen}
          toggle={this.state.isModalOpen}
        />

        <br />
        <button className="btn btn-primary" onClick={this.toggle}>
          Show Modal From Parent Component
        </button>

        <br />
        <label>
          (parent) this.state.isModalOpen:
          <input type="text" value={this.state.isModalOpen} />
        </label>
      </div>
    );
  }
}

ReactDOM.render(<SampleApp />, document.querySelector("#app"));

标签: javascriptreactjsreactstrap

解决方案


您将状态变量isModalOpen作为指示它是否打开的变量以及用于切换它的函数传递。用于this.toggle切换。

<ModalExample
  isOpen={this.state.isModalOpen}
  toggle={this.toggle}
/>

您也在组件中使用了toggleModalView道具ModalExample,但是您将函数作为 传递toggle,因此您应该this.props.toggle改用。你也传入isModalOpenas isOpen,所以你应该this.props.isOpen改用。


推荐阅读