请记住,在onClick={ ... } 中,... 是一个 JavaScript 表达式。所以
... onClick={this.handleRemove(id)}
与
相同
var val = this.handleRemove(id);
... onClick={val}
换句话说,您立即调用this.handleRemove(id),然后将该值传递给onClick,这不是您想要的。
相反,您想创建一个 new 函数,其中一个参数已经预填充;本质上,您需要以下内容:
var newFn = function() {
var args = Array.prototype.slice.call(arguments);
// args[0] contains the event object
this.handleRemove.apply(this, [id].concat(args));
}
... onClick={newFn}
在 ES5 JavaScript 中有一种表达方式:Function.prototype.bind。
... onClick={this.handleRemove.bind(this, id)}
如果你使用React.createClass,React 会在实例方法上自动为你绑定this,除非你将其更改为this.handleRemove.bind(null, id),否则它可能会报错。
你也可以简单的内联定义函数;如果您的环境或转译器支持arrow functions,这会缩短:
... onClick={() => this.handleRemove(id)}
如果您需要访问该事件,您可以直接传递它:
... onClick={(evt) => this.handleRemove(id, evt)}