【问题标题】:useReducer typescript: State TypeuseReducer 打字稿:状态类型
【发布时间】:2021-05-11 04:15:54
【问题描述】:

在实现reducer时如何做状态类型?我有属性和功能。

export interface State {
  form: boolean;
  errorForm: boolean;
  projects: ProjectI[];
  project: ProjectI;
  showFormFn(): void;
  getProjectsFn(): void;
  addProjectFn(project: ProjectI): void;
  showErrorFn(): void;
  currentProjectFn(projectId: string): void;
  deleteProjectFn(projectId: string): void;
}

但是我在使用钩子并尝试初始化状态时遇到了问题。正确的实施方式是什么?

【问题讨论】:

    标签: typescript react-hooks react-typescript


    【解决方案1】:

    这是一种以经典方式实现它的方法:

    interface ProjectI {
        id: string;
    }
    
    export interface State {
        form: boolean;
        errorForm: boolean;
        projects: ProjectI[];
        project: ProjectI;
        showFormFn(): void;
        getProjectsFn(): void;
        addProjectFn(project: ProjectI): void;
        showErrorFn(): void;
        currentProjectFn(projectId: string): void;
        deleteProjectFn(projectId: string): void;
    }
    
    type Actions = { type: 'addProject', payload: ProjectI } | { type: 'setProject', payload: ProjectI } | { type: 'error' }
    
    function reducer(state: State, action: Actions) {
        switch (action.type) {
            case 'addProject':
                return { ...state, projects: state.projects.concat(action.payload) };
            case 'setProject':
                return { ...state, project: action.payload };
            case 'error':
                return { ...state, errorForm: true };
            default:
                return state;
        }
    }
    

    TS Playground 显示 typescript 中存在的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 2020-04-02
      • 2020-03-09
      • 2022-12-19
      • 2020-08-25
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多