广东网站制作多少钱,珠海集团网站建设外包,网站制作哪个好薇,厦门自助网站建设报价响应性#xff1a;
这个术语在今天的各种编程讨论中经常出现#xff0c;但人们说它的时候究竟是想表达什么意思呢#xff1f;本质上#xff0c;响应性是一种可以使我们声明式地处理变化的编程范式。一个经常被拿来当作典型例子的用例即是 Excel 表格#xff1a; 这里单元…响应性
这个术语在今天的各种编程讨论中经常出现但人们说它的时候究竟是想表达什么意思呢本质上响应性是一种可以使我们声明式地处理变化的编程范式。一个经常被拿来当作典型例子的用例即是 Excel 表格 这里单元格 A2 中的值是通过公式 A0 A1 来定义的 (你可以在 A2 上点击来查看或编辑该公式)因此最终得到的值为 3正如所料。但如果你试着更改 A0 或 A1你会注意到 A2 也随即自动更新了。 而 JavaScript 默认并不是这样的。如果我们用 JavaScript 写类似的逻辑
非响应性代码块
let A0 1
let A1 2
let A2 A0 A1console.log(A2) // 3A0 2
console.log(A2) // 仍然是 3
当我们更改 A0 后A2 不会自动更新。 那么我们如何在 JavaScript 中做到这一点呢首先为了能重新运行计算的代码来更新 A2我们需要将其包装为一个函数
let A2function update() {A2 A0 A1
}然后我们需要定义几个术语 ● 这个 update() 函数会产生一个副作用或者就简称为作用 (effect)因为它会更改程序里的状态。 ● A0 和 A1 被视为这个作用的依赖 (dependency)因为它们的值被用来执行这个作用。因此这次作用也可以说是一个它依赖的订阅者 (subscriber)。 我们需要一个魔法函数能够在 A0 或 A1 (这两个依赖) 变化时调用 update() (产生作用)。
whenDepsChange(update)这个 whenDepsChange() 函数有如下的任务
当一个变量被读取时进行追踪。例如我们执行了表达式 A0 A1 的计算则 A0 和 A1 都被读取到了。如果一个变量在当前运行的副作用中被读取了就将该副作用设为此变量的一个订阅者。例如由于 A0 和 A1 在 update() 执行时被访问到了则 update() 需要在第一次调用之后成为 A0 和 A1 的订阅者。探测一个变量的变化。例如当我们给 A0 赋了一个新的值后应该通知其所有订阅了的副作用重新执行。