autorun 和 reaction 之间的明显区别是什么以及何时使用哪个?
What are the clear differences between autorun and reaction and when to use which?
autorun
和 reaction
有什么区别?我正在寻找有助于决定何时使用哪个的完整解释。有没有可能 reaction
甚至可以触发而 autorun
不能?它们之间有什么关系?
这两个一样吗?
autorun(() => {
localStorage.setItem("current_order", JSON.stringify(this.currentOrder))
})
reaction(
() => JSON.stringify(this.currentOrder),
(json) => {
localStorage.setItem("current_order", json)
}
)
据我所知,reaction
的第一个参数将评估并检查更改,因此计算值需要它,但 autorun
不应该正常工作,如果 this.currentOrder
是可观察的吗? JSON.stringify(this.currentOrder)
在 reaction
运行 中,即使 this.currentOrder
是可观察的并且没有改变?
autorun
运行s 在初始化后立即,reaction
运行s 仅在初始化后数据表达式发生变化后。
此外,因为 reaction
运行 仅当数据表达式发生变化时,您可以在效果函数中使用其他可观察值,这对 autorun
不起作用,因为它订阅了所有可观察值你在它里面使用,这意味着 reaction
提供了更细粒度的控制。
编辑:
添加示例以使其更清楚
考虑这个例子,你有两个可观察对象 A 和 B,并且想在 A 改变时对 B 做一些事情,但不想在 B 改变时做任何事情。如果你只是 autorun
它会 运行 当任何可观察值发生变化时,所以这不是你想要的。但是使用 reaction
可以只对 A 的变化做出反应(通过仅在表达式函数中使用 A)。
autorun
和 reaction
有什么区别?我正在寻找有助于决定何时使用哪个的完整解释。有没有可能 reaction
甚至可以触发而 autorun
不能?它们之间有什么关系?
这两个一样吗?
autorun(() => {
localStorage.setItem("current_order", JSON.stringify(this.currentOrder))
})
reaction(
() => JSON.stringify(this.currentOrder),
(json) => {
localStorage.setItem("current_order", json)
}
)
据我所知,reaction
的第一个参数将评估并检查更改,因此计算值需要它,但 autorun
不应该正常工作,如果 this.currentOrder
是可观察的吗? JSON.stringify(this.currentOrder)
在 reaction
运行 中,即使 this.currentOrder
是可观察的并且没有改变?
autorun
运行s 在初始化后立即,reaction
运行s 仅在初始化后数据表达式发生变化后。
此外,因为 reaction
运行 仅当数据表达式发生变化时,您可以在效果函数中使用其他可观察值,这对 autorun
不起作用,因为它订阅了所有可观察值你在它里面使用,这意味着 reaction
提供了更细粒度的控制。
编辑:
添加示例以使其更清楚
考虑这个例子,你有两个可观察对象 A 和 B,并且想在 A 改变时对 B 做一些事情,但不想在 B 改变时做任何事情。如果你只是 autorun
它会 运行 当任何可观察值发生变化时,所以这不是你想要的。但是使用 reaction
可以只对 A 的变化做出反应(通过仅在表达式函数中使用 A)。