react+redux 中如何通过请求动作处理中间件并触发成功动作?

Posted

技术标签:

【中文标题】react+redux 中如何通过请求动作处理中间件并触发成功动作?【英文标题】:how to handle middleware by request action and trigger success action in react+redux? 【发布时间】:2017-09-09 08:13:50 【问题描述】:

我正在通过一个使用 reactJS+redux 的电影查找应用程序来学习 ReactJS。我把我的 github 仓库放在这里:https://github.com/ajay28kumar/redux-omdb-movieFind.git

我正在创建一个名为 getMovieSearch 的操作,它将在组件中返回请求的数据并进行 api 调用(api 调用文件在 /api/fetchApi 中)。将数据提取到 api 文件后,我将该 dta 传递给名为 getMovieList 的 successAction,然后将其返回到我的减速器 movieGetReducer。所有这些步骤都运行良好,但我的商店没有更新。

我有一个替代解决方案,getMovieSearch 将进行以下调用:

export var getMovieSearch = (payload) => 
    const request= axios.get("http://www.omdbapi.com/?t="+ payload+ "&page=1");
    console.log("data from api :", request)
    return 
        type: 'GET_MOVIE_LIST',
        payload: request
    ;
;

它将进入我的中间件并且工作正常,但我想为我的学习应用程序的 request / successResponse / errorResponse 单独操作。

如果有人能纠正同样的问题,那就太好了。

谢谢。

【问题讨论】:

您使用哪个中间件来异步获取数据? 【参考方案1】:

您可以使用redux-thunk。异步操作的常见模式是创建 3 个操作:请求、接收(成功)和失败。

例子:

export var getMovieSearch = (payload) => (dispatch) => 
  dispatch(requestMovieList(payload));
  axios.get("http://www.omdbapi.com/?t=" + payload + "&page=1")
    .then(res => dispatch(receiveMovieList(res.data)))
    .catch(err => dispatch(getMovieListFailed(err)))
;

【讨论】:

以上是关于react+redux 中如何通过请求动作处理中间件并触发成功动作?的主要内容,如果未能解决你的问题,请参考以下文章

REACT 如何使用 Redux 和 Axios(使用 promise 中间件)发出 AJAX 请求?

如何修复'动作必须是普通对象。使用自定义中间件进行异步操作。

在 react-redux 应用程序中使用 JSONP

在通过动作调度进行状态更新后,在 React 中使用 Redux 执行函数?

另一个组件如何在 react/redux 中监听另一个组件的动作?

WebSocket 服务器中的 Redux