- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在下面的文章中说应该处理 mobx 的 react : https://mobxjs.github.io/mobx/best/pitfalls.html
用@computed装饰器标记的属性是一种 react ,所以看起来它们也需要被处理掉。问题在于,与显式调用 autorun()、observe() 或其他返回处置函数的 react 不同,@computed 装饰器似乎无法让我们处置该 react 。
所以问题是 - 应该如何处理由 @computed 装饰器定义的 react ?
不释放的问题可能会在下面的例子中体现
export class Observed {
@observable
public x: number;
}
export class Observer {
constructor(private member: Observed){
}
@computed
get doubled(){
return this.member.x*2;
}
}
let member = new Observed();
let observer = new Observer(member);
// now pass observer as a model to some react component and use its doubled property
只要'member'还活着,observer就会一直活着,除非包裹doubled()的reaction被处理掉。即使我们向 Observer 添加一个 dispose() 函数并自己调用它,我也不明白我们如何访问 doubled() 的底层 react 来处理它。
最佳答案
计算值由 MobX 自动处理(甚至在需要时重新实例化)。 MobX 可以做到这一点,因为它们应该没有副作用。因此,每当 MobX 确定没有观察者对计算值感兴趣时,它们将自动暂停,取消订阅计算可能使用自己的任何观察者。此时它可能会被 GC-ed(例如因为拥有的对象超出范围),或者因为新的观察者注册而重新激活。
换句话说,在您的示例中,Observer 将不会保持事件状态(也不会观察 Observed)并且可以安全地对其进行 GC-ed。只有当你在某个地方的 react 中(间接地)使用它时,它才会保持活力,比如
const disposer = reaction(() => observer.double, x => console.log(x))
关于typescript - 处理 mobx @computed reactions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39465151/
我被这个问题困扰,希望任何人都可以帮助我。 脚本选择一个单词并记录单词出现和按键之间耗时( react 时间)。我的想法是有一个函数可以选择单词,将其设置为间隔,并通过按键打破该间隔。属性“stim”
我正在使用一个使用 React Data Grid ( https://github.com/adazzle/react-data-grid ) 的网格,我遇到了麻烦,因为当选择一个单元格时,它的边框
我正在尝试为算法交易安装 zipline,所以我必须为 python 3.5 版本创建一个 conda 的 venv。但是,在创建环境之后,当我激活这个环境时,没有括号。如果可行,命令行应该是这样的
我正在使用 Python GEKKO 来模拟化学 react ,可以这样描述: 1 -> 2 -> 3 -> 4 副 react 如下: 2 -> 5 3 -> 5 产物(4)是稳定的。这导致了以下一
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve t
在下面的文章中说应该处理 mobx 的 react : https://mobxjs.github.io/mobx/best/pitfalls.html 用@computed装饰器标记的属性是一种 r
我正在使用 wxToolBar,它使用带有以下代码(简化)的下拉菜单: g_toolBar1->AddTool(TOOLBAR_CMD_CONTROL_DROPDOWN,_("Control elem
我在我的 Windows 系统上用 pip 安装了 Flask 和 HTML5。当我使用 IDLE 启动 Hello World! 程序时,我在 Python-Shell 中收到一条红色消息: "*
这个问题在这里已经有了答案: What is a NullReferenceException, and how do I fix it? (27 个答案) 关闭 3 年前。 所以我正在为我的 Di
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我是 clojure 和试剂的新手。我试图生成动态数量的复选框,其状态存储在应用程序状态中,这是一个像这样的字典列表 [{:checked false, :text "Sample text 1"}
我正在尝试使用我的 Discord.js 机器人在 JavaScript 中制作一个菜单。到目前为止,一切正常,除非我应用删除消息的 react 。消息被删除,但此错误在控制台中以垃圾邮件形式出现:
我正在尝试创建一个动画,将鼠标悬停在顶部的 div 上会触发下面的 div 中的 react 。 我希望实现的是悬停在任何人身上的流动效果 在顶行将触发底行也向下推。 原始 CSS 不是我的创作,我只
我知道通过使用“超时”命令,我可以等待指定的时间;但我的问题是,如果这是一个可以被用户阻止的自动操作呢?我的意思是假设我想执行操作 A,但是通过使用“超时”命令,我会等待用户是否要取消此操作;例如,在
因此,虽然我们都知道整个复制和粘贴其他人的代码,并且神奇地工作,但在弄清楚这段代码的实际工作和功能时,它会失去一些上下文和理解。 我正在使用 Discord.py Rewrite ,以及一段名为 Re
我正在尝试制作一个 Discord.js 机器人,它将“Joueur” Angular 色添加到对 ✅ 表情符号使用react的用户。我是 JS 的新手,我在互联网上找到了 reaction.mess
我已经在 Ambari 管理中设置了一个文件浏览 View ( View - 添加 View - 文件),但是当我试图访问这个 View 时,出现以下错误: E090 HDFS030 Error in
我对此的反应是新的。我用每个开关元素创建了一个项目数组,问题是:当我单击一个项目时,所有项目都会同时激活!。我尝试了许多通过搜索找到的解决方案,但都不起作用。
我对此的反应是新的。我用每个开关元素创建了一个项目数组,问题是:当我单击一个项目时,所有项目都会同时激活!。我尝试了许多通过搜索找到的解决方案,但都不起作用。
我是一名优秀的程序员,十分优秀!