【发布时间】:2018-04-06 10:11:09
【问题描述】:
我有一个登录按钮(哑组件)会触发一个函数 onClick:
<Button loading={this.state.isBusy}
onClick={this.login}>Login</Button>
但问题是,当用户输入错误的凭据并多次按 Enter 键时,该功能也会被多次触发,并且同时出现一些警告消息(警告消息告诉用户凭据错了)。
我已经尝试了一些解决方案来解决这个问题:
- 设置状态不是一个有效的解决方案,因为状态的修改速度不够快。
- 我已尝试使用 ref 禁用按钮,但我无法使用它的新版本 (React.createRef()),因为它仅适用于 React 16.3 版本我正在运行 16.2 版。
- 我尝试使用 e.target 将禁用添加到按钮:onClick={(e) => this.login(e)},然后 e.target.setAttribute ("disabled", "disabled"); 在 login() 函数中,但是当你快速回车时这不起作用。
- 最后,我尝试在类中使用全局变量:this.isLoading = false;为了使用它而不是状态来停止 login() 函数被触发if isLoading === true。
所以我在这里寻求帮助。如果我不够清楚,请告诉我。
提前非常感谢!
编辑:这是我在 login() 函数中呈现警告的方式:
if(!this.state.usernameValue) {
EventEmitter.emit(EventEmitter.events.messagePopup.OPEN_MESSAGE_POPUP_ALERT, {message: "Please enter a username or e-mail!"});
return;
}
if(!this.state.passwordValue) {
EventEmitter.emit(EventEmitter.events.messagePopup.OPEN_MESSAGE_POPUP_ALERT, {message: "Please enter a password!"});
return;
}
【问题讨论】:
-
如何呈现警告?您能否将相关代码添加到您的问题中?
-
处理多个表单提交的一种流行方法是在检查凭据时显示一个微调器。请为您的实现分享一个 js fiddle。
标签: javascript reactjs