reactjs - react redux 中的 action 是如何工作的?
问题描述
所以我对这个 redux 的东西很陌生,所以像这样的基本东西仍然让我很困惑。
这就是我被告知如何在 react redux 中构建我的动作函数的方式
const load_user = () => async dispatch => {
dispatch({...})
}
connect
我通过 react redux helper将此功能连接到我的组件。
所以我关于这个功能的问题是
dispatch
in that action 函数是从哪里来的?- 为什么需要返回一个函数而不是在第一个函数中调用dispatch?
非常感谢!
解决方案
你在这里写的是一个 thunk 动作创建者,而不是一个普通的动作创建者,并且很好地表明教你这个的教程有点理解 Redux,但是有些概念有点错误。
一个正常的动作创建者看起来像
const load_user = () => {
return {...}
}
对于这个简单的用例,在功能上 100% 相同,代码更少,你应该做什么。
另一方面,thunk 是一个正在被调度的函数,每次你向 Redux 调度一个函数时,thunk 中间件都会以 (dispatch, getState) 作为参数来执行该函数。这就是为什么它也有效,但不应该在那个简单的用例中使用。您可以在此处找到有关 thunk 的更多信息:https ://redux.js.org/usage/writing-logic-thunks
也就是说,在现代 Redux 中,您根本不应该编写普通的动作创建器,因为它们是为您自动生成的。您的教程可能会教您一种非常过时的 Redux 风格。现代 Redux 不使用 switch..case 减速器、ACTION_TYPES、手写动作创建器、不可变减速器逻辑或connect
. 请参阅https://redux.js.org/tutorials/essentials/part-1-overview-concepts上的官方 Redux 教程。
推荐阅读
- r - How to plot a simple animated line graph on plotly
- performance - Linq-to-SQL SubmitChanges for single object or all objects: What is faster
- java - JFreeChart:使用 java.time.LocalDate 或 java.time.LocalDateTime 创建图表
- python - 当您有多个具有相同名称的列时重命名熊猫中的列
- python - 非常简单的 Python 代码不起作用 - 为什么我的 tkinter 图标不起作用?
- swift - 如何在swift中根据文本紧密排列collectionview单元格
- git - Github如何处理main和master
- python-3.x - 爬行阿拉伯语推文集返回错误
- macos - Mac 上 Qt 中的 OpenCV,如何打包?
- mysql - 如何将 SQL 查询转换为 Eloquent