React组件如何简化这个onClick功能?

React component how to simplify this onClick function?

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

我让它与下面的代码一起工作,但这让我有点头晕,我觉得这可以用更简单的方式完成。我说得对吗?

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>);
});

Function.prototype.bind() 也会部分应用任何附加参数,因此您应该可以这样做:

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

奖励: 如果您使用 React.createClass() 创建组件,则 bind()this 参数是多余的,因为它会自动- 为你绑定方法,所以我通常最终会写一个 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

...

var partial = require('./utils/partial')
// ...
onClick={partial(this.handleUnlink, p.id)}