微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 没有调用Redux reducer

使用 redux-api-middleware我遇到了一个问题,其中我的一个且只有一个减速器功能没有触发.

我想以类似于处理成功的api请求的方式处理失败的api请求.但据我所知,SEARCH_FAILURE FSA永远不会得到处理,尽管它与SEARCH_SUCCESS FSA的处理方式相同(AFAICT).根据我在devtools中看到的内容,它似乎确实是创建和发送的.

我有这个

import { CALL_API } from 'redux-api-middleware'
import { handleActions } from  'redux-actions'
const searchReducer = handleActions({

//... other handlers elided

 SEARCH_SUCCESS: (state = defaultState,action) => {
     return {
   ...state,search_results: ({...action.payload}),api: {
        requestPending: false,searchPending: false
    },}
 },SEARCH_FAILURE:  function(state = defaultState,action) {
    console.log("Handling SEARCH_FAILURE given state,action: ",state,action)

    return {
            ...state,search_results: {Total: 0},api: {
                requestPending: false,error: action.payload
                },errors: [action.payload,...state.errors]
        }
},})

SEARCH_SUCCESS FSA由searchReducer处理,但是当服务器给出400响应时,SEARCH_FAILURE处理程序永远不会被调用 – 至少我没有看到我期望的日志输出,并且状态肯定不会看起来正确.但是,我确实在redux devtools面板中看到了SEARCH_FAILURE条目.

为了让我更进一步迷惑,这是我目前创建RSAA的声明

export function doSearch( selected_filters,page ){
let qs = SearchPage.constructQueryString(selected_filters,page)

return {
  [CALL_API]: {
  endpoint: `/api/songs/search?${qs}`,method: 'GET',types: [
        {type: SEARCH_REQUEST},{type: SEARCH_SUCCESS},{
           type: SEARCH_FAILURE,payload: (action,res) => {
                 if (400 === res.status)
                  {
                     console.log(`${SEARCH_FAILURE} payload: `,action,res)
                  }
                 return res
              }
            },],headers: { 'Content-Type': 'application/json' },credentials: 'include'
     }
  }
}

正在调用有效载荷函数,并且或多或少地记录我期望的内容.那么我在这里搞砸了什么?据我所知,对于redux-api-middleware的文档的多个读数,这个设置应该产生我想要的行为,但事实并非如此.成功成功,但失败失败……

解决方法

当我用一个对象定义我的一个类型而不是你为SEARCH_FAILURE做的那个动作时,我遇到了类似的问题.我最后通过更新我的package.json来修复:

"redux-api-middleware": "^1.0.0-beta3",

我认为问题是文档描述了1.0.0版本的API,但是当你:

npm install redux-api-middleware --save

您最终获得了该软件包的早期版本.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