首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NgRx - reducer被无限次触发

NgRx是一个用于构建响应式、可扩展和可维护的状态管理解决方案的库。它基于RxJS和Redux的原则,用于处理Angular应用程序中的状态管理。

在NgRx中,reducer被用来处理状态的修改。当一个action被分发时,reducer会接收到该action和当前状态,并根据action的类型来决定如何修改状态。reducer是一个纯函数,它接收旧的状态和action,并返回一个新的状态。通过这种方式,NgRx确保了状态的不可变性和可预测性。

然而,如果reducer被无限次触发,可能是由于以下几个原因引起的:

  1. 订阅错误:请确保正确地订阅了状态的变化。在Angular中,可以使用select操作符来选择状态的部分,并订阅其变化。
  2. 循环依赖:循环依赖可能导致reducer被无限次触发。请检查是否存在循环依赖,确保reducer之间的依赖关系是正确的。
  3. 错误的action类型:如果一个reducer监听了一个错误的action类型,它可能会被无限次触发。请检查action的类型和reducer的匹配关系。
  4. 副作用:某些副作用操作(例如异步操作)可能导致reducer被无限次触发。请确保在reducer中只处理同步操作,将副作用操作移动到适当的地方(例如使用NgRx提供的Effects)。

总结起来,当reducer被无限次触发时,需要检查订阅错误、循环依赖、错误的action类型和副作用等可能引起该问题的原因。及时排查并修复这些问题,可以确保状态管理的正确运行。

关于NgRx的更多信息和腾讯云相关产品推荐,可以参考以下链接:

  • NgRx官方文档:https://ngrx.io/
  • 腾讯云容器服务 TKE:https://cloud.tencent.com/product/tke
  • 腾讯云函数计算 SCF:https://cloud.tencent.com/product/scf
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular 接入 NGRX 状态管理

NGRX 状态管理生命周期图中包含了以下元素: Store:集中的状态存储; Action:根据用户所触的不同事件执行不同的 Action ; Reducer:根据不同的 Action 对 Store...NGRX 状态管理中包含了两条变更状态的主线: 同步变更状态:用户 => Action => Reducer => Store(State); 异步变更状态:用户 => Action => Effects...// 注入 Store constructor(private store: Store) {} } 让根组件实现 OnInit 接口,按模拟场景通过 store 触发 action: export...: 23, gender: 'male', })) ); } } 添加新的 Actions: 这里的 UpdateUser 同样是 emptyProps,仅作为触发使用...constructor(private actions$: Actions, private userService: UserService) {} } 进入模拟场景: 在组件加载完的 5 秒后,用户数据的状态清空

