Javascript 哪一个是一个;事件处理程序";你有什么反应?

Javascript 哪一个是一个;事件处理程序";你有什么反应?,javascript,reactjs,Javascript,Reactjs,我想问一个关于ReactJs中“事件处理程序”的基本问题 以下是React组件的一些示例: import React from 'react' class Hello extends React.Component { handleClick = () => { console.log("clicked"); } render () { const { isDisabled = false } = this.props; return (

我想问一个关于ReactJs中“事件处理程序”的基本问题

以下是React组件的一些示例:

import React from 'react'

class Hello extends React.Component {
  handleClick = () => {
    console.log("clicked");
  }

  render () {
    const { isDisabled = false } = this.props;
    return (
      <button onClick={() => isDisabled && this.handleClick()}>
        Hello Button
      </button>
    )
  }
}

export default Hello;
从“React”导入React
类Hello扩展了React.Component{
handleClick=()=>{
控制台日志(“单击”);
}
渲染(){
const{isDisabled=false}=this.props;
返回(
isDisabled&&this.handleClick()}>
你好按钮
)
}
}
导出默认Hello;
该组件中的“事件处理程序”是“handleClick”函数,还是禁用了
()=>&&this.handleClick()
,还是“onClick”函数本身


谢谢

这只是一个函数定义(您将一个匿名函数分配给变量
handleClick

handleClick=()=>{
控制台日志(“单击”);
}
下面将把一个匿名函数
()=>{}
作为事件处理程序附加到调用原始
handleClick
函数的按钮元素

isDisabled&&this.handleClick()}>
事件名称是“click”,它的处理程序是您分配给它的。在这种情况下,如果
被禁用,则调用hanldeClick的匿名函数的计算结果为false(短路计算)


通常,它们在javascript中称为“事件侦听器”。

传递给
onClick
的函数为

使用JSX,可以将函数作为事件处理程序而不是字符串传递

另外,根据,您可以得出结论,
onClick
是一个事件处理程序

在循环中,通常希望向事件处理程序传递额外的参数。例如,如果id是行id,则以下任一项都可以使用:

this.deleteRow(id,e)}>删除行
删除行

基本上,传递给绑定事件的函数是事件处理程序,如
onChange
onBlur
onClick

有多种方法可以解决这个问题

  • 内联方法绑定
  • 构造函数中的Bind方法
  • 使用arrow函数的方法绑定
  • 绑定方法参数
  • 使用arrow函数的参数绑定方法

  • 查看上面的参考站点了解更多信息。

    我认为在react中,他们不会将事件
    e
    传递给该处理程序。但是我可能错了。如果“他们”你的意思是react,那么事件就像在普通html元素中一样传递是的,我的意思是react lib,我在几周前有过这个,angular出于某种原因没有传递事件。我不太明白你的第二个按钮点击监听器是如何工作的。在我看来,直接调用.bind函数有点不对劲。这是返回实际处理程序的更高阶fcuntion吗?@TheFool:React会将事件对象传递给处理程序
    .bind
    返回一个新函数:nice,TIL。幸运的是,我从来不需要使用bind,但我很高兴知道。谢谢,“事件处理程序”没有正式定义。事件处理程序只是“处理事件”的函数。如果您只想为直接传递给
    onClick
    的函数指定此名称,请执行此操作。但是,如果将
    handleClick
    称为事件处理程序(如果该函数包含大多数事件处理逻辑)也不算太长。这里没有严格的规定。
    <button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
    <button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>