【问题标题】:Redux-saga: dispatch does not trigger saga sometimes [closed]Redux-saga:调度有时不会触发传奇[关闭]
【发布时间】:2021-12-09 11:31:43
【问题描述】:

我有两个页面,分别名为 Login 和 Welcome。我注意到我无法在登录前运行调度。 为了更容易理解,我在下面留下一个例子;

在登录页面 dispatch(fetchUser())) 不会触发 saga 登录页面 =>

const fetchUserLocal = () => {
        console.log("dispatch run, before user login: ",dispatch(fetchUser()))
        dispatch(fetchUser())
           
    }
return ( <div> <button onClick={fetchUserLocal}>Click to FETCH USER</button> </div>)

在欢迎页面 dispatch(fetchUser())) 触发传奇 (登录后即可访问该页面)欢迎页面=>

const fetchUserLocal = () => {
        console.log("dispatch run,  after user login: ",dispatch(fetchUser()))
            dispatch(fetchUser())
    }
 return ( <div> <button onClick={fetchUserLocal}>Click to FETCH USER</button> </div>)

两个页面都有 useDispatch 和 action,我可以访问这些页面。 根据您的要求,我可以添加更多信息, 感谢帮助

【问题讨论】:

    标签: reactjs react-redux redux-saga


    【解决方案1】:

    我发现问题了,都是我的错。

    欢迎页面正在工作,因为当该页面中的 fetchUser 我有一个会话时,我的后端 API 返回成功并且代码在 try 块中运行。

    但是当我在登录页面上获取用户时没有任何会话,并且后端 API 返回凭据错误,并且代码在 catch 中运行。 问题从这里开始,因为我错过了parantesies。当我将 yield put(fetchUserFailure) 更改为 yield put(fetchUserFailure())

    时,它现在运行良好
    export function* fetchUser() {
      try {
        console.log("fetchUser")
        const user = yield axios.get(FETCH_USER, { withCredentials: true });
        console.log("saga outh user",user)
        yield put(fetchUserSuccessful(user.data));
      } catch (error) {
        console.log("error",error)
        yield put(fetchUserFailure);
      }
    }
    

    【讨论】:

      【解决方案2】:

      我正在为动作和减速器使用帮助程序包。包名是 react-act。我不知道为什么,但是当我删除这个包时,我没有得到同样的错误。现在一切正常。

      如果我知道我在 react-act 上做错了什么,我会在这里发表评论,如果您已经知道或猜到了,请发表评论。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 2022-01-16
        • 2021-09-30
        • 2020-01-04
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多