使用效果/调度多个网络调用

useEffect / dispatch multiple network calls

提问人:GN. 提问时间:12/21/2022 更新时间:12/21/2022 访问量:38

问:

useEffect(() => {
    function initDashboardData() {
      console.count("initDashboardData");
      void dispatch(getDatabasesList());
      void dispatch(getUserConfig());
      void dispatch(
        getHistoricalData({ startTimestamp: getDateXDaysAgo(14, new Date()), endTimestamp: new Date() })
      );
    }

    void initDashboardData();
  }, [dispatch]);

所有操作(getDatabasesList、getUserConfig 等)都是调用 API 的 Redux 操作。createAsyncThunk

当组件呈现此函数时,调用大约五次,创建 5 次网络调用。

如何使用 dispatch w/ useEffect 防止发生多个网络调用?

reactjs redux thunk

评论

0赞 kazmi066 12/21/2022
这可能会有所帮助:stackoverflow.com/questions/72301308/...
0赞 Rajesh 12/21/2022
检查它被调用了多少次而没有调度。只。如果是其中之一,也许日志调度以了解为什么它变化如此之大[]

答:

0赞 Greg Motyl 12/21/2022 #1

为了防止多次调用该函数,您可以使用钩子的帮助,如下所示:useRef

const dataLoadedFlag = useRef(false);

useEffect(() => {
    function initDashboardData() {
      // dispatch your stuff...
      dataLoadedFlag.current = true;
    }

    if (!dataLoadedFlag.current) {
      initDashboardData();
    }
  }, [dispatch]);