Javascript React JS:调用事件处理程序
我最近开始在React工作。我注意到一个行为,比如当我试图用相同的组件调用我的事件句柄时 onClick={someEventHandler}它正在触发,但当我尝试像这样做时,onClick={()=>someEventHandler}不起作用 我注意到,当我需要传递任何参数并调用onClick={()=>someEventHandler(id)}之类的函数时,它工作正常Javascript React JS:调用事件处理程序,javascript,reactjs,react-component,Javascript,Reactjs,React Component,我最近开始在React工作。我注意到一个行为,比如当我试图用相同的组件调用我的事件句柄时 onClick={someEventHandler}它正在触发,但当我尝试像这样做时,onClick={()=>someEventHandler}不起作用 我注意到,当我需要传递任何参数并调用onClick={()=>someEventHandler(id)}之类的函数时,它工作正常 有人能给我解释一下这背后的逻辑/理论吗?onClick事件处理程序需要一个传递给它的函数。当事件被触发时,它调用传递给它的处
有人能给我解释一下这背后的逻辑/理论吗?onClick事件处理程序需要一个传递给它的函数。当事件被触发时,它调用传递给它的处理函数 在第一种情况下,它起作用是因为您将
someEventHandler
传递给onClick,在触发事件时调用onClick。对函数的调用类似于someEventHandler()
现在在第二种情况下
onClick={()=>someEventHandler}
传递给onClick的函数是()=>someEventHandler
,可以进一步细化为()=>{returnsomeeventhandler;}
现在,如果您注意到上面的内容,您将从onClick事件处理程序返回一个函数。返回的函数现在永远不会被调用,因此您可以看到上面的行为
它在最后一种情况下工作,如onClick={()=>someEventHandler(id)}
,因为当调用事件处理程序时,它也调用了具有id的someEventHandler
然而,您不需要传递id来调用它,只要像onClick={()=>someEventHandler()}
那样使用它就可以了,只要您不需要id作为someEventHandler中的参数
当您使用像onClick={()=>someEventHandler()}
这样的函数而不是onClick={someEventHandler}
时,需要注意的另一点是,您的someEventHandler
不会被任何参数调用。如果希望将事件作为参数传递给someEventHandler,则需要像
onClick={(e)=>someEventHandler(e)}
onClick={someEventHandler}
将在您的组件在屏幕上加载/呈现后立即触发处理程序,但通过在处理程序之前添加箭头函数,就像这样-onClick={()=>someEventHandler}
将确保在单击组件之前不会触发该组件我认为您误解了这个问题onClick={someEventHandler}
有效,但onClick={()=>someEventHandler}
无效。第一个不会触发处理程序。它只是将处理程序传递给onClick
。您将此与onClick={someEventHandler()}
混淆,这确实是不正确的。@FelixKling是的,您是对的。我正在研究这些精确的东西,我想我已经看到了上面提到的带括号的函数。谢谢你对Shubham的清晰解释。