如何检测哪个 React 组件触发了 onKeyUp 事件
How to detect which React component triggers onKeyUp event?
假设我们有一个onKeyUp
处理程序:
handleKeyUp: function(e) {
/* handle stuff */
},
我们有几个输入组件,它们都可以触发处理程序:
<input type="text" ref="login" onKeyUp={this.handleKeyUp} />
...
<input type="text" ref="pwd" onKeyUp={this.handleKeyUp} />
如何使处理程序可以检测onKeyUp
是从login
还是pwd
触发的?
一种情况是我检测到pwd
上的 Tab 键按下,然后我继续尝试保存文本字段(但不是我从 login
上跳下来的地方)。
我尝试查看e.target
的详细信息,但无法弄清楚如何引用原始组件。
更新
对不起,一定是想不清楚。是的,e.target
是对原始组件的引用。我希望掌握ref
以获得价值。但我不需要 ref,我可以从 e.target.value
中获取值。
如 React Event System
文档中所述:
您的事件处理程序将传递 SyntheticEvent 的实例,SyntheticEvent 是浏览器本机事件的跨浏览器包装器。它具有与浏览器本机事件相同的接口,包括 stopPropagation() 和 preventDefault(),除了这些事件在所有浏览器中的工作方式相同。
因此,SyntheticEvent
的实例将传递给您的回调
handleKeyUp: function(event) {
/* event is an instance of SyntheticEvent
from wich you can extract the currentTarget
*/
},
编辑:如果您真的想在执行任何操作之前访问组件的ref
名称,以下是在 ES6 中执行此操作的方法:
class MyComponent extends React.Component {
constructor() {
super();
this.handleLoginKeyUp = this.keyUpHandler.bind(this, 'LoginInput');
this.handlePwdKeyUp = this.keyUpHandler.bind(this, 'PwdInput');
}
keyUpHandler(refName, e) {
console.log(refName);
// prints either LoginInput or PwdInput
}
render() {
return (
<div>
<input type="text" onKeyUp={this.handleLoginKeyUp} ref="LoginInput" />
<input type="text" onKeyUp={this.handlePwdKeyUp} ref="PwdInput" />
</div>
);
}
}
相关文章:
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 单元测试:使用酶模拟父组件中子组件的点击事件
- React/flux - 子组件用户事件 - 是否应通过调度程序路由所有内容
- React:如何侦听子组件事件
- 将事件绑定到其他UI组件's函数,在Kendo MVVM中
- 如何更新angular2中组件之间的事件数据
- 点击tpl链接时,ExtJS 4.2自定义组件触发事件
- 反应:在嵌套组件上冒泡点击事件
- 如何根据其他组件中的事件更新组件URL
- 使用Ember中的组件生命周期事件
- 如何将事件绑定到模式对话框上的组件
- 将事件处理程序推送到父组件
- React,在组件事件上呈现消息的最佳方法
- 如何确定Twitter引导组件事件的来源
- 取消ExtJS组件事件
- Ember:嵌套组件事件冒泡
- 获取飞行组件事件的委托目标
- EmberJS嵌套组件事件
- Angular js文本Angular组件事件上键
- ExtJS“创建”或“初始化”组件事件侦听器