Redux-saga:dispatch 有时不会触发 saga

Redux-saga: dispatch does not trigger saga sometimes

我有两个名为“登录”和“欢迎”的页面。我注意到我无法在登录前 运行 发送。 为了更容易理解,我在下面留下一个例子;

在登录页面上 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())) 触发 saga (登录后即可访问该页面)欢迎页面=>

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,我可以访问这些页面。 根据您的要求,我可以添加更多信息, 感谢帮助

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

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

我想通了,都是我的错。

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

但是当我在登录页面上获取用户时我没有任何会话,后端 API returns 凭据错误,并且代码在 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);
  }
}