Wie man reactive.js zusammen mit demb spielen kann, zeigt Modalform
Ich versuche mich zu integrieren, zurb offenbaren, mit der form zu reagieren Komponente. Bisher folgender code korrekt angezeigt modales Formular:
ModalForm = React.createClass({
handleSubmit: function(attrs) {
this.props.onSubmit(attrs);
return false;
},
render: function(){
return(
<div>
<a href="#" data-reveal-id="formModal" className="button">Add new</a>
<div id="formModal" className="reveal-modal" data-reveal>
<h4>Add something new</h4>
<Form onSubmit={this.handleSubmit} />
<a className="close-reveal-modal">×</a>
</div>
</div>
);
}
});
Den Form
Komponente ist ziemlich standard:
Form = React.createClass({
handleSubmit: function() {
var body = this.refs.body.getDOMNode().value.trim();
if (!body) {
return false;
}
this.props.onSubmit({body: body});
this.refs.body.getDOMNode().value = '';
return false;
},
render: function(){
return(
<form onSubmit={this.handleSubmit}>
<textarea name="body" placeholder="Say something..." ref="body" />
<input type="submit" value="Send" className="button" />
</form>
);
}
});
Problem: Wenn ich render form-Komponente im Formular modal-Komponente und geben Sie etwas in form Eingang, dann sehe ich in der Konsole Ausnahme Uncaught object
. Dies ist ein stack:
Uncaught object
invariant
ReactMount.findComponentRoot
ReactMount.findReactNodeByID
getNode
...
Wenn ich nur render-form-Komponente direkt in der übergeordneten Komponente, dann funktioniert alles. Könnte irgend jemand bitte helfen?
InformationsquelleAutor der Frage Voldy | 2014-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurz gesagt, du machst das falsch und dies ist nicht ein Fehler in reagieren.
Wenn Sie jede Art von plugin, das ändert reagieren die Komponente dom-Knoten, dann ist es zu brechen, Dinge in die eine oder andere Weise.
Was Sie tun sollten stattdessen ist, reagieren mit sich selbst, und Ergänzende css, um die position der Komponente in der Weise, die Sie gerne für Ihr modales Dialogfeld.
Ich würde vorschlagen, erstellen Sie eine Komponente, die verwendet wird, reagieren die
statics
Komponente Eigenschaft zu definieren, die ein paar Funktionen VerpackungrenderComponent
zu geben, Ihnen eine schöne, saubere Funktion aufrufen, um ein-oder ausblenden einen dialog reagieren. Hier ist ein cut-down-Beispiel für etwas, was ich in der Vergangenheit verwendet habe. NB: Es tut jQuery verwenden, aber Sie könnten ersetzen das jQ mit standard js-api-Aufrufe an Dinge wieelementById
und etc, wenn Sie nicht wollen, dass der jQuery-code.Anschließend öffnen Sie ein Dialogfeld durch aufrufen:
MyDialog.open({title: 'Dialog Title', content: 'My dialog content'});
Und schließen Sie es mit
MyDialog.close()
Den dialog immer legt, um einen neuen dom-Knoten direkt unter dem Körper mit der id 'dialog-Anker". Wenn Sie einen dialog öffnen, wenn man bereits geöffnet, wird Sie einfach aktualisieren Sie die dom-basierend auf neuen props (oder nicht, wenn Sie gleich sind).
Natürlich vorbei an den Inhalt der dialog als Requisiten argument ist nicht besonders hilfreich. Ich in der Regel verlängern unten, um entweder Parsen von markdown -> html ist für den Inhalt oder html Code über eine ajax-Anfrage innerhalb der Komponente bei Lieferung einer url, die als requisite statt.
Ich weiß, der obige code ist nicht genau das, was Sie suchen, aber ich glaube nicht, dass es ein guter Weg, um eine dom-ändern-plugin funktioniert mit reagieren. Man kann nie davon ausgehen, dass die dom-Darstellung der reagieren Komponente ist statisch und kann daher nicht manipuliert werden, um ein 3rd-party plugin erfolgreich. Ich denke ehrlich gesagt, dass wenn Sie verwenden möchten, reagieren auf diese Weise sollten Sie die neu zu bewerten, warum bist du mit dem Rahmen.
Sagte, ich denke, der code oben ist ein guter Ausgangspunkt für einen dialog, in dem alle manipulation tritt innerhalb der Komponente, die schließlich ist, was reactjs!
NB: code geschrieben wurde, sehr schnell aus dem Gedächtnis und nicht wirklich untersucht in seiner aktuellen form also sorry, wenn es ein paar kleine syntax-Fehler oder so etwas.
InformationsquelleAutor der Antwort Mike Driver
Hier ist, wie zu tun, was Mike Tat, aber mit einem zf-reveal-modal:
InformationsquelleAutor der Antwort orourkedd