reactjs - React useReducer hook,如何处理多个不相关类型的动作?
问题描述
我正在使用 React 挂钩useReducer
来管理类似购物车的应用程序的状态。我cartReducer
习惯于处理添加/删除/更改项目数量:
// utils/reducers.js
export const cartReducer = (state, action) => {
switch (action.type) {
case ACTIONS_TYPES.ADD_ITEM: {
// ...
}
case ACTIONS_TYPES.REMOVE_ITEM: {
// ...
case ACTIONS_TYPES.EMPTY_CART: {
// ...
}
case ACTIONS_TYPES.CHANGE_ITEM_QTY: {
// ...
}
default: {
throw new Error('Unrecognized action in cartReducer.');
}
}
};
cartReducer
在我的购物车组件中使用了减速器:
const [cart, dispatch] = useReducer(cartReducer, { items: [] });
现在,我想使用我喜欢的库添加通知,但我不知道如何处理它。我想我有3个选择:
- 选项1:污染我调用库的reducer,即
showSuccessToast()
在返回新状态之前添加类似的函数; - 选项 2:创建新的操作,例如
ACTIONS_TYPES.SHOW_SUCCESS_TOAST
,但这需要我更改所有dispatch()
调用; - 选项3:创建一个新的
cartNotificationReducer
添加功能,如showSuccessToast()
我知道某些选项可能是反模式,所以我认为选项 3 是最好的。但是useReducer
只接受一个减速器......我该如何组合它们?
解决方案
推荐阅读
- mysql - 无法导入mysql表
- flutter - 文本字段高度在颤动中没有减少 | 扑
- xaml - ContentView 中类的数据绑定属性
- python - 如何在 multiprocessing.shared_memory 中设置 ShareableList 列表的大小
- gridview - Yii2 网格视图搜索不起作用,我无法理解错误
- ios - 如何获得一个清晰的 PlayGround 文件 Xcode 12.3
- batch-file - 连接/合并日期范围内的 mp3 文件
- java - 如何使用其 Java 客户端库在 Kubernetes API 服务器上验证 GKE 集群
- javascript - 将 BrowserRouter 嵌套在另一个 BrowserRouter 中
- angular - Angular10:扩展组件的自动注入依赖