【发布时间】:2016-04-09 08:43:07
【问题描述】:
我正在制作一个带有简单验证的 React 表单组件。每个字段都经过模糊验证,表单有一个简单的onSubmit 函数。布尔值存储在关于字段是否应显示错误消息的状态中,并在验证期间更新。
除了字段的onBlur 和表单的`onSubmit 同时触发外,一切正常。即,我在字段中输入内容并立即单击提交按钮。
首先执行onBlur,如果验证状态没有发生变化,则按预期执行onSubmit。然而,如果onBlur 改变了状态,那么onSubmit 函数永远不会被调用。
所以我的问题是;在组件中设置状态会清除任何排队的事件吗?是否有任何可能的解决方案?
这是我的代码的简化版本:
class SimpleForm extends React.Component {
constructor(props) {
super(props);
this.handleBlur = this.handleBlur.bind(this);
this.state = { shouldShowError: false }
}
handleBlur(event) {
console.log("blur")
const isEmpty = event.target.value === ""
this.setState({ shouldShowError: isEmpty })
}
handleSubmit(event) {
event.preventDefault()
console.log("submit")
}
render() {
return (
< form onSubmit = { this.handleSubmit} >
< input type = "text" onBlur = { this.handleBlur } />
{ this.state.shouldShowError ? < p > This field is required. < /p> : null }
< button type = "submit" > Submit < /button >
< /form>
)
}
};
ReactDOM.render(< SimpleForm / >, document.getElementById('container'));
还有一个JSFiddle,它应该可以让您自己查看错误。任何帮助都将不胜感激。
【问题讨论】:
标签: javascript reactjs forms validation dom-events