reactjs - 去重 React Reducer 内容
问题描述
我有一些相似的减速器,接收相同的操作,我怎样才能对下面的代码进行重复数据删除?
const gridApiReducer = (state: GridApi, action: { type: string; value: GridApi }) => {
switch (action.type) {
case "UPDATE":
return action.value;
default:
return state;
}
};
const columnApiReducer = (state: ColumnApi, action: { type: string; value: ColumnApi}) => {
switch (action.type) {
case "UPDATE":
return action.value;
default:
return state;
}
};
const [gridApi, setGridApiByDispatch] = useReducer(gridApiReducer, {} as GridApi);
const [columnApi, setColumnApiByDispatch] = useReducer(columnApiReducer, {} as ColumnApi);
解决方案
将 reducer 定义为通用函数:
const apiReducer = <Api extends GridApi | ColumnApi>(
state: Api, action: { type: string; value: Api },
) => {
switch (action.type) {
case 'UPDATE':
return action.value;
default:
return state;
}
};
const [gridApi, setGridApiByDispatch] = useReducer(apiReducer, {} as GridApi);
const [columnApi, setColumnApiByDispatch] = useReducer(apiReducer, {} as ColumnApi);
推荐阅读
- python-3.x - 无法安装 Pygame python 3.9.2
- c++ - 为什么我的 D 代码查找素数比我的 C++ 代码快得多?
- arrays - 将多个地图合并到列表/数组中
- javascript - window.XMLHttpRequest.prototype 中的延迟
- pandas - 如何在熊猫中做加权平均?
- linkedin - LinkedIn r_liteprofile 没有提供公共 url 和个人资料图片
- neo4j - 我应该删除数据库中没有节点的标签吗?
- time-series - 使用 Influxdb 中的时间序列数据检测峰值
- detox - 在 CI 期间运行排毒测试
- arduino - Firmata,未声明的 PULSE_IN 错误