问题描述
我一直在尝试创建一个示例 Todo 应用程序来学习 ngrx,我的应用程序具有诸如 ADD_TASK、REMOVE_TASK、UPDATE_TASK 和 LIST_TASk 之类的“操作”,并且它具有根据操作类型对状态执行操作的 reducer 函数。请在下面找到我的应用操作和减速器代码。
tasksactions.ts
import { Action } from "@ngrx/store";
import { Injectable } from '@angular/core'
import { Task } from '../../models/tasks';
export const ADD_TASK = '[TASK] ADD_TASK';
export const REMOVE_TASK = '[TASK] REMOVE_TASK';
export const UPDATE_TASK = '[TASK] UPDATE_TASK';
export const LIST_TASk = '[TASK] LIST_TASk';
export class ADDTASK implements Action
{
readonly type = ADD_TASK;
constructor(public payload: Task){}
}
export class REMOVETASK implements Action
{
readonly type = REMOVE_TASK;
constructor(public payload: Task) {}
}
export class UPDATETASK implements Action
{
readonly type = UPDATE_TASK;
constructor(public payload: Task) {}
}
export class LISTTASk implements Action
{
readonly type = LIST_TASk;
constructor(public payload: any) {}
}
export type TASKSActionsType = | ADDTASK | REMOVETASK | UPDATETASK | LISTTASk
tasksreducer.ts
import { Task } from "src/app/models/tasks";
import { Action,ActionReducerMap } from '@ngrx/store';
import * as TaskActions from "../actions/tasksactions";
import { AppState } from "../app.state";
const initialState: Task[] = [{
TaskID: '',TaskName: '',TaskDescription: '',DueDate: new Date('09/05/2021')
}];
export function tasksreducer (state = initialState,action: TaskActions.TASKSActionsType): Task[]
{
switch(action.type)
{
case TaskActions.ADD_TASK : return [...state,action.payload];
case TaskActions.REMOVE_TASK: return state.filter((data) => action.payload.TaskID != data.TaskID);
default:
return state;
}
}
当我尝试添加 StoreModule 时,我遇到了问题。
App.Module.ts
import { NgModule } from '@angular/core';
import { browserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { AddCompComponent } from './add-comp/add-comp.component';
import { ReactiveFormsModule } from '@angular/forms';
import { StoreModule } from '@ngrx/store';
import { tasksreducer } from './store/reducers/tasksreducer';
@NgModule({
declarations: [
AppComponent,AddCompComponent
],imports: [
browserModule,AppRoutingModule,ReactiveFormsModule,StoreModule.forRoot({
tasks: tasksreducer
})
],providers: [],bootstrap: [AppComponent]
})
export class AppModule { }
当我尝试将“tasksreducer”添加到 storemodule 时,出现以下错误。有人可以帮我吗?
错误:src/app/app.module.ts:23:5 - 错误 TS2322:类型 '(state: Task[] | undefined,action: TASKSActionsType) => Task[]' 不可分配给类型 'ActionReducer '。 参数“action”和“action”的类型不兼容。 “Action”类型不能分配给“TASKSActionsType”类型。 “Action”类型中缺少“payload”属性,但“LISTTASk”类型中需要该属性。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)