对于从史诗中返回的动作数组,“错误:动作必须是普通对象”

时间:2018-05-20 17:57:57

标签: redux rxjs redux-observable

.class

在史诗中返回的所有动作集中,我们都会收到此错误。

可能是由于Error: Actions must be plain objects. Use custom middleware for async actions. 创建者中的史诗如何设置:

epics

这里的映射不正确或更多可能它们在史诗中不正确。

const epic = (action$, store) => action$.ofType(String(key)).mergeMap(action => func(action, store)) 调用的一首史诗的例子:

func(action, store)

如果没有方括号,它可以正常工作,也尝试了这个建议:

  [String(usersActions.updateUser)]: (action, store) => {
    return authFetch(`${API_ROOT}/user/${get(action, 'payload.id')}`, {
      method: 'put',
      headers: {
       ...
      },
      body: ...,
    })
      .then(resJson => {
        if (resJson['status'] === 200) {
          return [
            appActions.pushNotification('success', USER_UPDATE_SUCCESS),
            appActions.setNextPath(`/users/${get(action, 'payload.id')}`),
          ]
        } else
          return [
            appActions.pushNotification(
              'error',
              USER_UPDATE_FAILED + ': ' + resJson['message']
            ),
          ]
      })
      .catch(() => {
        return [appActions.pushNotification('error', USER_UPDATE_FAILED)]
      })
  },

它会删除错误,但现在重复调度的操作。

已经尝试了所有选项,所以希望这不是一个重复的问题。

1 个答案:

答案 0 :(得分:1)

您可以在史诗的末尾添加.do(action => console.log(action))以查看您正在发布的值以及它们不是为了操作的原因。例如如果它是一系列动作,那是不正确的。 Epics应该只发出具有type属性的普通旧javascript动作。