【问题标题】:React, NextJS, Pusher multiple responses returned for every requestReact、NextJS、Pusher 为每个请求返回多个响应
【发布时间】:2021-12-17 23:18:58
【问题描述】:

我一直试图让我的应用程序在每次收到 Pusher 响应时获取新数据,但现在的问题是,对于每个新响应,响应计数似乎高 1,因此它是 fetch 调用。 . 例如,当我收到 Pusher 响应时第一次请求新数据时,我调用我的 API 1 次,第二次收到 2 个 Pusher 响应,然后是 3 次,依此类推,这大大降低了我的性能...... 谁能向我解释一下似乎是什么问题?

useEffect(() => {
    //Pusher.logToConsole = true;
    var pusher = new Pusher("pusherID", {
      cluster: "eu",
    });
    const channel = pusher.subscribe("pusher-channel");
    channel.bind("", function (data) {
      console.log(data); //log pusher response so I know how many are received
      mutate("data"); //fetch data from API
    });
  });

如果我检查我的 Pusher 仪表板,我已经建立了很多连接并发送了消息,而我只使用一台设备来执行此操作,因此这可能意味着这台设备正在多次连接并发送多条消息,这真的很糟糕。 ..

【问题讨论】:

  • 那么你希望 useEffect 只运行一次还是你想基于依赖运行 useEffect?

标签: reactjs next.js pusher


【解决方案1】:

当你有一个订阅系统时,你通常只想订阅一次,当你的组件准备好时,这通常发生在第一次 useEffect 调用时,保存对你调用的服务的引用总是一个好主意组件的顶层(在 state 或 ref 对象内)。

您的问题是您的 useEffect 没有任何依赖关系,因此它基本上在每次您的组件重新呈现时都会运行。如果你放空依赖数组,这可以解决你的问题。

useEffect(() => {
  const pusher = new Pusher("pusherID", {
    cluster: "eu",
  });
  const channel = pusher.subscribe("pusher-channel");
  channel.bind("", function (data) {
    mutate("data"); //fetch data from API
  });
}, []);

【讨论】:

  • 非常感谢这是问题所在,我的错误是我什至没有意识到这一点
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2017-10-08
  • 2011-07-27
  • 1970-01-01
  • 2014-01-05
  • 2013-11-08
相关资源
最近更新 更多