如何使用 thunk 在 react-redux 挂钩中进行异步调用?

Posted

技术标签:

【中文标题】如何使用 thunk 在 react-redux 挂钩中进行异步调用?【英文标题】:how to make async call in react-redux hooks with thunk? 【发布时间】:2020-05-16 08:31:26 【问题描述】:

我开始学习钩子。但我不明白如何正确使用异步调用。 之前我用过

import * as actionQR from "../actions/qr";
...
function mapDispatchToProps(dispatch) 
    return 
        actionQR: bindActionCreators(actionQR, dispatch),
    
 

然后打电话给我的this.props.actionQR.myFunc(),但是我应该用useDispatch()做什么? 如果我只是打电话

import foo from "../actions/qr";
...
useDispatch(foo());

那么我的foo() 不要console.log(2)

export const foo = () => 
    console.log(1);
    return (dispatch) => 
        console.log(2);
      

我正在使用 thunk

import createRootReducer from './reducers/index';
...
const store = createStore(createRootReducer, applyMiddleware(thunk));

【问题讨论】:

【参考方案1】:

useDispatch() 钩子将返回对dispatch 函数的引用,您不向它传递动作,而是获得dispatch 引用并将动作传递给它(dispatch)。

所以基本上它应该是这样的:

const dispatch = useDispatch()
dispatch(foo())

您可以从react-redux DOCS获取更多详细信息

【讨论】:

我认为 OP 的意思是寻求一种将钩子绑定到 redux-thunk 动作创建者的方法,而不是直接进行调度。 @CarlosJimenezBermudez 谢谢。尽管 OP 以错误的方式使用了 API,但我只是向他/她展示了该 API 的使用方式。此外,OP 接受了答案,所以我想我确实理解 OP 的意思?

以上是关于如何使用 thunk 在 react-redux 挂钩中进行异步调用?的主要内容,如果未能解决你的问题,请参考以下文章

在 React-redux 和 Redux-Thunk 中从 API 获取数据的问题

Redux 进阶之 react-redux 和 redux-thunk 的应用

React 应用程序转换为 react-native - react-redux 和 react-thunk 的问题

React 上下文 API 和/或 React-Redux-Thunk

使用 Redux Thunk 和 Apollo Graphql 做出反应 - 如何访问 client.query?

在检查状态之前等待 thunk 完成 HTTP 请求