问题标签 [ngrx-reducers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
78 浏览

angular - 尝试将reducer添加到app.module中的ngrx存储时出现错误“参数类型'action'和'action'不兼容'

我一直在尝试创建一个示例 TODO 应用程序来学习 ngrx,我的应用程序具有诸如 ADD_TASK、REMOVE_TASK、UPDATE_TASK 和 LIST_TASk 之类的“操作”,并且它具有一个减速器函数,该函数根据操作类型对状态进行操作。请在下面找到我的应用程序操作和减速器代码。

任务操作.ts

taskreducer.ts

当我尝试添加 StoreModule 时,我遇到了问题。

应用模块.ts

当我尝试将“tasksreducer”添加到 storemodule 时,出现以下错误。有谁能够帮我?

错误:src/app/app.module.ts:23:5 - 错误 TS2322:类型 '(state: Task[] | undefined, action: TASKSActionsType) => Task[]' 不可分配给类型 'ActionReducer<Task[ ],动作>'。参数“action”和“action”的类型不兼容。类型“Action”不可分配给类型“TASKSActionsType”。“Action”类型中缺少属性“payload”,但在“LISTTASk”类型中是必需的。

0 投票
1 回答
562 浏览

angular - ngRx Store - Reducer 返回未定义 - store.select() 未定义

这是我第一次使用 ngRx Store,我实现了我的第一个效果..

什么工作正常:

  • 与后端通信
  • 正在后端执行操作(删除、添加、获取)
  • 有效载荷从效果到达减速器(记录下来以确保)

所以我的问题是我无法从减速器中获取数据。如果我从组件中的存储中选择数据,则会在组件中获得未定义的数据。我点击了效果中的数据,数据被明确传递了。还将数据记录在减速器中 - 它就在那里。但是当它返回时,它返回未定义。ReDux Devtools 记录一切正常。最后但并非最不重要的一点.. 即使使用固定值,状态也不会更新,例如用于加载的 true/false 布尔值。

乐代码:

// 我得到未定义的地方

// 减速器

我非常感谢你的帮助:)

0 投票
0 回答
32 浏览

ngrx - 错误 TS2322:类型 '{ auth: (state: auth.State | undefined, action: All) => auth.State; }' 不可分配给类型 'ActionReducer';

将 reducer 注册到 app.module.ts 时出错。错误 -> 错误:src/app/app.module.ts:25:26 - 错误 TS2322:类型 '{ auth: (state: auth.State | undefined, action: All) => auth.State; }' 不可分配给类型 'ActionReducer<unknown, Action>'。类型 '{ auth: (state: State | undefined, action: All) => State; }' 不提供与签名 '(state: unknown, action: Action): unknown' 的匹配。

该项目的 GIT 链接:https ://github.com/Shubhangi238/LoginApp.git

0 投票
1 回答
215 浏览

angular - 在 app.module 中注册 reducer 显示角度 ngrx 状态管理中的错误

我正在 Angular 12 和最新的 NgRx 库中创建一个应用程序,用于教程目的。我有以下模型、动作、reducer 和应用程序状态类。

模型

行动

减速器

应用状态

现在我想在app.module.ts文件中导入减速器。这是代码:

但是在app.module.ts文件中,导入 reducer 会导致错误。错误如下所示:

错误:src/app/app.module.ts:19:29 - 错误 TS2322:类型 '(state: Tutorial[] | undefined, action: Actions) => Tutorial[]' 不可分配给类型 'ActionReducer<Tutorial[ ],动作>'。参数“action”和“action”的类型不兼容。类型“动作”不可分配给类型“动作”。“Action”类型中缺少属性“payload”,但在“RemoveTutorial”类型中是必需的。

19 StoreModule.forRoot({教程:reducer}),~~~~~~~~

src/app/_actions/tutorial.actions.ts:20:17 20 构造函数(公共负载:数字){} ~~~~~~~~~~~~~~~~~~~~~~ 'payload'在这里声明。

在此处输入图像描述

由于我是 NgRx 的新手,我不明白为什么会出现问题。请帮我解决问题。

0 投票
1 回答
39 浏览

angular - 如何通过 Angular 中的 NGRX 减速器使用数组更新状态?

我想使用 ngrx 减速器更新我的状态,但我得到一个编译错误。

对于上下文。用户在表单上提交工作日志,我希望将此工作日志添加到状态的工作日志数组中。

这是我的状态的结构:

减速机:

我想我在减速器的最后一行有一些错误。有什么帮助吗?

0 投票
0 回答
33 浏览

angular - Angular 赋予 State' 不可分配给类型 'ActionReducer' 错误

在此处输入图像描述

上面的错误是由 VSCode IDE 抛出的,

在尝试将减速器组合到一个文件中时。

我的动作看起来像

上面的IDE错误可以通过设置来action: Action修复import { Action } from '@ngrx/store'

但它会在从动作访问有效负载时抛出错误action.paylod(在减速器中)

无论如何action.type是可以访问的

任何形式的帮助将不胜感激

0 投票
0 回答
10 浏览

angular - 为什么使用 reducerManager 会给我不正确的状态

reducerManager用来在全局对象中添加我的减速器。

例如,如果我写

const reducer = createReducer( initialState, on( doSomething, state => state ) );

然后:

reducerManager.addReducer( 'reducer', reducer );

在我的组件中使用 select 我需要写:

val:Observable<any> = this.store.select( state => state.reducer.val );

我的问题是为什么我不能只写:

val:Observable<any> = this.store.select( state => state.val );

这是使用减速器管理器的含义还是我出错了?

我已经向我的经理添加了许多减速器,并且在将名称写为状态属性以获得我的最终值之后,我总是得到相同的存储状态(顺便说一句,这些状态是共享的,它的目的是什么?)