React-redux 操作没有被调度

Posted

技术标签:

【中文标题】React-redux 操作没有被调度【英文标题】:React-redux action is not getting dispatched 【发布时间】:2020-08-18 17:28:14 【问题描述】:

我正在尝试在我的 react next js 应用程序中使用 google 实现身份验证。我将访问令牌发送到我的后端,后端检查令牌是否有效,如果有效,它会在标头中返回一个令牌以访问受保护的资源。当我集成 redux 时,redux-thunk 似乎阻止了请求,请求只发送到谷歌而不是我的后端。我没有收到来自后端的任何响应,我什至观察到服务器中的日志但没有请求。

这段代码运行良好,它返回了令牌

export const responseGoogle = (response) => 
    const access_token = response.accessToken;
    const tokenSend = access_token
        return  axios.post(`http://localhost:8000/api/auth/google/login`, tokenSend)
            .then(response => 
                console.log(response.data)
            )
            .catch(error=> console.log(error))
;

但是下面这段代码在 redux-thunk 不工作的情况下,请求也被发送到谷歌,但不在我的后端


export const responseGoogle = (response) => 
    const access_token = response.accessToken;
    const tokenSend = access_token
    return (dispatch) => 
       return  axios.post(`http://localhost:8000/api/auth/google/login`, tokenSend)
            .then(response => 
                  console.log(response.data)

            )
            .catch(error=> console.log(error))
    
;

登录按钮

 <GoogleLogin
     clientId=config.GOOGLE_CLIENT_ID
     buttonText="Login"
     onSuccess=responseGoogle
     onFailure=onFailure
     isSignedIn 
 />  

【问题讨论】:

我不知道GoogleLogin 是什么,但假设你有一个功能组件,你可以试试const dispatch = useDispatch() 和处理程序:onSuccess=response=&gt;dispatch(responseGoogle(response)) 谢谢,现在可以使用了 【参考方案1】:

它现在正在工作,感谢hmr 给我答案。 我只需要手动触发响应

 <GoogleLogin
     clientId=config.GOOGLE_CLIENT_ID
     buttonText="Login"
     onSuccess=response => dispatch(responseGoogle)
     onFailure=onFailure
     isSignedIn 
 />  

【讨论】:

以上是关于React-redux 操作没有被调度的主要内容,如果未能解决你的问题,请参考以下文章

This.props.dispatch 不是函数 - React-Redux

React-Redux 中的调度函数

React-redux useDispatch() Uncaught TypeError

在 react-redux 应用程序中使用 JSONP

在没有调度React的情况下更新了道具

每个 axios 请求在 react-redux 应用程序中触发两次?