美文网首页
onClick中的函数自动被调用问题

onClick中的函数自动被调用问题

作者: 抬头车夫 | 来源:发表于2017-12-27 11:23 被阅读49次

问题描述

  • 当使用<button onClick={this.onClickButton}>Click Me</button>时工作正常;
  • 而使用<button onClick={this.onClickButton(param)}>Click Me</button>时,每次函数都会自动被调用。

首先摘抄某博客中的内容:

One way of accessing the properties of an object is via the dot operator (.). This operator has two different modes:

  • Getting and setting properties: obj.prop
  • Calling methods: obj.prop(x, y)
    The latter is equivalent to:
    obj.prop.call(obj, x, y)

所以<button onClick={this.onClickButton}>Click Me</button>可以直接把this.onClickButton写在括号内,因为这样用的是第一种方法,实际上是将onClickButton作为一个属性传给onClick,调用onClick后才执行该函数,也就相当于:

const onClick = this.onClickButton
onClick();

这时onClick中会有一个隐含的this参数,使函数内部不能通过this读取到外层组件,因此需要在外部组件的constructor中添加this.onClickButton = this.onClickButton.bind(this),将外部组件的this传入函数内部。

相反,<button onClick={this.onClickButton(param)}>Click Me</button>中使用的是上述第二种带括号的,实际加载时,先调用onClickButton(param)函数,然后将其返回值赋给onClick。因此每次加载时组件会自动调用onClickButton函数,而在constructor中也不用将this绑定给onClickButton

解决方法

使用匿名函数,<button onClick={()=>this.onClickButton(param)}>Click Me</button>,直接将该匿名函数作为一个整体赋值给onClick,当onClick被调用时,该匿名函数才被执行。又由于箭头函数不会将函数内部的this覆盖(原理可读上述博客),因此在函数内部仍然可以读取到外部组件的this,从而在这种情况下也不需要在constructor中把this绑定给onClickButton

相关文章

  • onClick中的函数自动被调用问题

    问题描述 当使用 Click Me 时工作正常; 而使用 Click Me 时,每次函数都会自动被调用。 首先摘抄...

  • JS中的this

    JS中的this取决于调用者。 onclick等事件函数中的 this指触发事件的对象 若无调用者,则调用者为wi...

  • 浅谈html中事件和js事件中括号的区别

    问题: onclick中change函数加不加括号的区别 代码的onclick事件是在html内写的,而代码2的o...

  • 求数组中的最大值、最小值 【appy】

    一、js中apply和Math.max()函数的问题 解析:apply 只能被函数调用Function.apply...

  • React 生命周期

    某一时刻可以被组件自动调用的函数 挂载 当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下: const...

  • 常用的内建函数(一)

    在Python中,内建函数是被自动加载的,编程者可以随时调用这些函数,不需要定义,极大地简化了编程。 eval()...

  • javascript中this总结

    1)元素身上的事件被触发的时候,会执行一个函数,函数中的this是当前元素 onclick onmouseove...

  • [C++之旅] 10 构造函数

    [C++之旅] 10 构造函数 构造函数的特点 构造函数在对象实例化时被自动调用 构造函数与类同名 构造函数没有返...

  • 谈谈JS中的 this

    想知道JavaScript 函数中的 this 指向,就得知道我们的函数什么时候被调用。 普通函数调用分为直接调用...

  • JavaScript的 this 和 变量提升

    一、this 1.this是什么? this是JavaScript中自动定义的特殊标识符关键字,是在函数被调用时建...

网友评论

      本文标题:onClick中的函数自动被调用问题

      本文链接:https://www.haomeiwen.com/subject/ftoygxtx.html