redux - 为什么我在 Redux 中的 dispatch 函数得到一个函数而不是一个动作?
问题描述
我有这样的代码:
const mapStateToProps = (state, ownProps) => ({
historyData: getHistoryForSavedVariants(state)[ownProps.savedVariant.variantId],
isHistoryLoading: getHistoryLoading(state),
})
const mapDispatchToProps = (dispatch, ownProps) => ({
loadData: () => {
-----> dispatch(loadHistoryForSavedVariant(ownProps.savedVariant))
},
})
export default connect(mapStateToProps, mapDispatchToProps)(HistoryButton)
在另一个文件loadHistoryForSavedVariant
中如下:
export const loadHistoryForSavedVariant = (savedVariant) => {
return (dispatch) => {
dispatch({ type: REQUEST_HISTORY })
const url = `/api/saved_variant/${savedVariant.variantId}/saved_variant_history`
new HttpRequestHelper(url,
(responseJson) => {
dispatch({ type: RECEIVE_HISTORY })
dispatch({ type: RECEIVE_DATA, updatesById: responseJson })
},
(e) => {
dispatch({ type: RECEIVE_HISTORY })
dispatch({ type: RECEIVE_DATA, error: e.message, updatesById: {} })
},
).get({ xpos: savedVariant.xpos, ref: savedVariant.ref, alt: savedVariant.alt, familyGuid: savedVariant.familyGuids[0] })
}
}
所以,可以看出dispatch
最终得到了一个函数——(dispatch) => {...}
而不是一个动作。为什么?我不明白这是怎么回事。在Redux
官方网页上,我看到任何地方dispatch
都有一个action
而不是一个功能,所以我很困惑。当然,代码运行良好,我只是对这个特定的机制感兴趣,对这里发生的事情感兴趣。
解决方案
那是一个“thunk 函数”。Thunks 是一个 Redux 中间件,它允许您将函数传递到dispatch()
中,这对于编写与组件分开的异步逻辑很有用。
有关更多详细信息,请参阅这些 Redux 教程:
推荐阅读
- javascript - 为用 TypeScript 编写的 React 组件生成 PropTypes
- javascript - 无法使用语言环境 en 解析月份三个字母月份
- c++ - 如何加速此代码(MWE!),例如使用限制
- django - 当 Debug=False 时 Django Heroku 不提供静态文件
- apache-spark - 使用 Spark 运行 SQL 查询
- cucumber - 空手道 - 在单一场景中有多个“何时”
- angular - 在 Angular 中找不到项目名称
- javascript - 将图像添加到真棒完成的下拉自动完成中,提交按钮然后向下移动,重置其位置?
- python - 如果命名元组是不可变的,为什么它有一个 _replace 方法?
- javascript - 单击外部时关闭持久 MUI 抽屉