React组件如何简化这个onClick函数?

时间:2015-02-08 20:43:23

标签: javascript reactjs

这不是React特定的问题,但我认为了解上下文会有所帮助。在组件I中生成一些表行。每行都需要一个onClick函数,它将id传递给组件handleUnlink方法。

我让它使用下面的代码,但它使我的头旋转了一点,我感觉这可以以一种简单的方式完成。我是对的吗?

var fn = function(id){
  return function(){
    this.handleUnlink(id);
  }.bind(this);
}.bind(this); 

var linkedListHtml = this.state.linkedList.map( p => {
  return(
    <tr key={p.id}>
    <td>{p.name}</td>
    <td><mui.Icon icon='action-highlight-remove' onClick={fn(p.id)}/></td>
    </tr>);
});

1 个答案:

答案 0 :(得分:3)

Function.prototype.bind()也会部分应用任何其他参数,因此您应该能够这样做:

onClick={this.handleUnlink.bind(this, p.id)}

加分:如果您使用this创建组件,则bind()的{​​{1}}参数是多余的,因为它会自动绑定方法对你而言,我通常最终会写一个React.createClass()帮手:

partial

...

'use strict';
var slice = Array.prototype.slice
function partial(fn) {
  var partialArgs = slice.call(arguments, 1)
  return function() {
    return fn.apply(this, partialArgs.concat(slice.call(arguments)))
  }
}
module.exports = partial