react.js:如何将传入的事件处理程序绑定到子组件
react.js: How to bind passed-in event handler's this to child component?
下面是我的代码:
var Outer = React.createClass({
clickHandler: function(){
console.log(this.props.name);
},
render: function() {
return <div><Inner name="inner" clickHandler={this.clickHandler} /></div>;
}
});
var Inner = React.createClass({
render: function(){
return <div onClick={this.props.clickHandler}>This is Inner.</div>
}
});
我在这里要做的是打印出Inner的名称。但这段代码的实际结果总是打印出Outer的名称。我认为这是由"这个"引起的。我如何将"这个"与"内在"联系起来?
编辑:注意,你不能在React的组件之间绑定它。
你可以有一个中间函数返回属性。这可能是推荐的,因为您可以显式地安全地检查作为prop传递的回调方法(这使您的代码更具可移植性)。
var Outter = React.createClass({
clickHandler: function(innerName){
console.log(innerName);
},
render: function() {
return <div><Inner name="inner" clickHandler={this.clickHandler} /></div>;
}
});
var Inner = React.createClass({
_clickHandler : function() {
/*
Here you could add some validation that you truly have a callback in your props.
if(_(this.props.clickHandler).isFunction() ) {
}
*/
this.props.clickHandler('innerName');
},
render: function(){
return <div onClick={this._clickHandler}>This is Inner.</div>
}
});
编辑
问题中的用例与重用函数不同——在重用函数时使用mixins。而是为子节点提供回调。
这听起来像是mixins的完美用例。为你的功能创建一个mixin:
var myClickHandlerMixin = {
clickHandler: function () { /* ... */ }
};
var Outer = React.createClass({
mixins: [myClickHandlerMixin],
render: function() {
return <div><Inner name="inner" onClick={this.clickHandler} /></div>;
}
});
var Inner = React.createClass({
mixins: [myClickHandlerMixin],
render: function(){
return <div onClick={this.clickHandler}>This is Inner.</div>
}
});
您应该从Inner
显式传递Outer
所需的内容。因为这基本上是你唯一的选择,而且因为它使意图更明确。
类似:
var Outter = React.createClass({
clickHandler: function(name){
console.log(name);
},
render: function() {
return <div><Inner name="inner" clickHandler={this.clickHandler} /></div>;
}
});
var Inner = React.createClass({
render: function(){
return <div onClick={this.props.clickHandler.bind(this, 'Inner')}>This is Inner.</div>
}
});
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 异步处理所有事件处理程序的方法
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 如何在事件处理程序的回调中防止Default