React redux api 每 x 秒轮询一次

作者:编程家 分类: reactjs 时间:2025-08-02

使用React和Redux进行应用程序开发时,有时我们需要定期轮询某个接口以更新数据。这种情况下,我们可以使用Redux的中间件来实现定时轮询功能。本文将介绍如何使用React和Redux API来每隔一定时间轮询一次接口,并提供一个案例代码。

首先,我们需要安装Redux和React Redux库。可以使用以下命令来安装它们:

npm install redux react-redux

接下来,我们需要在Redux的store中配置中间件来处理轮询逻辑。我们可以使用Redux的thunk中间件来进行异步操作。首先,我们需要在项目中创建一个名为`store.js`的文件,并在其中导入所需的库和依赖项:

javascript

import { createStore, applyMiddleware } from 'redux';

import thunk from 'redux-thunk';

然后,我们需要创建一个名为`pollingMiddleware`的中间件函数来处理轮询逻辑。该函数将接收一个`store`对象作为参数,并返回一个函数来处理每个action。在这个函数中,我们可以使用`setInterval`函数来定期触发一个action,从而实现轮询功能。以下是一个示例代码:

javascript

const pollingMiddleware = store => next => action => {

if (action.type === 'START_POLLING') {

const intervalId = setInterval(() => {

store.dispatch({ type: 'FETCH_DATA' });

}, action.payload.interval);

// 将intervalId存储在store中,以便稍后停止轮询

store.dispatch({ type: 'SET_INTERVAL_ID', payload: intervalId });

}

if (action.type === 'STOP_POLLING') {

clearInterval(action.payload.intervalId);

}

return next(action);

};

在上面的代码中,我们使用`setInterval`函数每隔一定时间触发一个名为`FETCH_DATA`的action。我们还使用`clearInterval`函数来停止轮询。

接下来,我们需要创建一个Redux store,并将上述中间件应用到store中。以下是一个简单的示例:

javascript

import { createStore, applyMiddleware } from 'redux';

import thunk from 'redux-thunk';

import pollingMiddleware from './pollingMiddleware';

import rootReducer from './reducers';

const store = createStore(

rootReducer,

applyMiddleware(thunk, pollingMiddleware)

);

在上面的代码中,我们将`pollingMiddleware`作为中间件应用到了Redux的store中。

现在,我们可以在React组件中使用Redux来实现轮询功能。以下是一个简单的组件示例:

javascript

import React, { useEffect } from 'react';

import { connect } from 'react-redux';

const PollingComponent = ({ startPolling, stopPolling }) => {

useEffect(() => {

// 组件挂载时开始轮询

startPolling(5000);

// 组件卸载时停止轮询

return () => stopPolling();

}, []);

return
轮询组件
;

};

const mapDispatchToProps = dispatch => ({

startPolling: interval => dispatch({ type: 'START_POLLING', payload: { interval } }),

stopPolling: () => dispatch({ type: 'STOP_POLLING' })

});

export default connect(null, mapDispatchToProps)(PollingComponent);

在上面的代码中,我们使用了React的`useEffect`钩子来在组件挂载和卸载时分别调用`startPolling`和`stopPolling`函数。我们还使用了Redux的`connect`函数将组件与Redux store连接并将`startPolling`和`stopPolling`函数映射到组件的props中。

通过上述步骤,我们成功地使用React和Redux的API来每隔一定时间轮询一次接口。我们创建了一个Redux的中间件来处理轮询逻辑,并在React组件中使用Redux来实现轮询功能。希望本文能够帮助你理解如何使用React和Redux来实现定时轮询功能。