Ich brauche/close wieWie man react-bootstrap modal programmgesteuert öffnet/schließt?
modal zu öffnen$ (Element) .modal ('show')
Wie das zu tun?
Ich brauche/close wieWie man react-bootstrap modal programmgesteuert öffnet/schließt?
modal zu öffnen$ (Element) .modal ('show')
Wie das zu tun?
Sie suchen nach dem benutzerdefinierten modalen Trigger, der die OverlayMixin
verwendet und Ihnen ermöglicht, den Status des Modales selbst zu verwalten. Sie können steuern, ob das Modal mit this.setState({isModalOpen: true})
angezeigt wird, um das Äquivalent zu dem zu erreichen, was Sie in Ihrem Beitrag im folgenden Beispiel gefordert haben. Der folgende Code ist von der Reaktion-Bootstrap-Website (http://react-bootstrap.github.io/components.html#modals):
const CustomModalTrigger = React.createClass({
mixins: [OverlayMixin],
getInitialState() {
return {
isModalOpen: false
};
},
handleToggle() {
this.setState({
isModalOpen: !this.state.isModalOpen
});
},
render() {
return (
<Button onClick={this.handleToggle} bsStyle='primary'>Launch</Button>
);
},
// This is called by the `OverlayMixin` when this component
// is mounted or updated and the return value is appended to the body.
renderOverlay() {
if (!this.state.isModalOpen) {
return <span/>;
}
return (
<Modal bsStyle='primary' title='Modal heading' onRequestHide={this.handleToggle}>
<div className='modal-body'>
This modal is controlled by our custom trigger component.
</div>
<div className='modal-footer'>
<Button onClick={this.handleToggle}>Close</Button>
</div>
</Modal>
);
}
});
React.render(<CustomModalTrigger />, mountNode);
UPDATE (4 Aug, 2015)
In der neuesten Version von React-Bootstrap, ob ein modal angezeigt wird oder nicht wird durch eine show
Stütze gesteuert, die an das Modal übergeben wird. Die OverlayMixin
wird nicht mehr benötigt, um den modalen Zustand zu steuern. Die Steuerung des Zustandes des Modales erfolgt weiterhin über setState
, in diesem Beispiel über this.setState({ showModal: true })
. Im Folgenden wird anhand des Beispiels auf dem React-Bootstrap Webseite aus:
const ControlledModalExample = React.createClass({
getInitialState(){
return { showModal: false };
},
close(){
this.setState({ showModal: false });
},
open(){
this.setState({ showModal: true });
},
render() {
return (
<div>
<Button onClick={this.open}>
Launch modal
</Button>
<Modal show={this.state.showModal} onHide={this.close}>
<Modal.Header closeButton>
<Modal.Title>Modal heading</Modal.Title>
</Modal.Header>
<Modal.Body>
<div>Modal content here </div>
</Modal.Body>
<Modal.Footer>
<Button onClick={this.close}>Close</Button>
</Modal.Footer>
</Modal>
</div>
);
}
});
Ihre modal eine show
prop haben und eine onHide
prop zu bestimmen, wenn es angezeigt wird. Z.B .:
<Modal show={this.state.showModal} onHide={this.close}>
Die onHide
Funktion ändert einfach showModal
staatliches Eigentum. Ihre modal ist/ausgeblendet wurde, basierend auf der übergeordneten Zustand:
close(){
this.setState({ showModal: false });
}
Wenn Sie das modale innerhalb des modalen selbst schließen möchten, können Sie die onHide
Funktion definiert auf der übergeordneten über props
auslösen können. Zum Beispiel ist dies eine Taste irgendwo innerhalb des modalen Schließen es:
<button type="button" className="close" onClick={this.props.onHide}>
<span>×</span>
</button>
Here is a fiddle diesen Workflow zu simulieren.
Ich würde gerne Ihre Argumentation hören, wenn Sie Ihre Meinung ändern. –
Dies ist kein Bootstrap-Modal. –
https://jsfiddle.net/16j1se1q/1/ So sieht ein Modal aus.Dein Beispiel ist ein Beispiel dafür, wie man ein div in react erscheinen und verschwinden lässt, was nützlich ist, aber nicht für dieses Problem –
öffnen und schließen reagieren-Bootstrap-modal programmatisch/dynamisch aus dem Zustand:
Hier habe ich die ES6 Syntax Klasse Komponente Syntax.
import React, { Component, PropTypes } from 'react';
import { Modal, Button } from 'react-bootstrap';
import './GenericModal.scss';
class GenericModal extends Component {
constructor(props, context) {
super(props, context);
this.state = {
showModal: false
};
this.open = this.open.bind(this);
this.close = this.close.bind(this);
}
open() {
this.setState({showModal: true});
}
close() {
this.setState({showModal: false});
}
render() {
return(
<div>
<div>I am a Bootstrap Modal</div>
<Button onClick={this.open}>Show Modal</Button>
<div>
<Modal className="modal-container"
show={this.state.showModal}
onHide={this.close}
animation={true}
bsSize="small">
<Modal.Header closeButton>
<Modal.Title>Modal title</Modal.Title>
</Modal.Header>
<Modal.Body>
One of fine body.........
</Modal.Body>
<Modal.Footer>
<Button onClick={this.close}>Close</Button>
<Button bsStyle="primary">Save changes</Button>
</Modal.Footer>
</Modal>
</div>
</div>
);
}
}
export default GenericModal;
funktioniert nicht, wenn Sie ein Formular-Element zugreifen müssen in der Modal mit 'refs' – vaughan
in diesem Thema läuft - http://stackoverflow.com/questions/30782948/why-calling-react-setstate- method-doesnt-mutate-the-state-sofort "setState() mutiert nicht sofort this.state, sondern erzeugt einen ausstehenden Statusübergang. Der Zugriff auf this.state nach dem Aufruf dieser Methode kann möglicherweise den vorhandenen Wert zurückgeben. Es gibt keine Garantie für synchrone Die Aufrufe von setState und Calls können zur Steigerung der Performance stapelweise durchgeführt werden. " Ich rufe setState und es aktualisiert nicht – Steve
Steve, was ist Ihr spezielles Problem? Vielleicht können Sie eine Frage mit Ihrem Code und dem Problem, das Sie haben, posten. – Mark