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)}
这并不是一个真正的 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)}