【问题标题】:How to make reactstrap modal open or close from parent component如何从父组件打开或关闭 reactstrap 模式
【发布时间】:2019-01-13 23:00:09
【问题描述】:

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

我将状态 isModalOpen 作为 prop 传递给子 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"));

【问题讨论】:

    标签: javascript reactjs reactstrap


    【解决方案1】:

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

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

    您还在ModalExample 组件中使用了toggleModalView 属性,但是您将函数作为toggle 传递,因此您应该改用this.props.toggle。您还将isModalOpen 作为isOpen 传递,因此您应该改用this.props.isOpen

    【讨论】:

      【解决方案2】:
          import React from 'react';
      import { Button, Modal, ModalFooter, ModalHeader,ModalBody} from 'reactstrap';
      
      
      class ModalExample extends React.Component {
          constructor(props) {
              super(props);
              this.state = {
                  modal: props.initialModalState,
                  fade: true
              };
      
              this.toggle = this.toggle.bind(this);
          }
      
          toggle() {
              this.setState({
                  modal: !this.state.modal,
                  fade: !this.state.fade
      
              });
          }
      
          render() {
              return (
                  <div>
                      <Button color="danger" onClick={this.toggle}>TOGGLE</Button>
                      <Modal isOpen={this.state.modal} toggle={this.toggle}
                             fade={this.state.fade}
                             className={this.props.className}>
                          <ModalHeader toggle={this.toggle}>Modal title</ModalHeader>
                          <ModalBody>
      
      
      
                          </ModalBody>
                          <ModalFooter>
                              <Button color="primary" onClick={this.toggle}>Do Something</Button>{' '}
                              <Button color="secondary" onClick={this.toggle}>Cancel</Button>
                          </ModalFooter>
                      </Modal>
                  </div>
              );
          }
      }
      
      export default class SampleApp extends React.Component {
          constructor(props) {
              super(props);
              this.state = {}
          }
      
          render() {
              return (
                  <div>
                      <ModalExample initialModalState={false} />
                  </div>
              )
          }
      }
      
      **This example getting call component modal from another component**
      

      【讨论】:

        猜你喜欢
        • 2019-09-30
        • 1970-01-01
        • 2018-09-03
        • 2018-02-03
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 2014-04-02
        • 1970-01-01
        相关资源
        最近更新 更多