【问题标题】:Eventlistners and data fetching is useEffectEventlistners 和数据获取是 useEffect
【发布时间】:2021-01-26 15:47:08
【问题描述】:

我正在努力使用 EventListener 和在 useEffect 挂钩中获取数据。

我想要实现的是使用 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')
  }

我不知道如何解决这个问题,我已阅读 this similar question 但它仍然不能解决我的问题,除非我遗漏了什么

【问题讨论】:

    标签: javascript reactjs react-hooks


    【解决方案1】:

    您可以使用不同的依赖项执行多个 useEffects。

    useEffect(() => {
        getData();
    }, []);
    
    useEffect(() => {
        window.addEventListener('keydown', keyDownHandler);
    
        return () => {
          window.removeEventListener('keydown', keyDownHandler);
        }
    });
    

    【讨论】:

    • 哦,哇,这当然有帮助,不知道你可以使用多个useEffect 谢谢!
    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2019-07-27
    • 2020-02-02
    • 2021-03-15
    相关资源
    最近更新 更多