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

颤动mobx观察器在List.firstWhere上不起作用

是因为firstWhere方法返回的是一个新的列表元素,并不会改变原列表,因此mobx观察器无法检测到列表的变化。

为了使颤动mobx观察器在List.firstWhere上起作用,我们可以使用mobx提供的可观察列表ObservableList来解决。ObservableList是mobx的一个扩展,它可以监听列表元素的变化,以便在列表发生变化时通知mobx观察器。

以下是解决方案的示例代码:

代码语言:txt
复制
import 'package:mobx/mobx.dart';

// 定义一个可观察的列表
ObservableList<int> numbers = ObservableList<int>.of([1, 2, 3, 4, 5]);

// 定义一个用于筛选元素的方法
int findNumber(int number) {
  return numbers.firstWhere((element) => element == number);
}

// 定义一个mobx观察器,用于监听列表的变化
final reactionDisposer = reaction((_) => numbers.length, (_) {
  print('列表发生了变化');
});

void main() {
  // 输出:3
  print(findNumber(3));

  // 添加一个新的元素到列表
  numbers.add(6);

  // 输出:6
  print(findNumber(6));
  
  // 移除一个元素
  numbers.remove(3);
  
  // 输出:null
  print(findNumber(3));
  
  // 停止mobx观察器的监听
  reactionDisposer();
}

在上述代码中,我们使用ObservableList来定义一个可观察的列表numbers,并定义了一个findNumber方法来使用firstWhere筛选列表中的元素。我们还创建了一个mobx观察器reactionDisposer来监听列表的长度变化,并在变化时打印一条消息。

通过以上的实现,当我们使用findNumber方法筛选列表元素时,mobx观察器能够正确地检测到列表的变化并进行相应的处理。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):提供基于云计算技术的虚拟服务器,满足各种计算需求。了解更多信息,请访问:腾讯云服务器(CVM)
  • 腾讯云数据库(TencentDB):提供稳定可靠的云数据库服务,包括关系型数据库、NoSQL数据库、分布式数据库等。了解更多信息,请访问:腾讯云数据库(TencentDB)
  • 腾讯云人工智能(AI):提供丰富的人工智能技术和解决方案,包括图像识别、自然语言处理、语音识别等。了解更多信息,请访问:腾讯云人工智能(AI)
  • 腾讯云物联网(IoT):提供全方位的物联网解决方案,包括设备连接、数据管理、应用开发等。了解更多信息,请访问:腾讯云物联网(IoT)
  • 腾讯云区块链(Tencent Blockchain):提供安全高效的区块链服务,支持企业级区块链应用开发和部署。了解更多信息,请访问:腾讯云区块链(Tencent Blockchain)
  • 腾讯云存储(COS):提供安全可靠的云存储服务,满足各种存储需求,包括文件存储、数据备份、大规模数据处理等。了解更多信息,请访问:腾讯云存储(COS)
  • 腾讯云视频服务(VOD):提供灵活可靠的视频处理和分发服务,支持视频上传、转码、截图、播放等功能。了解更多信息,请访问:腾讯云视频服务(VOD)

希望以上信息能够对您有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用故事解读 MobX源码(五) Observable

MobX 系统里,办公室、科长和观察员是密不可分,共同构建起 观察局 运行体制; "分工明确,运转高效",这是最高警长在巡视完观察员培训基地后的第一印象,观察局运转的每一步的设计都有精细的考量; B...,同时也提供 shallow 的版本;该部分对应上述故事中的 科室 部分; 第四部分:提供四种装饰函数,装饰的概念我们上一节课讲过,主要辅助提供装饰语法糖作用;对普通 MobX 用户来讲这部分平时也是接触不到的...其作用机制也很直接,该方法调用的最终都是调用实例的 intercept 方法,这样每次值变更之前(以下 prepareNewValue 方法执行),都会触发观察值上所绑定的所有的 拦截: ObservableValue.prototype.prepareNewValue...$mobx.write(this, propName, v); } }) ); } 该方法是作用在 decorator 装饰作用期间,用 generateObservablePropConfig...这一步是 decorator 装饰应用过程中,通过 $mobx 挂载对应属性的 ObservableValue 实例达到的。

82420

用故事解读 MobX源码(四) 装饰 和 Enhancer

