Reagieren js: Öffnen Sie gleichen modal aus verschiedenen Komponenten

Ich öffnen möchte Modal, sagen Sie 'modal für login', aus den verschiedenen Komponenten in meiner app Reagieren. Für ex: ich will das modale öffnen von A.js, B.js und C.js. Also habe ich eine neue Komponente ModalWindow.js enthält die modalen und ich importierte es in A.js, B.js und C.js.

Nun das Problem ist, dass ich Zustand zu halten showModal: false in allen 3 Komponenten für die Modale zum ein - /ausblenden. Gibt es trotzdem, ich habe die Verwaltung eines einzigen Staates.

Eine Möglichkeit ist, dass ich den Status beizubehalten, in der übergeordneten Komponente. Aber gibt es eine bessere Art und Weise möglich?

X.js

import A from 'A.js'
import B from 'B.js'
import C from 'C.js'

class X extends Component {
  return(
    render{
      <div>
        <A />
        <B />
        <C />
      </div>
    }
  )
}

export default X

A.js

import ModalWindow from 'ModalWindow.js'

class A extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    };
  }
  return(
    render{
      <ModalWindow show={this.state.showModal} container={this}/>
    }
  )
}

export default A

B.js

import ModalWindow from 'ModalWindow.js'

class B extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    };
  }
  return(
    render{
      <ModalWindow show={this.state.showModal} container={this}/>
    }
  )
}

export default B

C.js

import ModalWindow from 'ModalWindow.js'

class C extends Component {
  constructor(props) {
    super(props);
    this.state = {
      showModal: false
    };
  }
  return(
    render{
      <ModalWindow show={this.state.showModal} container={this}/>
    }
  )
}

export default C

ModalWindow.js

import Modal from 'Bootstrap/Modal'

class ModalWindow extends Component {
  return(
    render{
      <Modal
      show={this.props.showModal}
      container={this.props.container}
      bsSize='small'
    >
      <Modal.Header closeButton="true">
        <Modal.Title id="contained-modal-title">
          Login
        </Modal.Title>
      </Modal.Header>
      <Modal.Body>
        Login Here
      </Modal.Body>
    </Modal>
    }
  )
}

export default ModalWindow
  • Wenn Sie mit Redux können Sie halten den Zustand in einem Redux speichern und dann dispatch-Maßnahmen im untergeordneten Komponenten zu zeigen - aber ich würde nicht empfehlen, die Umsetzung wiedermal nur für diesen Zweck.
  • Ich benutze redux schon.
  • Auch einen gemeinsamen Ansatz, den ich nehmen ist, um einen "Anzeige" - reducer, die behandelt verschiedene Zustände anzeigen. Dann habe ich eine Aktion die in einer Nachricht, dass zeigt die modale mit der Nachricht. Dann in der modal-selbst ich könnte einen button, onClick, feuert eine Aktion, hinter der sich die modal.
InformationsquelleAutor iamsaksham | 2016-09-28
Schreibe einen Kommentar