Beim Abschicken des Formulars möchte ich 'Please wait ..' anzeigen und bei erfolgreicher Übermittlung die Daten vom Server zurückgeben. Mit jQuery ist es einfach zu tun. Aber es sollte einen React-Weg geben, da React solch eine direkte DOM-Manipulation nicht mag - denke ich. 1) Bin ich richtig? 2) Wie zeigt man die Nachricht auf (nicht nach) Formular Einreichung?react.js - eine Nachricht auf und nach der Formularübergabe anzeigen
var FormComp = React.createClass({
handleSubmit:function(){
var userName=this.refs.userName.getDOMNode().value.trim();
var userEmail= this.refs.userEmail.getDOMNode().value.trim();
if(!userName || !userEmail){
return;
}
this.props.onFormSubmit({userName:userName, userEmail:userEmail,url:"/api/submit"});
this.refs.userName.getDOMNode().value='';
this.refs.userEmail.getDOMNode().value='';
return;
},
render: function() {
var result=this.props.data;
return (
<div className={result}>{result.message}</div>
<form className="formElem" onSubmit={this.handleSubmit}>
Name: <input type="text" className="userName" name="userName" ref="userName" /><br/>
Email: <input type="text" className="userEmail" name="userEmail" ref="userEmail" /><br/>
<input type="submit" value="Submit" />
<form >
</div>
);
}
});
var RC= React.createClass({
getInitialState: function() {
return {data: ""};
},
onFormSubmit:function(data){
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'POST',
data: data,
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
render:function(){
return <FormComp onFormSubmit={this.onFormSubmit} data={this.state.data}/>
}
});
React.render(
<RC/>,
document.getElementById('content')
);
können Sie einen Blick auf eine andere haben React Frage hier - http://stackoverflow.com/questions/27913004/react-js-render-a -komponente-von-außen-reagieren? –
sollten nicht 'userName' und' userEmail' in 'handleSubmit' aus' refs' anstelle von 'state' berechnet werden? –
Hoppla, tut mir leid. Sie haben vergessen, die Eingabeänderungen zu bearbeiten, sodass der Status immer aktuell ist. Ich finde es besser, diesen Zustand absichtlich zu speichern, anstatt ihn in dom-Elementen zu speichern. Gibt Ihnen mehr Möglichkeiten, wenn Sie sich entscheiden, wie die Dinge funktionieren. – Shawn