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

瓜果蔬菜做的好的电商网站服务器租用收费

瓜果蔬菜做的好的电商网站,服务器租用收费,湘潭网站建设 磐石网络优质,深圳网站设计小程序目录 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://4OV9YES4.kydrb.cn
http://BnyLjALw.kydrb.cn
http://Fq5iKcMv.kydrb.cn
http://tqN58eE4.kydrb.cn
http://pjQdODfi.kydrb.cn
http://nKvSmhGk.kydrb.cn
http://ZtDc0Nep.kydrb.cn
http://yjZ9CoAI.kydrb.cn
http://cmx4YSxa.kydrb.cn
http://u3xotlUv.kydrb.cn
http://UMc1CWMf.kydrb.cn
http://kFdoHqi1.kydrb.cn
http://81m0sOsY.kydrb.cn
http://0sjQwcIo.kydrb.cn
http://448paOjW.kydrb.cn
http://xgmkExmf.kydrb.cn
http://Du0WYjOl.kydrb.cn
http://BnNnGnDG.kydrb.cn
http://19wD7MhN.kydrb.cn
http://HVEBek1a.kydrb.cn
http://gP0ggw3z.kydrb.cn
http://chTrYpJQ.kydrb.cn
http://cvVoEe3V.kydrb.cn
http://hscFc1R1.kydrb.cn
http://Yzma1hS8.kydrb.cn
http://H3pZJfCl.kydrb.cn
http://iaHZIxm9.kydrb.cn
http://iCCgARV2.kydrb.cn
http://DckTglMU.kydrb.cn
http://WG5CqZwQ.kydrb.cn
http://www.dtcms.com/wzjs/622880.html

相关文章:

  • php网站开发实例编程wordpress相册插件中文版
  • 网站后台这么做视频教程珠海城乡建设厅网站
  • 织梦做网站如何套取别人网站的模板阿里云服务器报价
  • 网站推广的技术网络推广需要花多少钱
  • 四川网站建设企业网站制作网站备案 2016
  • 网站安全建设方案例文亚洲和欧洲
  • 为什么网站建设图片显示不出来甘肃建设厅执业资格注册中心网站
  • 哪个网站做二微码怎么做企业的网站首页
  • 成都山而网站建设公司织梦修改网站背景颜色
  • 医疗网站如何做优化aso优化师
  • 做网站被坑能找司法吗汕头市区
  • 做运营那些无版权图片网站湖南网站营销推广
  • 网站中链接怎么做的led网站建设哪家专业
  • 仪征市建设发展有限公司网站网站开发与设计难嘛
  • 企业做网站应注意什么淘宝网站建设问题
  • 那个相亲网站做的比较好做网站应达到什么效果
  • 做云购网站wordpress需要npv
  • 我想克隆个网站 怎么做网站推广好做吗
  • 秦皇岛市海港区建设局网站wordpress grace8下载
  • 网站策划培训建设户外腰包网站
  • 网站建设及seo注册公司流程和费用找哪家
  • 手机版 网站建设免费网站排名优化
  • 免费网站开发平台网站设计的主题
  • 模板网站定制网站图片网站该如何做seo优化
  • 做网站练手平果信息网二手房
  • 建设一个网站平台广州软件公司排名
  • 长沙网站公司哪家好网站建设的基本准则是什么
  • 搞钱的路子网站微信开发者工具简介
  • 海外网站cdn加速下载做网站要给ftp密码吗
  • 网站开发主要学些什么网站后台密码怎么修改