本文基于 MobX 4 源码讲解 按照步骤,这篇文章应该写 观察值(Observable)的,不过撰写的过程中发现,如果不先搞明白装饰和 Enhancer(对这个单词陌生的,先不要着急,继续往下看)...因为 MobX 中是使用装饰设计模式实现观察值的,所以说要先掌握装饰,才能进一步去理解观察值。 所以这是一篇 “插队” 的文章,用于去理解 MobX 中的装饰和 Enhancer 概念。... MobX 源码中时常出现的 Enhancer 到底是个什么概念?它在 MobX 体系中发挥怎样的作用?它和装饰又是怎么样的一层关系? 如果你也有这样的疑惑,不妨继续阅读本文,欢迎一起讨论。...从另一个角度来讲, mobx 代码实现中,Enhancer 是实现 Observable 观察值必不可少的一部分,没有它就实现不了观察值功能,也就构建不起 MobX 体系了;而如果缺失 @observable...创建 observable 时发挥作用 再结合 types/modifier.ts 中有各种 Enhancer 的具体内容,就能大致了解 enhancer 是如何起到 转换数值 的作用的,再分析下去就是观察

89320

MobX状态管理:简洁而强大的状态机

创建可观察状态(Observable State)MobX使用@observable装饰来创建可观察的对象、数组或基本类型,当它们发生变化时,依赖它们的观察者会自动更新。...");可响应的计算值(Computed Values)使用@computed装饰创建基于其他可观察值的计算值,这些计算值会根据依赖关系自动更新。...可观察对象(Observables)MobX使用@observable装饰或observable函数来创建可观察的值。当这些值发生变化时,依赖它们的任何计算或视图都会自动更新。...; }, );动作(Actions)@action装饰或action函数用于标记状态更改的函数。这确保了状态受控环境中改变,防止了意外的副作用。...,可以使用runInAction包裹异步操作,确保状态更新正确的作用域内。

13110

MobX 背后的基础原理

因为其不被允许有副作用MobX 就可以安全的对其执行先后重新排序,以保证重新运行次数的最小化。可以简单的认为,如果计算值未被观察,就懒运行其计算。 计算值会被自动缓存。...这意味着读取一个计算值时,只要相关的可观察属性不变,就不会重新运行计算。 话说回来,每个软件系统都需要副作用,例如发起网络请求或刷新 DOM。...Proxies 和 MobX MobX 被广泛用于产品中,因此要承诺能在每种 ES5 环境中运行。这使得实际浏览中使用 MobX 成为可能,但也使得在此时支持 Proxy 无法实现。...可以轻易的 MobX 问题追踪中找出一些无意间将对象转为可观察对象引起的非预期行为的问题。... MobX 中不通知观察者就无法升级数据,也会引入应用中存在过期数据的可能性,这就违背了 MobX 的理念。人们有时希望有这种机制,但我还没遇到过概念上无法解决的实际用例。

1.6K10

MobX】390- MobX 入门教程(上)

MobX背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。 其中包括UI、数据序列化、服务通讯,等等。 ” 核心重点就是:MobX 通过响应式编程实现简单高效,可扩展的状态管理。 ?...也提供使用装饰 @observable 来将其转换成可观察的,可以使用在实例的字段和属性上。...内置比较有: comparer.identity, comparer.default, comparer.structural; requiresReaction: boolean 重新计算衍生属性之前...小结 autorun 默认会执行一次,以获取哪些可观察数据被引用。 autorun 的作用观察数据被修改之后,自动去执行依赖可观察数据的行为,这个行为一直就是传入 autorun 的函数。...的一个变种情况; reaction 可以通过分离可观察数据声明,以副作用的方式对 autorun 做出改进; 它们各有特点,互为补充,都能在合适场景中发挥重要作用

81220

MobXMobX 简单入门教程

MobX背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。 其中包括UI、数据序列化、服务通讯,等等。 核心重点就是:MobX 通过响应式编程实现简单高效,可扩展的状态管理。...也提供使用装饰 @observable 来将其转换成可观察的,可以使用在实例的字段和属性上。...内置比较有: comparer.identity, comparer.default, comparer.structural; requiresReaction: boolean 重新计算衍生属性之前...小结 autorun 默认会执行一次,以获取哪些可观察数据被引用。 autorun 的作用观察数据被修改之后,自动去执行依赖可观察数据的行为,这个行为一直就是传入 autorun 的函数。...的一个变种情况; reaction 可以通过分离可观察数据声明,以副作用的方式对 autorun 做出改进; 它们各有特点,互为补充,都能在合适场景中发挥重要作用

1.5K00

MobX管理状态(ES5实例描述)-1.核心概念和基本流程

