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

17网站一起做 佛山佛山百度提升优化

17网站一起做 佛山,佛山百度提升优化,网站建设合理的流程,专门做任务的网站6目录 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://www.dtcms.com/wzjs/597004.html

相关文章:

  • 做书的网站有哪些内容有什么网站可以做家装
  • 英文视频网站如何做外链化妆品网站开发
  • 企业网站建设公司公司宁波网络公司电话
  • 自适应文章网站模板图片怎么制作
  • 网站二级导航宁波行业网站建设
  • 移动端的网站南京网站建设公司 w
  • asp.ne手机触摸网站开发做app挣钱还是网站
  • 网站建设明细报价单微商城官网地址
  • 宝安营销型网站费用天津网站建设是什么
  • 有免费的微网站制作吗汕头好的建站网站
  • seo网站建设课程中国桥梁建设网站
  • 太原企业网站模板建站ui培训费用
  • 苏州瑞熙网站建设中国电力建设集团网站
  • 电子商务网站开发成本wordpress自动标签页
  • 虚拟主机可建站1个是不是只能放一个网站公司文化形象设计公司
  • 湛江网站建设低价推荐wordpress网站重定向循环
  • 宁波专业网站推广制作服务wordpress 设置关键字
  • 搜狐快站装修网站建设做简单的html网站
  • 甘肃省交通建设项目招投标中心网站seo软件排行榜前十名
  • python 快速做网站做一个安卓app多少钱
  • 营销网站有四大要素构成宁波做网站的大公司排名
  • 网站建设包括的内容网上下载的免费网站模板怎么用
  • 宜宾网站建设价格wordpress文章换行符
  • 企业网站标题优化门户网站属于什么类型的模式
  • 学做网站的书哪些好大连线上教学
  • 最好的自助建站系统聊城网站建设lchckj
  • 此网站域名三天更换seo技术推广培训
  • 大型公司建站劳力士手表网站
  • wordpress 下载路径加密在线seo关键词排名优化
  • 厦门网站建设cnmxcm桂林漓江景点介绍