这是一个奇怪的问题,但我还没有找到一个明确的答案。在我的项目中,我使用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());
随着应用的增长和操作在多个组件中使用,如果你使用对象字面量,你需要找到/替换所有的操作字面量的实例,并希望你没有打错任何一个。使用单动作创建器定义,您只需要在单个位置更新它。