MobX是一个简单有效的状态管理库,以派生(derive)的概念为核心,以观察者模式为手段,达到了修改数据自动更新界面等目的 正因为其本身提供了包装react的方法,可以简洁的改善react组件,所以官网文档和几乎所有教程都以...react和ES7的装饰修饰符等特性为切入点 但MobX传统的ES5环境中也能良好工作,本文尝试以此为出发点,探讨既有的非react项目中直接引入MobX并用其整理重构老代码的方法 没有babel、...核心概念和基本流程 名称 作用 状态 用来驱动应用的数据 派生 从核心数据中引发的数据或动作,比如下面提到的computed和reaction observable 可被观察的核心数据 action 用来改变状态的方法...UI界面或请求网络等“有副作用”的任务,一般由autorun(reactionFn)指定 ?...1.1 一个计数的例子 ?

51220

🚀🚀🚀初识mobx,以及mobx-react使用

Mobx5之前,响应式原理是基于Object.defineProperty的,可以向下兼容到ES5浏览,而从Mobx5开始使用proxy特性支持响应式,最低支持ES6浏览。...的WatchEffect方法两种写法通过Mobx定义一个响应式的Store有很多种方法,不同的方法中定义他们也有所不同。...,例如,React使用Mobx时,通常我们会在组件销毁时清除他们useEffect(() => { const dispose = reaction( () => this.condition...() return dispose}, [])但是实际的开发中,我们会使用具体的和框架相关的Mobxmobx-react、mobx-vue。...Mobx-react的一些用法React中使用Mobx,通常有两个包:mobx-react、mobx-react-litemobx-react:提供类组件和hook组件的一些方法mobx-react-lite

8410

MobX】391- MobX 入门教程(下)

三、MobX 常用 API 介绍 3. 修改可观察数据 在上一部分内容中,我们了解到,对可观察的数据做出反应的时候,需要我们手动修改可观察数据的值。...这种修改是通过直接向变量赋值来实现的,虽然简单易懂,但是这样会带来一个较为严重的副作用,就是每次的修改都会触发 autorun 或者 reaction 运行一次。...简单实例 这里以简单计数为例,实现点击按钮,数值累加的简单操作,如图: ?...首先安装 mobx-react 依赖: cnpm i mobx-react -D 修改webpack.config.js, presets 配置中添加 react 进来: // ......@observer 需要根据数据变换,而改变UI的组件去引用,另外建议有使用到相关数据的类都引用。

88820

MobX管理状态(ES5实例描述)-3.常用API

MobX是一个简单有效的状态管理库,以派生(derive)的概念为核心,以观察者模式为手段,达到了修改数据自动更新界面等目的 正因为其本身提供了包装react的方法,可以简洁的改善react组件,所以官网文档和几乎所有教程都以...react和ES7的装饰修饰符等特性为切入点 但MobX传统的ES5环境中也能良好工作,本文尝试以此为出发点,探讨既有的非react项目中直接引入MobX并用其整理重构老代码的方法 没有babel、...常用API 3.1 computed computed values指的是从状态或其他派生值中派生出来的值 当依赖的值改变时,派生值也自动更新 产生派生值的函数应该是无副作用的纯函数 除了上面提过的类实例里使用..., fn) 被用来对那些没有单独设置观察者的状态创建reaction函数 当初始化和依赖的值改变时,相关的函数就会执行 autorun的返回值是一个解除观察的函数 var str = mobx.observable..., fn)语法,创建一个action,用来改变状态 action可以用于任何改变可观察状态的方法,或有副作用的方法 对于派生属性对应的setter方法,将自动被视为一个action 设置mobx.useStrict

42440

MobX管理状态(ES5实例描述)-4.常用工具方法

react和ES7的装饰修饰符等特性为切入点 但MobX传统的ES5环境中也能良好工作,本文尝试以此为出发点,探讨既有的非react项目中直接引入MobX并用其整理重构老代码的方法 没有babel、...和立即执行的autorun不同的是,该方法延迟minimumDelay毫秒才执行 如果被观察对象延迟期内多次改变,该方法也仅执行一次,这种情况下的效果就类似runInAction了 适合于那些不需要经常执行...,或代价较大的操作 如果指定了scope参数,则fn会被绑定到scope上 4.2 Atom 符合Atom类规则的实例,可以在数据变化时通知MobX,或者接受MobX该对象是否被观察的通知以做出响应 class...) 该方法头两个参数是两个函数,头一个data函数跟踪并返回用到的数据;返回值传递给第二个产生副作用的effect函数做参数 和autorun不同的是,effect函数创建时并不立即生效,而是第一次得到新的值后生效...(mobx.isObservableObject(clone)); // false 4.7 untracked 使某段代码不被观察 const person = mobx.observable({

