所有分类
  • 所有分类
  • 后端开发

React:了解下事件处理过程中传参的实现方法

React:了解事件处理过程中传参的实现方法

摘要

首先,我们知道,在React中,元素是通过小驼峰绑定的:

  fn = ()=>{
    //执行代码
  }
  button onClick={this.fn}>111</button>

但是如果有Vue的基础,我们可以清楚地看到两者之间的区别。在Vue中,我们可以直接将参数传递给fn。

但如果我们在React中这样做:

  fn = (value)=>{
    //执行代码
    console.log(value)
  }
  button onClick={this.fn('2222')}>111</button>

当页面加载时,你会发现222已经打印出来了。但是点击按钮没有效果。

这表明该方法没有绑定到按钮上,而是在按钮加载时直接调用。

这也很容易理解。React没有处理Vue。它直接调用并将返回值绑定到onclick。因此,我们应该记住,当事件被绑定时,必须绑定一个函数。

OK,现在我明白了问题。如果我想在调用方法时传递参数,我该怎么办?

1.箭头函数

第一种方法是,如果我们在按钮绑定事件时将箭头函数绑定到外层,那么我们的写作方法似乎可以完美地解决问题:

speak = (value) =>{
  alert(value)
}
<button onClick={() => {this.speak('qnmlgbd')}}>说话</button>

我们定义的speak方法是通过箭头函数直接绑定到onclick,并传递参数。

2.函数柯里化

如果箭头函数可以的话,似乎我们可以直接在方法中返回一种方法,没有问题。

say = (value)=>{
   return ()=>{
     alert(value)
   }
 }
<button onClick={this.say('qnmlgbd')}>说话</button>

这样,当我们绑定onclick时,我们就不用写箭头函数了,这样看起来更好。但原理和刚才的方式是一样的。

3.bind方法

众所周知,bind方法是改变方法的this方向,返回方法是一种方法。不会直接调用。

OK,如果bind有这个特点,我们可以用它来解决这个问题。

loud(value){
   alert(value)
 }
<button onClick={this.loud.bind(this,'qnmlgbd')}>说话</button>

在这里,我们可以注意到loud方法在定义时没有使用箭头函数。前两种方法在定义时使用箭头函数。

这是因为,在React中,如果定义函数不使用箭头函数,则函数中的this将是绑定事件的元素,而不是React组件。但是,如果事件是通过bind绑定的,则无需考虑此问题。

最后,让我们总是看看这三种方法的区别:

export default class Child extends Component {
  say = (value)=>{
    return ()=>{
      alert(value)
    }
  }
  speak = (value) =>{
    alert(value)
  }
  loud(value){
    alert(value)
  }
  render() {
    return (
      <div>
        <button onClick={this.say('qnmlgbd')}>说话</button>
        <button onClick={() => {this.speak('qnmlgbd')}}>说话</button>
        <button onClick={this.loud.bind(this,'qnmlgbd')}>说话</button>
      </div>
    )
  }
}

原文链接:https://www.icz.com/technicalinformation/web/seo/2023/05/9409.html,转载请注明出处~~~
0
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?