我有一个像这样的人:
使用以下代码:
<form onKeyPress={this.login.bind(this)}>
<input type="text" placeholder="username"/>
<input type="password" placeholder="password"/>
<button type="button" onClick={this.login.bind(this)}>Log In</button>
</form>
虽然我有login()
方法,但如下所示:
login(e){
if((e.type==='keypress' && e.which===13) || e.type==='click'){
//Do login operations:
this.props.store.login()//the method inside MobX store
}
}
在以下场景中,没有错误,我可以登录:
login
按钮
但是下面的第三种情况,由于登录操作被调用两次而给我错误:
我想知道什么是可以避免第三种情况错误的最佳做法。我查看了其他相关的SO问题,但我无法找出最佳实践。
我忘了提及我在ReX中使用ReactJS。
答案 0 :(得分:1)
通过将onKeyPress
标记从<form>
标记移动到文字类型<input>
标记来解决问题:
<form>
<input type="text" placeholder="username" onKeyPress={this.login.bind(this)}/>
<input type="password" placeholder="password" onKeyPress={this.login.bind(this)}/>
<button type="button" onClick={this.login.bind(this)}>Log In</button>
</form>
答案 1 :(得分:1)
如果更适合您的用例,您还可以使用onSubmit
事件:
示例(JS Bin)
class App extends Component {
login = (e) => {
e.preventDefault();
console.log('login');
}
render() {
return (
<form onSubmit={this.login}>
<input type="text" placeholder="username" />
<input type="password" placeholder="password" />
<button type="submit">Log In</button>
</form>
);
}
}