React JS:调用事件处理程序
React JS: calling event handlers
我最近开始使用 React。我注意到一种行为,比如当我试图用这样的相同组件调用我的事件句柄时
onClick={someEventHandler} 它正在触发,但是当我尝试像这样 onClick={()=> someEventHandler} 时它不起作用。
我注意到当我需要传递任何参数并调用 onClick={()=>someEventHandler(id)} 之类的函数时,它工作正常。
谁能给我解释一下这背后的 logic/theory?
onClick 事件处理程序需要传递给它的函数。当事件被触发时,它调用传递给它的处理函数。
在第一种情况下,它起作用是因为您将 someEventHandler
传递给 onClick,它在触发事件时被调用。对该函数的调用类似于 someEventHandler()
现在第二种情况,
onClick={()=>someEventHandler}
传递给 onClick 的函数是 ()=>someEventHandler
,可以进一步阐述为 ()=> { return someEventHandler; }
现在,如果您注意到上面的内容,您正在从 onClick 事件处理程序返回一个函数。现在永远不会调用返回的函数,因此您会看到上述行为
它在最后一种情况下像onClick={()=>someEventHandler(id)}
一样工作,因为当事件处理程序被调用时,它也调用了带有id的someEventHandler。
但是您不需要传递 id 来调用它,您可以像 onClick={()=>someEventHandler()}
一样简单地使用它并且它可以工作,前提是您不需要 id 作为 someEventHandler 中的参数。
当您使用 onClick={()=>someEventHandler()}
而不是 onClick={someEventHandler}
之类的函数时要注意的另一件事是,您的 someEventHandler
不会被任何参数调用。如果您希望将事件作为参数传递给 someEventHandler,则需要像
一样显式传递它
onClick={(e)=>someEventHandler(e)}
onClick={someEventHandler}
将在您的组件在屏幕上显示 loaded/rendered 时立即触发处理程序,但是通过在处理程序之前添加一个箭头函数,这样 - onClick={()=> someEventHandler}
将确保不会在单击之前触发组件
我最近开始使用 React。我注意到一种行为,比如当我试图用这样的相同组件调用我的事件句柄时 onClick={someEventHandler} 它正在触发,但是当我尝试像这样 onClick={()=> someEventHandler} 时它不起作用。
我注意到当我需要传递任何参数并调用 onClick={()=>someEventHandler(id)} 之类的函数时,它工作正常。
谁能给我解释一下这背后的 logic/theory?
onClick 事件处理程序需要传递给它的函数。当事件被触发时,它调用传递给它的处理函数。
在第一种情况下,它起作用是因为您将 someEventHandler
传递给 onClick,它在触发事件时被调用。对该函数的调用类似于 someEventHandler()
现在第二种情况,
onClick={()=>someEventHandler}
传递给 onClick 的函数是 ()=>someEventHandler
,可以进一步阐述为 ()=> { return someEventHandler; }
现在,如果您注意到上面的内容,您正在从 onClick 事件处理程序返回一个函数。现在永远不会调用返回的函数,因此您会看到上述行为
它在最后一种情况下像onClick={()=>someEventHandler(id)}
一样工作,因为当事件处理程序被调用时,它也调用了带有id的someEventHandler。
但是您不需要传递 id 来调用它,您可以像 onClick={()=>someEventHandler()}
一样简单地使用它并且它可以工作,前提是您不需要 id 作为 someEventHandler 中的参数。
当您使用 onClick={()=>someEventHandler()}
而不是 onClick={someEventHandler}
之类的函数时要注意的另一件事是,您的 someEventHandler
不会被任何参数调用。如果您希望将事件作为参数传递给 someEventHandler,则需要像
onClick={(e)=>someEventHandler(e)}
onClick={someEventHandler}
将在您的组件在屏幕上显示 loaded/rendered 时立即触发处理程序,但是通过在处理程序之前添加一个箭头函数,这样 - onClick={()=> someEventHandler}
将确保不会在单击之前触发组件