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

教人做甜品的网站wordpress熊掌号出图

教人做甜品的网站,wordpress熊掌号出图,页面做的比较炫酷的网站,西安公司网站制作要多少钱目录 5.4 合理触发响应 5.5 浅响应与深响应 5.6 只读和浅只读 5.4 合理触发响应 为了合理触发响应,我们需要处理一些问题。 首先,当值没有变化时,我们不应该触发响应: const obj = { foo: 1 } const p = new Proxy(obj, { /* ... */ })effect(() => {console.log(p…

目录

5.4 合理触发响应

5.5 浅响应与深响应

5.6 只读和浅只读


5.4 合理触发响应

为了合理触发响应,我们需要处理一些问题。

首先,当值没有变化时,我们不应该触发响应:

const obj = { foo: 1 }
const p = new Proxy(obj, { /* ... */ })effect(() => {console.log(p.foo)
})// 设置 p.foo 的值,但值没有变化
p.foo = 1
 

上述代码,p.foo 的初始值为 1,当为 p.foo 设置新的值时,如果值没有发生变化,则不需要触发响应。
为了满足需求,在调用 trigger 函数触发响应之前,我们需要检查值是否发生了变化

const p = new Proxy(obj, {set(target, key, newVal, receiver) {// 先获取旧值const oldVal = target[key]const type = Object.prototype.hasOwnProperty.call(target, key) ? 'SET' : 'ADD'const res = Reflect.set(target, key, newVal, receiver)// 比较新值与旧值,只要当不全等的时候才触发响应if (oldVal !== newVal) {trigger(target, key, type)}return res}
})

在 set 函数内,先获取旧值 oldVal,比较新旧值,只有不全等时才触发响应。
但是,全等比较对 NaN 的处理有缺陷,因为 NaN === NaN 返回 false,为了解决这个问题,需要加一个条件:

const p = new Proxy(obj, {set(target, key, newVal, receiver) {// 先获取旧值const oldVal = target[key]const type = Object.prototype.hasOwnProperty.call(target, key) ? 'SET' : 'ADD'const res = Reflect.set(target, key, newVal, receiver)// 比较新值与旧值,只有当它们不全等,并且不都是 NaN 的时候才触发响应if (oldVal !== newVal && (oldVal === oldVal || newVal === newVal)) {trigger(target, key, type)}return res}
})

现在,我们已经解决了对 NaN 的处理问题。当新旧值不全等且不都是 NaN 时,才触发响应。

我们还需要处理从原型上继承属性的情况。首先,我们封装一个 reactive 函数,接受一个对象作为参数,返回创建的响应式数据:

function reactive(obj) {return new Proxy(obj, {// 省略拦截函数})
}

接下来,创建一个例子:

const obj = {}
const child = reactive(obj)
const proto = { bar: 1 }
const parent = reactive(proto)
// 使用 parent 作为 child 的原型
Object.setPrototypeOf(child, parent)effect(() => {console.log(child.bar) // 1
})
// 修改 child.bar 的值
child.bar = 2 // 会导致副作用函数重新执行两次

在这个例子中,我们创建了两个响应式对象 child 和 parent,并将 parent 设置为 child 的原型。
在副作用函数中访问 child.bar 时,值是从原型上继承的。当我们执行 child.bar = 2 时,副作用函数会执行两次,导致不必要的更新。
我们分析下整个过程,访问 child.bar 时,触发 child 代理对象的 get 拦截函数。在拦截函数中,引擎使用 Reflect.get(target, key, receiver) 得到结果。如果对象自身


文章转载自:

http://i7du7Kdk.sfzwm.cn
http://GgMONRiA.sfzwm.cn
http://OckXDyn7.sfzwm.cn
http://Qlw3g39R.sfzwm.cn
http://A0DDpb7R.sfzwm.cn
http://BshOXW0V.sfzwm.cn
http://Cr8NO1Sz.sfzwm.cn
http://gS8wIgXo.sfzwm.cn
http://wAYHktzK.sfzwm.cn
http://0HEIpqIf.sfzwm.cn
http://puflLUPw.sfzwm.cn
http://8pgVTrkF.sfzwm.cn
http://WUMmDItg.sfzwm.cn
http://ByhlZ978.sfzwm.cn
http://41DlSpW0.sfzwm.cn
http://S7PqvSFW.sfzwm.cn
http://9g7cp8hW.sfzwm.cn
http://nlAkslXm.sfzwm.cn
http://BjCewTdT.sfzwm.cn
http://RCAxZYKX.sfzwm.cn
http://OJX62cnT.sfzwm.cn
http://zvvKrpFn.sfzwm.cn
http://ud0dT4jy.sfzwm.cn
http://VkJ9r8Dj.sfzwm.cn
http://JMF4bfv4.sfzwm.cn
http://ocFDVjPv.sfzwm.cn
http://BBiCPFZ0.sfzwm.cn
http://UcjpHmSk.sfzwm.cn
http://Rj87yWyj.sfzwm.cn
http://ruO5wAFY.sfzwm.cn
http://www.dtcms.com/wzjs/747389.html

相关文章:

  • 锦州网站建设更好佛山网上注册公司流程
  • 织梦大气金融类通用企业网站模板自己做网站的步骤
  • 做婚姻介绍网站赚钱吗wordpress小商城
  • 微商城网站建设推广手机网站建设制作教程
  • 沈阳建设网站沈阳做网站公司有哪些
  • 如何编写网站开发文档淮北网络推广
  • 比较好的建站系统学校网站建设钉钉
  • 毕设代做的网站wordpress首部如何添加自定义代码
  • 网站广告的图片怎么做wordpress在线翻译
  • 网站制作公司起名建设银行衡阳市分行网站
  • 网站负责人 备案导视设计案例
  • 南京免费发布信息网站免费制作音乐的软件app
  • 汕头做网站北京双诚建设监理公司网站
  • 重庆承越网站建设地址帮别人制作wordpress赚钱吗
  • 重庆建设技术发展中心网站泉港区规划建设局网站
  • php做的网站后台wordpress editor.md
  • 网站制作 郑州做暧暧网站在线看
  • 如何做网站域名备案石家庄无极网站建设
  • 在互联网上建设网站可选择的方案有wordpress 做网课网站
  • 郑州网站制作公司名单wordpress关于
  • 网站建设的调查问卷百度网站排名提升工具
  • 洛阳做网站的公司wordpress 编辑器模板
  • 下载源码就能建网站吗本地网站源码
  • asp.net mysql 网站开发如何建立免费的网站
  • 洮南网站建设哪家专业利用模板如何制作网站
  • 求个没封的w站2022动漫设计工作室网站宣传片制作
  • 网站公司名称大全南昌大型网站建设公司
  • 广州金融网站设计wordpress 主题学习
  • 利用vs做网站网站建设课程
  • 不懂编程如何做网站网站建设的人员预期