当前位置: 首页 > news >正文

什么是响应性?

响应性:

这个术语在今天的各种编程讨论中经常出现,但人们说它的时候究竟是想表达什么意思呢?本质上,响应性是一种可以使我们声明式地处理变化的编程范式。一个经常被拿来当作典型例子的用例即是 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() 函数有如下的任务:

  1. 当一个变量被读取时进行追踪。例如我们执行了表达式 A0 + A1 的计算,则 A0 和 A1 都被读取到了。
  2. 如果一个变量在当前运行的副作用中被读取了,就将该副作用设为此变量的一个订阅者。例如由于 A0 和 A1 在 update() 执行时被访问到了,则 update() 需要在第一次调用之后成为 A0 和 A1 的订阅者。
  3. 探测一个变量的变化。例如当我们给 A0 赋了一个新的值后,应该通知其所有订阅了的副作用重新执行。
http://www.lryc.cn/news/1420.html

相关文章:

  • 黑马】后台管理176-183
  • Typescript - 类型守卫(typeof / in / instanceof / 自定义类型保护的类型谓词)通俗易懂详细教程
  • 6.8 左特征向量
  • 10个自动化测试框架,测试工程师用起来
  • 城市C友会【官方牵头更多的线下交流的机会,你有怎样的期待?】
  • CSDN 编程竞赛二十七期题解
  • RMI攻击中的ServerClient相互攻击反制
  • 值类型和引用类型
  • 后端开发必懂nginx面试40问
  • Redis为什么这么快?
  • 几种实现主题切换的方式
  • Jenkins使用(代码拉取->编译构建->部署上线)
  • IEEE期刊论文投稿前期准备
  • [AAAI 2022] TransFG: A Transformer Architecture for Fine-grained Recognition
  • 机器学习之决策树原理详解、公式推导(手推)、面试问题、简单实例(python实现,sklearn调包)
  • 一文搞懂CAS实现原理——怀玉
  • typora每次复制文档都要附带图片文件夹?学会配置gitee图床
  • Linux--gdb
  • c++11 标准模板(STL)(std::multimap)(二)
  • 【数据结构】二叉排序树——平衡二叉树的调整
  • 03- pandas 数据库可视化 (数据库)
  • 第三方电容笔怎么样?开学适合买的电容笔
  • Java学习-IO流-字节输出流
  • linux性能分析 性能之巅学习笔记和内容摘录
  • 机器学习笔记之生成模型综述(三)生成模型的表示、推断、学习任务
  • 第八章 Flink集成Iceberg的DataStreamAPI、TableSQLAPI详解
  • PyTorch学习笔记:nn.Sigmoid——Sigmoid激活函数
  • 个人学习系列 - 解决拦截器操作请求参数后台无法获取
  • 【编程基础之Python】2、安装Python环境
  • Java开发 - 问君能有几多愁,Spring Boot瞅一瞅。