React 事件处理函数以及传参
在React class组件中,给事件绑定处理函数需要注意一下this的指向,还有获取事件对象以及函数的传参,我们将分几种情况看看到底该怎么做
普通函数形式
如果使用function函数声明一个事件处理函数,我们需要特别注意this的指向,在constructor中修改this的指向或者直接在绑定的时候修改,并且事件对象会默认追加到入参尾部。
如果给处理函数传参了,事件对象是追加到所有入参的尾部的
import React from 'react';
class Com1 extends React.Component {
constructor(...props) {
super(...props)
this.handler1 = this.handler.bind(this)
}
handler1(e) {
console.log(e) // Event
}
handler2(e) {
console.log(e) // Event
}
handler3(arg1, arg2, e) {
console.log(arg1) // 123
console.log(arg2) // 456
console.log(e) // Event
}
render () {
return (
<div>
<button onClick={this.handler1}>点击</button>
<button onClick={this.handler2.bind(this)}>点击</button>
<button onClick={this.handler3.bind(this, 123, 456)}>点击</button>
</div>
)
}
}
export default Com1
箭头函数形式
箭头函数和普通函数不一样,不用特别处理this的指向问题,
- 如果不需要传参,则事件对象默认传入
- 如果需要传参,则必须重新声明一个函数
- 如果需要同时传参和事件对象,则新声明函数需要手动传入事件对象
import React from 'react';
class Com1 extends React.Component {
constructor(...props) {
super(...props)
}
handler1 = (e) => {
console.log(e) // Event
}
handler2 = (arg1, arg2, e) => {
console.log(arg1) // 123
console.log(arg2) // 456
console.log(e) // undefined
}
handler3(e, arg1, arg2) {
console.log(e) // Event
console.log(arg1) // 123
console.log(arg2) // 456
}
render () {
return (
<div>
<button onClick={this.handler1}>点击</button>
<button onClick={() => this.handler2(123, 456)}>点击</button>
<button onClick={(e) => this.handler3(e, 123, 456)}>点击</button>
</div>
)
}
}
export default Com1
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com