reactjs - 使用 ES6 语法通过 onclick 事件响应传递参数

标签 reactjs

如何使用 ES6 语法将额外参数传递给 onClick 事件?

例如:

handleRemove = (e) => {

}

render() {
     <button onClick={this.handleRemove}></button>
}

我想将 id 传递给 handleRemove 函数,如下所示:

<button onClick={this.handleRemove(id)}></button>

最佳答案

请记住,在 onClick={ ... } 中,... 是一个 JavaScript 表达式。所以

... onClick={this.handleRemove(id)}

相同
var val = this.handleRemove(id);
... onClick={val}

换句话说,您立即调用 this.handleRemove(id),并将该值传递给 onClick,这不是您想要的。

相反,您想要创建一个新函数,其中一个参数已预先填充;本质上,您需要以下内容:

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 会自动在实例方法上为您绑定(bind) this,并且除非您将其更改为 this.handleRemove,否则它可能会报错。绑定(bind)(null,id)

你也可以简单地定义内联函数; arrow functions 使其变得更短如果您的环境或转译器支持它们:

... onClick={() => this.handleRemove(id)}

如果您需要访问该事件,您可以直接传递它:

... onClick={(evt) => this.handleRemove(id, evt)}

关于reactjs - 使用 ES6 语法通过 onclick 事件响应传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34350988/

相关文章:

javascript - React-router:允许未定义的路由传递给服务器

javascript - 函数 setState 中的事件目标为 null

javascript - 使用react、redux和react-router-redux路由到另一个页面之前的动画

node.js - REST API : Infinite scroll pagination in the GUI, 但允许搜索所有条目

javascript - 使用来自另一个库的 javaScript 移动元素后,React 无法更新 DOM

javascript - 在 React/Redux 中插入对象时如何避免 'two children with the same key' 警告

javascript - React Portal 输入更改删除元素

javascript - 更新 React Table 以在提交后不选择任何行

javascript - 类型错误:this.setState.myItems 未定义

javascript - 功能组件渲染四次 - 为什么不渲染两次呢?