reactjs - React hook 等待上一个调用完成

标签 reactjs redux react-hooks

我正在开发一个使用钩子(Hook)的 React 项目。我被分配了一个任务

"更改 useInterval Hook ,或创建一个新 Hook (usePoll?)。这应该与 useInterval 操作相同,但应该等到 ajax 请求在启动计时器之前完成”。

我是 React Hooks 的新手,正在为此寻找解决方案但找不到。当前的useInterval函数如下。

import React, { useEffect, useRef } from 'react';

export function useInterval(callback, delay, immediate = true) {
    const savedCallback = useRef();

    // Remember the latest callback.
    useEffect(() => {
        savedCallback.current = callback;
    }, [callback]);

    // Set up the interval.
    useEffect(() => {
        function tick() {
            savedCallback.current();
        }
        if (delay !== null) {
            if (immediate) {
                tick();
            }

            let id = setInterval(tick, delay);
            return () => clearInterval(id);
        }
    }, [delay]);
}

在程序中的使用如下。

useInterval(() => {
        get(`/api/v1/streams/1`).then(({ data: { data } }) => {
            setStream(data);
        });
    }, 5000);

我需要更改 useInterval 函数以等待 ajax 请求完成后再启动计时器。如果有人可以帮助我,那就太好了。谢谢

最佳答案

试一试。它需要在 then 中调用 next 函数,但它应该接近您要查找的内容。

function useInterval(handler, delay, immediate = true) {
  React.useEffect(() => {
    let interval

    const start = () => {
      clearInterval(interval)
      interval = setInterval(() => handler(start), delay)
    }

    handler(start)

    return () => clearInterval(interval)
  }, [])
}

用法:

useInterval((next) => {
    get('/api/v1/streams/1').then(data => {
        // tell the timer to begin
        next()
    })
}, 5000)

关于reactjs - React hook 等待上一个调用完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678250/

相关文章:

reactjs - 使用 Redux Thunk 和 Axios 测试 Action Creator

reactjs - Axios get in url 有效,但第二个参数作为对象则无效

javascript - Redux - 组件不同的方法(智能/哑/容器/演示)

reactjs - 如何在 Material-UI 菜单中使用自定义功能组件

javascript - 使用 React Hooks 设置状态的正确方法是什么?

javascript - 页脚高度根据网址?

javascript - 裁剪图标图像

reactjs - 当使用 useState 钩子(Hook)更改 props 时,组件不会重新渲染

javascript - 有条件地为事件/非事件用户呈现徽章

reactjs - 错误: Collecting page data for/dashboard/widget is still timing out after 2 attempts nextjs