您如何替换一个值并在5分钟后恢复其旧值?

问题描述 投票:0回答:2

我的值x = 5;

我需要在5分钟内将x值替换为10,并在5分钟后恢复其旧值(5)。我如何使用React-Redux实现这一目标。

我的代码:

单击按钮,我正在触发名为sendValue的函数

const x = 5;

onSubmit={e => {
                    e.preventDefault();
                    timeInterval = setInterval(() => {
                        sendValue(x);

                    }, timeDelay);


                }}

act.sendValue.js是一个如下所示的操作文件:

export const sendValue = (x) => async dispatch => {

  // other code

  dispatch({
    type: SEND_VALUE,
    payload: {
      initialValue: x
    }
  });

};

单击另一个按钮时,我正在调用一个名为updateValue的函数

act.updateValue是如下所示的动作:

const x = 5;
export const updatePackagesLoad = (x) => async dispatch => {

let newValue;
  setTimeout(function () {
     newValue = x + 5; // updating x value to 10 for 5 minutes
    alert();
  }, 300000);


  dispatch({
    type: UPDATE_VALUE,
    payload: {
      updatedValue: newValue
    }
  });

};

我的减速器文件rdc.values.js如下所示:

const initialState = { countValue : 5 }

export default (state = initialState, action) => {
    const { type, payload } = action;

    switch(type) {
        case SEND_VALUE:
            return {
              ...state,
            countValue: payload.initialValue
            };
            case UPDATED_VALUE:
                return {
                  ...state,
                countValue: payload.updatedValue
                };
        default:
            return state;
    }
}

我的setTimeout函数正确吗?将x值从5更改为10 6分钟是否会达到预期的结果?如果没有,我该如何实现?

感谢您的帮助。

谢谢

javascript reactjs redux react-redux settimeout
2个回答
0
投票

我认为您应该阅读Redux-Saga的文档。您可以根据需要启动一个传奇,每5分钟执行一次该传奇。而且,将任何操作发送到redux也非常容易。

Redux Saga Documentation

示例:

export function* updateEvery5Minutes() {
    while (true) {
        yield delay(1000 * 300) // 5 minutes
        yield put({type:'ACTION_TYPE', payload: 5}) // any redux action
    }
}

然后按照您在文档中看到的方式运行传奇。


0
投票

以10开始,然后等待5分钟,然后将其更改为5,然后它将停止

setval=true 
var interv=setInterval(function () {
 if(setval){
 console.log('10'),
 setval=false
 return x=10
 }

 if(!setval){
  console.log('5')
 return x=5,  clearInterval(interv)
 }

}, 300000);
© www.soinside.com 2019 - 2024. All rights reserved.