.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)]
})
},
它会删除错误,但现在重复调度的操作。
已经尝试了所有选项,所以希望这不是一个重复的问题。
答案 0 :(得分:1)
您可以在史诗的末尾添加.do(action => console.log(action))
以查看您正在发布的值以及它们不是为了操作的原因。例如如果它是一系列动作,那是不正确的。 Epics应该只发出具有type
属性的普通旧javascript动作。