reactjs - 使用 Redux 钩子时需要动作创建者吗?
问题描述
这是一个奇怪的问题,但我一直无法找到明确的答案。在我的项目中,我将 Redux 与新的 Redux 钩子、useSelector 和 useDispatch 一起使用。设置是标准的:
减速器:
const reducer = (state = defaultState, action) => {
switch (action.type) {
type SOME_ACTION:
return {
...state,
someVariable: action.payload
}
default:
return state
}
同步动作:
export function someAction(payload) {
return {
type: SOME_ACTION
payload: payload
}
在组件中,我使用
dispatch({type: SOME_ACTION, payload: payload})
.
最近我注意到即使动作创建者不存在,调度也能正常工作:例如,如果 SOME_ACTION 类型列在 reducer 开关运算符中,但没有函数 someAction(payload)。问题是:在这种情况下编写动作创建者是多余的吗?使用 Redux 钩子时的最佳实践是什么?
解决方案
你当然可以使用动作对象字面量
dispatch({ type: 'MY_SUPER_AWESOME_ACTION });
但是创建动作创建者可以让您更有效地重用代码。
const mySuperAwesomeAction = () => ({ type: 'MY_SUPER_AWESOME_ACTION });
现在,在您的应用程序中您需要调度此操作的任何地方,您都可以导入该操作并使用
dispatch(mySuperAwesomeAction());
随着应用程序的增长和在多个组件中使用操作,如果您使用对象文字,您将需要查找/替换操作文字的所有实例,并希望您没有输入任何错误。使用单个操作创建者定义,您只需在单个位置更新它。
推荐阅读
- python - 使用 pd.date_range() 转置 pandas DataFrame 的最快方法
- c++ - 数组下标的无效类型 int[int]
- css - 浏览器不断下载 CSS 背景图片
- arrays - 如何键入完整的字符串而不在中间停止?
- python-3.x - 如何使用 Appium/Python 在真实设备上启动应用程序?
- c++ - RocksDB 获取列族键编号
- python - 在 Selenium for Python 中从具有相同类的多个元素中获取不同的值?
- python - 如何正确地与 keras 模型相互渗透精度,提供完美的线性关系输入与输出?
- java - 我已经为基本包执行创建了一个切入点(* com.blk.example.*.*.*)”但是@advice 方法根本没有调用..?
- javascript - 如何在 Angular-Electron 中侦听从主进程到渲染器进程的事件