使用 React 可以在 JSX 中添加 事件处理函数。其中事件处理函数为自定义函数,它将在响应交互(如点击、悬停、表单输入框获得焦点等)时触发。
添加事件处理函数
如需添加一个事件处理函数,你需要先定义一个函数,然后 将其作为 prop 传入 合适的 JSX 标签。例如,这里有一个没绑定任何事件的按钮:
export default function Button() { return ( ); }
按照如下三个步骤,即可让它在用户点击时显示消息:
- 在 Button 组件 内部 声明一个名为 handleClick 的函数。
- 实现函数内部的逻辑(使用 alert 来显示消息)。
- 添加 onClick={handleClick} 到
export default function Button() { function handleClick() { alert('你点击了我!'); } return ( ); }
你可以定义 handleClick 函数然后 将其作为 prop 传入
- 通常在你的组件 内部 定义。
- 名称以 handle 开头,后跟事件名称。
按照惯例,通常将事件处理程序命名为 handle,后接事件名。你会经常看到 onClick={handleClick},onMouseEnter={handleMouseEnter} 等。
或者,你也可以在 JSX 中定义一个内联的事件处理函数:
alert('你点击了我!');
}}>
或者,直接使用更为简洁箭头函数:
alert('你点击了我!');
}}>
以上所有方式都是等效的。当函数体较短时,内联事件处理函数会很方便。
陷阱
传递给事件处理函数的函数应直接传递,而非调用。例如:
传递一个函数(正确) 调用一个函数(错误) 区别很微妙。在第一个示例中,handleClick 函数作为 onClick 事件处理函数传递。这会让 React 记住它,并且只在用户点击按钮时调用你的函数。
在第二个示例中,handleClick() 中最后的 () 会在 渲染 过程中 立即 触发函数,即使没有任何点击。这是因为在 JSX { 和 } 之间的 JavaScript 会立即执行。
当你编写内联代码时,同样的陷阱可能会以不同的方式出现:
传递一个函数(正确) 调用一个函数(错误) 如果按如下方式传递内联代码,并不会在点击时触发,而是会在每次组件渲染时触发:
// 这个 alert 在组件渲染时触发,而不是点击时触发!
如果你想要定义内联事件处理函数,请将其包装在匿名函数中,如下所示:
这里创建了一个稍后调用的函数,而不会在每次渲染时执行其内部代码。
在这两种情况下,你都应该传递一个函数:
还没有评论,来说两句吧...