首页 > 解决方案 > 使用 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 钩子时的最佳实践是什么?

标签: reactjsreduxreact-redux

解决方案


你当然可以使用动作对象字面量

dispatch({ type: 'MY_SUPER_AWESOME_ACTION });

但是创建动作创建者可以让您更有效地重用代码。

const mySuperAwesomeAction = () => ({ type: 'MY_SUPER_AWESOME_ACTION });

现在,在您的应用程序中您需要调度此操作的任何地方,您都可以导入该操作并使用

dispatch(mySuperAwesomeAction());

随着应用程序的增长和在多个组件中使用操作,如果您使用对象文字,您将需要查找/替换操作文字的所有实例,并希望您没有输入任何错误。使用单个操作创建者定义,您只需在单个位置更新它。


推荐阅读