reactjs - 如何使用 React hook useEffect 添加事件处理程序取决于状态?
问题描述
我有一个授权组件,包括另一个组件 - 用户名、密码等字段。我尝试创建反应挂钩 useeffect,我想在“X”keyDown 事件上添加订阅。在这个事件中,我想执行 Authorize() 函数,该函数位于组件主体(不是钩子主体)中,并且取决于授权组件状态。
所以,我发现的唯一解决方案是:
useEffect(() => {
const handleKeyDown = (event) => {
event.key === 'X' && defineIsAuthorizationAvailable() && authorize()
}
window.addEventListener('keydown', handleKeyDown)
return () => window.removeEventListener('keydown', handleKeyDown)
})
但我认为它不正确,因为这种订阅/取消订阅会在每次用户状态更改时执行。请帮忙。
解决方案
所以,您想useEffect
根据布尔状态值运行某些函数,对吗?如果是这样,您可以在useEffect
钩子中使用条件并在某些状态更改时重新渲染。例如,像这样:
useEffect(() => {
if(authorizeBoolean) {
const handleKeyDown = (event) => {
event.key === 'X' && defineIsAuthorizationAvailable() && authorize()
}
window.addEventListener('keydown', handleKeyDown)
return () => window.removeEventListener('keydown', handleKeyDown)
}
}, [authorizeBoolean]);
推荐阅读
- python - 正则表达式类型作为函数中的参数
- android - android上崩溃的线程SIGABRT
- jmeter - Grafana 中的表格图使用从流入更改列到行标题的数据
- flutter - 嗨,我正在尝试保存本地个人资料图片
- javascript - window.location.href 重定向不适用于 url 中的 #
- node.js - 节点js脚本注入问题
- javascript - 如果 areEqualFunction 执行复杂/大量比较,使用 React.memo 会更快吗?
- kotlin - 如何配置一个 gradle 多模块项目?
- ruby-on-rails - 复合期望停止工作rspec
- javascript - 在 webpack 构建中提供单个静态图像