Redux Saga动作必须是普通对象。使用自定义中间件进行异步操作

时间:2017-02-12 14:53:55

标签: reactjs redux-saga

我还在学习redux-saga,但仍然遇到了2个问题。

这是我的代码:

Gist

问题是:

  1. Actions must be plain objects. Use custom middleware for async actions
  2. 功能doSignIn即使动作从不调用也会继续通话。可以通过按钮点击来调用操作。
  3. 任何解决方案?

2 个答案:

答案 0 :(得分:0)

我看到的一些问题:

function* rootSaga() {
    yield [
        takeLatest(actions.authRequest, doSignIn),
    ];
}

takeLatest第一个参数是匹配的“模式”,而不是动作。所以你真的想要这样的东西:

takeLatest(AUTH_REQUEST, doSignIn)

来自take pattern param docs

  

如果是字符串,如果action.type === pattern(例如take(INCREMENT_ASYNC)

,则匹配该操作

对于问题1 Actions must be plain objects. Use custom middleware for async actions,永远不要将函数传递给put。你的doSignIn传奇看起来应该更像

export function* doSignIn() {
    try {
        yield put(actions.sendingRequest());

        const { email, password } = yield put(actions.authRequest());

你可以在传奇中稍后正确地执行put效果,所以请确保始终这样做。

我对数字2的问题不是100%肯定。看看上述建议是否有帮助。

答案 1 :(得分:0)

re:问题的第二部分:

您没有提供任何按钮代码,但是常见的失败是如何将功能分配给按钮。

onPress={this.function()}触发而没有被按下。

onPress={this.function}在按下时触发。

onPress={() => {this.function()}}在按下时触发。