javascript - Eventlistners 和数据获取是 useEffect
问题描述
我正在努力在 useEffect 挂钩中使用 EventListener 和数据获取。
我想要实现的是使用 getData 函数在 useEffect 中获取我的数据一次。但同时每次我按下我的键时都使用我的 EventListener 。
当我尝试下面的代码时,我的 EventListener 将无法工作。但我的 getData 函数只会执行一次(我需要什么)
useEffect(() => {
getData();
window.addEventListener('keydown', keyDownHandler);
return () => {
window.removeEventListener('keydown', keyDownHandler);
}
}, []);
但是当我尝试这段代码时,我的 EventListener 工作但它继续执行 getData 函数。这意味着它只会继续获取数据,直到我的浏览器崩溃
useEffect(() => {
getData();
window.addEventListener('keydown', keyDownHandler);
return () => {
window.removeEventListener('keydown', keyDownHandler);
}
});
以下是其他 2 个功能:
const getData = () => {
axios.get(`https://myapi`)
.then((res) => {
setResults(res.data)
})
}
const keyDownHandler = (e) => {
if (e.keyCode === 37) console.log('prev')
else if (e.keyCode === 39) console.log('next')
}
我不知道如何解决这个问题,我已经阅读了这个类似的问题,但它仍然不能解决我的问题,除非我错过了什么
解决方案
您可以使用不同的依赖项执行多个 useEffects。
useEffect(() => {
getData();
}, []);
useEffect(() => {
window.addEventListener('keydown', keyDownHandler);
return () => {
window.removeEventListener('keydown', keyDownHandler);
}
});
推荐阅读
- c# - 是否可以将内联 C# 对象添加到 xUnit 中的理论中?
- python - Python Tkinter IndexError:列表超出范围
- java - 具有多个 ClassLoader 的单例
- outlook-addin - Outlook 2016 VSTO-Addin:如何避免 System.AccessVioloationExceptionfor“过时”链接到 AppointmentItem?
- javascript - 我不能在 node.js 的画布上写一些文本值
- python - 如何根据特定条件填充数据框列中的值
- firebase - 带有 arrayRemove / arrayUnion 的 Firebase 安全规则
- ios - 通过 Alamofire 和自签名证书保护 JSON 请求
- flutter - 如何在颤动中动态更改填充或边距
- python - 如何根据特定列线性插值 pandas 列值