首页 > 解决方案 > 如何在特定时间继续单个 Redux Actions

问题描述

我一直在开发 react native 应用程序,并将其与 redux 结合使用。我已经成功实施了优惠券系统。我想要实现的是,我想继续某个动作至少 3 秒。

这是动作:

export const onAcceptingCoupon = (value) => {
 return(dispatch) => {
    setTimeout(() => {
        dispatch({ type: APPLY_BUTTON_LOADING, payload: true });
        }, 50000);
    dispatch({ type: DISCOUNTED_PRICE, payload: value });
    dispatch({ type: APPLY_BUTTON_LOADING, payload: false });
  }
};

所以,我一直在使用反应原生元素按钮。它有一个加载选项,它将在按钮文本前面显示一个加载器。所以问题是当我按下上面提到的按钮时,就会调用动作。

由于已经获取了我需要的数据,我只想让加载程序保持活动状态至少 3 秒。这样,用户就可以了解正在发生的事情。

所以,我尝试使用 setTimeout 但什么也没发生。它只是转移到下一个调度。

如何手动停止调度以移动到下一个调度,直到某一秒?

标签: javascriptreact-nativereduxsettimeout

解决方案


我觉得你的订单有点乱。您想先开始加载,然后在一段时间后停止加载。也许将顺序更改为此将使您获得更大的成功。

export const onAcceptingCoupon = (value) => {
 return(dispatch) => {
    // show the loader
    dispatch({ type: APPLY_BUTTON_LOADING, payload: true });

    // put the code that should execute after 50000 inside the setTimeout
    setTimeout(() => {
        dispatch({ type: DISCOUNTED_PRICE, payload: value });
        dispatch({ type: APPLY_BUTTON_LOADING, payload: false });
        }, 50000);
    }
};

setTimeout没有阻塞,在它之后编写的代码将正常执行。它只是导致超时中的代码在时间段过去后执行。


推荐阅读