Javascript 哪一个是一个;事件处理程序";你有什么反应?
我想问一个关于ReactJs中“事件处理程序”的基本问题 以下是React组件的一些示例: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 (
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>