1
私は基本的に送信時に検証するフォームの送信アクションを持っています。Reactjs submit formとsetStateが初めて動作しない
フォームを送信すると、エラーがレンダリングされるので、期待通りに機能しています。しかし、私はフォームを無効にすると、私は、ajaxのリクエストをしたくない提出を行うときに問題が発生します。最初のサブミット時にemailErrorが設定されていない(デフォルト)が、2番目のサブミット状態には正しいemailErrorがtrueに設定されていることがわかります。
私は反応文書から、setStateは保留状態で即座に利用できないことを理解しています。
どうすればこの問題を回避できますか?
私のコードは、あなたがvalidateEmail
を呼び出すが、何も返さないので、機能の残りはのは、呼び出される
register
で
import React, { Component } from 'react';
import isEmail from 'validator/lib/isEmail';
class formExample extends Component
{
constructor(props) {
super(props);
this.state = {
email: '',
emailError: false
};
this.register = this.register.bind(this);
this.updateState = this.updateState.bind(this);
}
updateState(e) {
this.setState({ email: e.target.value });
}
validateEmail() {
if (!isEmail(this.state.email)) {
console.log("setting state");
this.setState({ emailError: true });
return;
}
console.log(this.state);
this.setState({ emailError: false });
}
register(event) {
event.preventDefault();
this.validateEmail();
//only if valid email then submit further
}
render() {
return (
<div className="row">
<div className="col-md-2 col-md-offset-4"></div>
<div className="col-lg-6 col-lg-offset-3">
<form role="form" id="subscribe" onSubmit={this.register}>
<div className="form-group">
<input type="text" className="form-control" placeholder="Email..." name="email" value={this.state.email} onChange={this.updateState} />
<div className="errorMessage">
{this.state.emailError ? 'Email address is invalid' : ''}
</div>
</div>
<div className="input-group input-group-md inputPadding">
<span className="input-group-btn">
<button className="btn btn-success btn-lg" type="submit">
Submit
</button>
</span>
</div>
</form>
</div>
</div>
);
}
}
export default formExample;
おかげでreactjsが面白いことをやっていた考えていました。ちょうど純粋なバニラのjavascriptエラーdoh! – tjhack