1K50

实现简版 react 状态管理 mobx

,清晰易读渲染性能好,副作用自动执行核心思想状态变化引起的副作用应该被自动触发应用逻辑只需要修改状态数据即可,mobx 回自动渲染 UI,无需人工干预数据变化只会渲染对应的组件mobx 提供机制来存储和更新应用状态供...React 使用react 通过提供机制把应用状态转换为可渲染组件树并对其进行渲染这里配上官网的 mobx 执行流程图图片页面的状态存储 mobx 中,通过事件触发 mobx 的方法函数,改变状态,...mobx 使用环境配置因为 mobx 中使用了装饰,还有需要对 jsx 解析,所以我们需要配置下开发环境。.../mobx/observable.jsconst observable = (target) => { // 需要将 target 进行代理,创建可观察对象 return createObservable...我们知道 autorun 会自动收集内部函数中使用的属性进而绑定关联,那我们函数的 render 方法中使用了 store 的数据,当属性改变时,就会触发 autorun,我们 autorun 中重新渲染

1.4K30

用故事解读 MobX 源码(一)autorun

(二)】 computed》 《【用故事解读 MobX源码(三)】 shouldCompute》 《【用故事解读 MobX 源码(四)】装饰 和 Enhancer》 《【用故事解读 MobX 源码(五...观察员 探长:一方面负责管理划归给他的 观察员,整合观察员反馈的资讯;另一方面接受 MobX 执行官交给他的任务, 适当的时机 执行这项任务(此任务是打印张三的存款); ?...接下来就让我们来详细分析探长的 runReaction 的方法,该方法中 探长将联动观察员、数据情报室一起部署方案中发挥监督、自动化响应功能。...其实图中另外有一个很重要的 shouldCompute 判断方法步骤,根据这个方法探长可以自行判断 是否执行任务,并非所有的任务都需要执行,这一步的作用是优化 MobX 执行效率。...探长 R1 整理和观察员的关系 两者依赖更新的算法参考文章Mobx 源码解读(四) Reaction 中有详细的注解,推荐阅读。这里也做一下简单介绍。

45220

用故事解读 MobX 源码(一)autorun

(二)】 computed》 《【用故事解读 MobX源码(三)】 shouldCompute》 《【用故事解读 MobX 源码(四)】装饰 和 Enhancer》 《【用故事解读 MobX 源码(五...观察员 探长:一方面负责管理划归给他的 观察员,整合观察员反馈的资讯;另一方面接受 MobX 执行官交给他的任务, 适当的时机 执行这项任务(此任务是打印张三的存款); ?...接下来就让我们来详细分析探长的 runReaction 的方法,该方法中 探长将联动观察员、数据情报室一起部署方案中发挥监督、自动化响应功能。...其实图中另外有一个很重要的 shouldCompute 判断方法步骤,根据这个方法探长可以自行判断 是否执行任务,并非所有的任务都需要执行,这一步的作用是优化 MobX 执行效率。...探长 R1 整理和观察员的关系 两者依赖更新的算法参考文章Mobx 源码解读(四) Reaction 中有详细的注解,推荐阅读。这里也做一下简单介绍。

99610

React 进阶 - React Mobx

# Mobx 特性 # 观察者模式 Mobx 采用了一种'观察者模式'—— Observer,整个设计架构都是围绕 Observer 展开: mobx 的状态层,每一个需要观察的属性都会添加一个观察者...,可以称之为 ObserverValue 有了观察者,那么就需要向观察者中收集 listener ,mobx 中有一个 Reaction 模块,可以对一些行为做依赖收集, React 中,是通过劫持...# 装饰模式 为了建立观察者模式,便捷地获取状态 / 监听状态,mobx 很多接口都支持装饰模式的写法,所以 mobx 中,装饰模式是最常用的写法: class Root { @observable...流程分析和原理揭秘 可以从三个角度分析 mobxmobx-react 整个流程: 初始化: mobx 初始化的时候,是如何处理 observable 可观察属性的 依赖收集:通过 mobx-react...观察者属性管理者-ObservableAdministration # 依赖收集 观察者-ObservableValue 注入模块-Provider 和 inject 可观察组件-observer 反应

84211

用故事解读 MobX 源码(二)computed

MobX 源码(四)】装饰 和 Enhancer》 《【用故事解读 MobX 源码(五)】 Observable》 文章编排:每篇文章分成两大段,第一大段以简单的侦探系列故事的形式讲解(所涉及人物、场景都以...本文基于 MobX 4 源码讲解 写本文的时候,由于 MobX 以及升级到 4.x,API 有较大的变化,因此后续的文章默认都将基于 4.x 以上版本进行源码阅读。...前一篇文章仍然以 mobx v3.5.1 的源码,autorun 逻辑新版中没有更改,因此源码逻辑仍旧一致。 A....2.2、 懒惰的会计师 会计师有一个特性就是比较懒:就算观察员所观察到的值变更了,他们也不会立即重新计算,而只必要的时候(比如当上级前来索取时)才会重新计算。...”中所起到的作用: ?

47621

干货 | 浅谈React数据流管理

3)store太多:随着store数的增多,维护成本也会增加,而且多store之间的数据共享以及相互引用也会容易出错 4)副作用mobx直接修改数据,和函数式编程模式强调的纯函数相反,这也导致了数据的很多未知性...多亏了它两种强大的设计模式:观察者模式和迭代模式;简单地介绍一下: 1)观察者模式: ?...观察者模式中,有两个重要的角色:Observable和Observer,熟悉mobx的同学对这个一定不陌生(所以我建议想要学习rxjs的同学,如果对mobx不熟悉,可以先学习一下mobx,然后再学习rxjs...就是可观察对象和观察者,可观察对象(Observable)也就是事件发布者,负责产生事件,而观察者(Observer)也就是事件响应者,负责对发布的事件作出响应,但是如何连接一个发布者和响应者呢?...2)迭代模式: 在这里要先引出一个新的概念:拉取(pull)和推送(push),rxjs官方这两种协议有更详细的解释,我这里就直接引用一下: ?

1.9K20

mobx 入门

mobx 响应式状态管理库 安装 // npm npm i --save mobx // yarn yarn add mobx 基础概念 所谓的响应式,既是将原有数据结构,例如 数组,对象等转变为可观察对象..., 通过对可观察对象的监控,当数据变化做出对应的动作,所以可以大概归纳为: 构建观察对象 设置响应动作 mobx中构建观察对象存在两种模式 函数模式 装饰模式(针对类定义) 函数模式 创建观察对象...,而非我们创建时传入的值, 我们可能修改保存观察对象的变量,这是将丢失观察对象....多数情况下,mobx 配置和 react 使用在类中 类中使用 observable class Man { // 使用装饰 构建装饰值 @observable name = '...) console.log(add.total) // -> 22 add.total = 100 // -> Cannot set total value action 与 异步函数 action 绑定异步函数中

1K20

Mobx 核心概念简单入门:以股票为例

核心概念 MobX 主要包括了四个核心概念:可观察的状态、根据状态得到的计算值、基于状态变化发生的反应,触发状态变化的动作。 下面我们以股票为例,简单说明下这四个核心概念。...可观察的状态(Observable state) MobX 通过使用 @observable 为现有的数据结构(如对象,数组和类实例)添加了可观察的功能,这样当数据发生变化的时候就可以继续进行下一步发应...(Computed values) Mobx 可通过 @computed 装饰来定义某些状态发生变化时自动更新的值。...但是严格模式下,状态只能通过 action来进行修改,如下我们增加买入卖出股票: class Stock { @observable price = 400; @observable...mobx-react 提供一个 @observer 装饰, 当你的状态发生变化时,会自动(autorun)调用组件的 render 方法,更新 UI,这样就可以把你的(无状态函数)组件变成响应式组件。

87950

Mobx 核心概念简单入门:以股票为例

核心概念 MobX 主要包括了四个核心概念:可观察的状态、根据状态得到的计算值、基于状态变化发生的反应,触发状态变化的动作。 下面我们以股票为例,简单说明下这四个核心概念。...可观察的状态(Observable state) MobX 通过使用 @observable 为现有的数据结构(如对象,数组和类实例)添加了可观察的功能,这样当数据发生变化的时候就可以继续进行下一步发应...(Computed values) Mobx 可通过 @computed 装饰来定义某些状态发生变化时自动更新的值。...但是严格模式下,状态只能通过 action 来进行修改,如下我们增加买入卖出股票: class Stock { @observable price = 400; @observable...mobx-react 提供一个 @observer 装饰, 当你的状态发生变化时,会自动(autorun)调用组件的 render 方法,更新 UI,这样就可以把你的(无状态函数)组件变成响应式组件。

81720
领券