你可以通过在组件中声明 事件处理 函数来响应事件:
function MyButton() {
function handleClick() {
alert('You clicked me!');
}
return (
<button onClick={handleClick}>
点我
</button>
);
}
注意,onClick={handleClick}
的结尾没有小括号!不要 调用 事件处理函数:你只需 把函数传递给事件 即可。当用户点击按钮时 React 会调用你传递的事件处理函数。
在 React 中,<button onClick={handleClick}>click me</button>
和 <button onClick={handleClick()}>click me</button>
有重要的区别:
1. <button onClick={handleClick}>click me</button>
含义 :将
handleClick
函数作为参数传递给onClick
事件处理属性。此时,handleClick
是一个函数引用,没有被立即调用。行为 :当按钮被点击时,React 会调用这个
handleClick
函数。这是正确的事件处理方式,符合 React 事件处理的规范,能够确保事件在用户交互时被触发。
2. <button onClick={handleClick()}>click me</button>
含义 :在 JSX 中,
handleClick()
会立即被调用,也就是说,当组件渲染时,handleClick
函数会被执行,并且它的返回值会被赋值给onClick
属性。行为 :如果
handleClick
函数没有返回任何内容(即返回值为undefined
),那么实际上onClick
属性的值是undefined
,这会导致事件处理程序无法正常工作。如果handleClick
函数返回了一个函数,那么返回的这个函数会被当作事件处理函数,但这种情况比较少见且容易引起混淆。这种写法通常会导致函数在组件渲染时就被执行,而不是在按钮点击时执行,这很可能不是我们想要的行为。
例如,假设 handleClick 是一个简单的函数:
function handleClick() {
console.log('Button clicked');
}
对于 <button onClick={handleClick()}>click me</button>
,在组件渲染时就会输出 'Button clicked' 到控制台,而不会在按钮点击时输出。而 <button onClick={handleClick}>click me</button>
则会在按钮点击时输出 'Button clicked'。