24110
  • 一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序

    我们需要监听组件中的DOM keypress事件并输出由此触发的Angular事件。为了收听DOM事件,Angular为我们提供了HostListener装饰器。...它们用在我们应用程序的不同部分,所以它们可能会一路销毁 - 例如,当我们在路由中使用组件作为页面时(我们将在本指南后面讨论路由)。...但是这个代码仍然是不可用的,因为我们不在我们的应用中包含我们的reducerreducer和metaReducer)。...也许我们可以将我们之前的API集成添加到我们的Reducer中?但是我们不能,因为我们的Reducer函数应该是一个纯函数。...你可以使用ofType来创建一个会在多种动作类型上触发的效果。但就目前而言,我们在三项行动中只需要两项。对于该Load操作,我们正在将每个操作转换为getCardList方法调用结果的新可观察对象。

    42.6K10

    react-redux 开发实践与学习分享

    在各大框架中均可使用,当然各个框架也有自己再度封装的状态管理库,如angular的ngrx,vue的vuex,而本文主要介绍的是react的react-redux。 示例介绍 ?...开讲react-rudex 最初看文档的时候,有一种体验,就是各个模块(action,reducer,store)等等,都看明白了,但是具体想去完成功能的时候还是一脸懵逼,不知道如何下手,于是这次为了去更好的讲解示例...action具体定义了项目中触发的行为类别,通过type属性来区别于不同的行为。...在mapStateToProps这个取值函数中,取的也就是相关reducer中返回的值。 触发相关action后的主页控制台: ?...至此,就完成了react-redux对于父子组件的通信,由子组件向上推送信息至父组件,触发相关的操作。

    90130

    给2019前端开发的你5个进阶建议~

    庆幸的是除了 React 社区,Vue 社区有类似的 Vuex,Angular 社区有 NgRx 也提供了几乎同样的能力,甚至 NgRx 还可以无缝使用 redux-devtools 来调试状态变化。...State is read-only 只能通过触发 action 来改变 State action 数量膨胀,大量样板代码 Changes are made with pure functions Reducer...)场景需要处理 3 种状态,对应 LOADING/SUCCESS/ERROR 这 3 个action,我们通过 FetchTypes 类型来自动生成对应到 3 个 action 如何组织 Store/Reducer...reducer 和 view 不必一一对应,应用中同时存在组件树和状态树,按照各自需要去组织,通过 connect 来绑定状态树的一个或多个分支到组件树 通过构造一些预设数据类型来减少样板代码。...非常冗余,这是 Redux 很多人诟病的原因 const initialState = { loading = true, error = false, data = []};function

    1K10

    写在 2021: 值得关注学习的前端框架和工具库

    IceStore[3],淘系Ice团队出品的状态管理库,我在日常业务中使用最多的一个状态管理方案,亮点是基于Immer来实现数据不可变,整体的使用方案类似Dva,state + reducer + effects...Client Apollo-Client[35],来自ApolloGraphQL[36]的作品,只有React版本是官方团队在维护,Vue版本的挪到Vue团队了(VueUI有一部分就是基于Apollo-Client-Vue...Hasura[53],功能比较全的一款,支持PostgreSQL和MSSQL,除了上面提到的以外还提供鉴权与触发器(类似Serverless中的触发器),以及把外部已经独立部署的GraphQL API也纳入管控...NgRx[93],很好用的Angular的状态管理方案,写法和Redux非常像,也是action >>> reducer >>> state,所以几乎可以没有什么成本的上手。...秉承了Angular的思想,提供了一整套的集成:和Angular Router的集成:@ngrx/router-store;对于集合类型的适配:@ngrx/entity;副作用管理:@ngrx/effects

    4.2K10

    写在2021: 值得关注学习的前端框架和工具库

    IceStore,淘系Ice团队出品的状态管理库,我在日常业务中使用最多的一个状态管理方案,亮点是基于Immer来实现数据不可变,整体的使用方案类似Dva,state + reducer + effects...Client Apollo-Client,来自ApolloGraphQL的作品,只有React版本是官方团队在维护,Vue版本的挪到Vue团队了(VueUI有一部分就是基于Apollo-Client-Vue...Hasura,功能比较全的一款,支持PostgreSQL和MSSQL,除了上面提到的以外还提供鉴权与触发器(类似Serverless中的触发器),以及把外部已经独立部署的GraphQL API也纳入管控...NgRx,很好用的Angular的状态管理方案,写法和Redux非常像,也是action >>> reducer >>> state,所以几乎可以没有什么成本的上手。...秉承了Angular的思想,提供了一整套的集成:和Angular Router的集成:@ngrx/router-store;对于集合类型的适配:@ngrx/entity;副作用管理:@ngrx/effects

    2.9K10

    前端架构101:MVC的不足与Flux的崛起

    依然存在几个问题 不可预测:当一个事件发生之后,你并不知道会有谁响应这个事件,是单个对象还是多个对象会响应这个事件 级联修改:当一个事件发生之后,A 组件在接收到事件之后在响应的过程中,还可能发出其他的事件触发后续的修改...年以后和之后流行或者崛起的那些框架,你就会感受到其中的微妙之处: 2014 年前:jQuery, Bootstrap, RequireJS, Kissy, Handlebars 2014 年后:Redux, Ngrx...包括但不限于:Redux,Mobx,Ngrx,Akita,React 等等。...到了在 store 中新增字段的这一个环节,无论是你是使用 Redux 还是 Mobx 相信你都能迅速的找到对应的 model / reducer 在哪。..., reducer, service, effect, 甚至在有的框架中还有更细化的 entity store, entity query。

    1.4K20

    redux、mobx、concent特性大比拼, 看后生如何对局前辈

    store配置 concent mbox redux 支持分离 Yes Yes No 无根Provider & 使用处无需显式导入 Yes No No reducerthis Yes No Yes...针对状态更新方式, 对比redux,当我们的所有动作流程压到最短,action-->reducer这样一条链路,无所谓的存函数还是副作用函数的区分(rematch、dva等提取的概念),把这些概念交给...查看mobx示例 concent(state,moduleComputed) 无需任何装饰器来标记观察属性和计算结果,仅仅是普通的json对象和函数,运行时阶段自动转为Proxy对象。...,对此有依赖的生命周期函数会被触发,并支持类与函数共享此逻辑 [roo7u47fcp.png] export const setupSm = ctx=>{ // 当firstName改变时,组件渲染渲染完毕后会触发...衍生数据 concent mbox redux(reselect) 自动维护计算结果之间的依赖 Yes Yes No 触发读取计算结果时收集依赖 Yes Yes No 计算函数this Yes No

    4.6K61

    通过MapReduce降低服务响应时间

    虽然单个依赖服务的耗时一般都比较低,但如果多个服务串行依赖的话那么整个api的耗时将会大大增加。 那么通过什么手段来优化呢?...用以对mapper后的数据做聚合返回,还可以通过opts选项设置并发处理的线程数量 场景一: 某些功能的结果往往需要依赖多个服务,比如商品详情的结果往往会依赖用户服务、库存服务、订单服务等等,一般依赖的服务都是以...方法通过执行generate(参数为缓冲channel)产生数据,并返回缓冲的channel,mapper会从该channel中读取数据 func buildSource(generate GenerateFunc...newGuardedWriter(collector, done) // 将mapper处理完的数据写入collector for { select { case <-done: // 当调用了cancel会触发立即返回...error,有一个error立即返回 FinishVoid 和Finish方法功能类似,没有返回值 Map 只做generate和mapper处理,返回channel MapVoid 和Map功能类似,返回

    82210

    细聊Concent & Recoil , 探索react数据流的新开发模式

    吸引了不少感兴趣的小伙伴入群开始了解和使用 concent,并获得了很多正向的反馈,实实在在的帮助他们提高了开发体验,群里人数虽然还很少,但大家热情高涨,技术讨论氛围浓厚,对很多新鲜技术都有保持一定的敏感度,如上个月开始逐渐提及得越来越多的出自...只是用于辅助收集实例和衍生数据对模块数据的依赖,而修改数据入口还是setState(或基于setState封装的dispatch, invoke, sync),让Concent可以0入侵的接入react应用,真正的即插即用和感知接入...); 其实run接口定义的reducer集合已被concent集中管理起来,并允许用户以reducer....rootElement ); [r3 (1).gif] 对比Recoil,我们发现没有顶层并没有Provider或者Root类似的组件包裹,react组件就已接入concent,做到真正的即插即用和感知接入...react所有新特性其实都是fiber激活了,有了fiber架构,衍生出了hook、time slicing、suspense以及将来的Concurrent Mode,class组件和function

    1.7K2414

    React进阶(1)-理解Redux

    ,如果想要修改,那么得通过React内置的一个setState的方法进行触发 而子组件想要传递数据给父组件,是通过调用父组件的方法进行通信 一个组件可能存在着很多状态,组件之间有时需要进行通信,对于多个组件状态维护...对于技术性的投入,我从来都是不吝啬的,主动学习是对自己最好的投资 (Redux的确理解有些绕,但并不代表学不会,多读书,多实践,巩固基础) 反之,则以下则是没有必要使用Redux UI层非常简单,只是用于渲染,复杂的数据交互...(Redux与有Redux对比) 一个React应用(例如:pc网站,手机app应用,后台管理系统等用React技术栈构建的应用)其实就是一颗由组件构成的树,如上图所示,在这颗树的根结点,最顶层的组件就是该应用的本身...,若想要修改,需要借助React内置的setState方法进行触发 唯一数据源: 它指的是组件的应用状态数据应该只存在唯一的Store上,这一点是不同于Flux的,在Flux中允许有多个store。...,数组中当前处理的元素: 6, 当前元素在数组中的索引: 5, 调用的数组: 1,2,3,4,5,6 VM1742:6 21 上面的代码中是做一个简单的累加,reducer函数接收四个参数,第一个参数是上一次调用返回的结果

    1.2K20

    redux-saga_pub culture

    用了redux-saga之后: form组件触发提交action (一行简单的dispatch) reducer这个action不需要我处理 (打酱油了) saga提交表单的副作用走起~ (监听到触发副作用的...可以简单理解为,中间件是可以在action到达reducer之前做一些事情的层。(有意思的是,saga应该是在reducer触发之后才触发的。...takeLatest在相同的action触发多次的时候,之前的副作用如果没有执行完,会被取消掉,只有最后一次action触发的副作用可以执行完。...action触发,所以会产生很多对于reducer无用的action, 但是reducer一样会跑一轮,虽然目前没有观测到性能下降,但还是有计算开销 在action的定义上要谨慎,避免action在saga...和reducer之间重复触发,造成死循环 后记 总体而言,对于redux-saga的第一次尝试还是很满意的。

    1.4K10

    Redux介绍及源码解析

    action creator, Redux 还引入了 异步 action 的概念, 下面逐一说明下:action 是一个对象, 用来描述发生的具体事件, 由事件类型和所带的 payload, 在用户事件触发后...他接收当前的 state 和 触发的 action, 然后计算输出一个新的 state, 定义如 (state, action) => newState....dispatch({ type: ActionTypes.INIT }) // 触发一下初始化类型的action, 使用者可以在reducer中响应该事件 return { dispatch,..., 函数逻辑很简单, 直接替换当前的 reducer 函数, 并触发替换 action.function replaceReducer(nextReducer) { currentReducer...单向数据流响应式编程一种架构方案react组件可以有多个Store有唯一的DispatcherState是可变的, 未做保护在Store中执行状态更新不支持异步操作Redux单向数据流函数式编程Flux架构的具体实现技术栈限制只有一个

    2.5K20

    Redux流程分析与实现

    这三大原则包括: • 单一数据源 整个应用的State存储在一个状态树中,且只存在于唯一的Store中。...Action Action是一个普通的JavaScript对象,其中的type属性是必须的,用来表示Action的名称,type一般定义为普通的字符串常量。...在Redux中,State的变化会导致View的变化,而State状态的改变是通过接触View来触发具体的Action动作的,根据View触发产生的Action动作的不同,就会产生不同的State结果。...Reducer 当Store收到action以后,必须返回一个新的State才能触发View的变化,State计算的过程即被称为Reducer。...(1, { type: 'ADD', payload: 2 }); 不过,在实际使用过程中,reducer函数并不需要像上面那样进行手动调用,Store的store.dispatch方法会触发Reducer

    1.1K30

    React进阶(1)-理解Redux

    ,如果想要修改,那么得通过React内置的一个setState的方法进行触发 而子组件想要传递数据给父组件,是通过调用父组件的方法进行通信 一个组件可能存在着很多状态,组件之间有时需要进行通信,对于多个组件状态维护...view需要从多个来源获取数据 ....只要你发现React解决不了的问题,遇到多交互,多数据源的,那么就可以考虑使用Redux的 反之,则以下则是没有必要使用Redux UI层非常简单,只是用于渲染,复杂的数据交互...方法获取state React Components:指的是页面上的任意一个组件(你可以理解为小区公寓楼里的每个房间,而你就是住在里面的租房用户) Actions Creators:具体要干什么事情,触发的动作...setState方法进行触发 唯一数据源: 它指的是组件的应用状态数据应该只存在唯一的Store上,这一点是不同于Flux的,在Flux中允许有多个store。...,数组中当前处理的元素: 6, 当前元素在数组中的索引: 5, 调用的数组: 1,2,3,4,5,6 VM1742:6 21 上面的代码中是做一个简单的累加,reducer函数接收四个参数,第一个参数是上一次调用返回的结果

    1.4K22
    领券