首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复数据删除React Reducer内容

重复数据删除React Reducer内容
EN

Stack Overflow用户
提问于 2020-12-14 16:44:08
回答 2查看 22关注 0票数 1

我有一些类似的reducers,接收相同的操作,我如何删除以下代码的重复数据?

代码语言:javascript
复制
 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);
EN

回答 2

Stack Overflow用户

发布于 2020-12-14 16:56:13

将reducer定义为generic函数:

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2020-12-14 17:00:28

+1对于上面的响应,您正在寻找通用的TS函数:

代码语言:javascript
复制
const createReducer = <T extends object>()=> {
  return (state: T, action: { type: string, value: T } ): T => {
    switch (action.type) {
      case "UPDATE":
        return action.value;
      default:
        return state;
    }
  };
}

const gridApiReducer = createReducer<GridApi>();
const columnApiReducer = createReducer<ColumnApi>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65285958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档