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

济阳做网站多少钱如何开发网站

济阳做网站多少钱,如何开发网站,做家政建网站,东莞做网站要多少钱如存在三元运算符时,怎么处理 // 原始数据 const data { text: hello world,ok:true}// 副作用函数存在三元运算符 effect(function effectFn(){document.body.innerText obj.ok ? obj.text : not })// 理解如此,obj.ok和obj.text都会绑定effectFn函…

如存在三元运算符时,怎么处理

// 原始数据
const data = { text: 'hello world',ok:true}// 副作用函数存在三元运算符
effect(function effectFn(){document.body.innerText = obj.ok ? obj.text : 'not'
})// 理解如此,obj.ok和obj.text都会绑定effectFn函数,所以不管obj.ok 是true还是false ,obj.text值改变都会执行effectFn副作用函数,然而当obj.ok为false时,obj.text值无论怎么改变,都不应该执行effectFn副作用函数。
解决方案:每次执行副作用 函数,可以先把它从所有与之关联的依赖集合中删除。当副作用函数执行完后,会重新建立关系。
// 用一个全局变量储存被注册的副作用函数
let activeEffect// effect 函数用于注册副作用函数
function effect(fn){// 当 effectFn 执行时,将其设置为当前激活的副作用函数const effectFn = ()=>{// 调用cleanup完成清除工作cleanup(effectFn)// 当调用effect注册副作用函数时,将副作用函数fn赋值给activeEffectactiveEffect = effectFn// 执行副作用函数fn()}// activeEffect.deps 用来存储所有与被副作用函数相关的依赖集合effectFn.deps = []// 执行副作用函数effectFn()
}// 清除工作
function cleanup(effectFn){// 遍历`effectFn.deps 数组for(let i=0; i< effectFn.deps.length; i++){// deps 是依赖集合const deps = effectFn.deps[i]// 将 effectFn 从依赖集合中移除deps.delete(effectFn)}// 最后需要重置 effectFn.deeps 数组effectFn.deps.length = 0
}// 储存副作用函数的桶
const bucket = new WeakMap()// 原始数据
const data = { text: 'hello world',ok:true}// 对原始数据的代理
const obj = new Proxy(data,{// 拦截读取操作get(target,key){track(target,key)// 返回属性值return target[key]},// 拦截设置操作set(target,key,newValue){console.log('bucket:',bucket)// 设置属性值target[key] = newValuetrigger(target,key)return true}
})// 在 get 拦截函数内调用 track 函数追踪变化
function track(target,key){// 没有 activeEffect 直接 returnif(!activeEffect) return target[key]// 根据 target 从 “桶” 中 取得 depsMap,它也是一个map 类型 key --》effectslet depsMap = bucket.get(target)// 如果不存在 depsMap 那么新建一个Map 并与 target 关联if(!depsMap){bucket.set(target,(depsMap = new Map()))}// 再根据 key 从 depsMap 中取得 deps,它是一个 set 类型// 里面储存着所有与当前key 相关联的副作用函数,effectslet deps = depsMap.get(key)// 如果 deps 不存在 同样新建一个set 并与 key 关联if(!deps){depsMap.set(key,(deps = new Set()))}// 最后将当前激活的副作用函数添加到“桶”deps.add(activeEffect)// deps 就是一个与当前副作用函数存在关联的依赖集合// 将其添加到activeEffect.deps 数组中activeEffect.deps.push(deps)  // 新增
}
// 在 set 拦截函数内调用 trigger 函数 触发变化
function trigger(target,key){// 根据 target 从桶中取得 depsMap,它是key --》effectsconst depsMap = bucket.get(target)if(!depsMap) return true// 根据 key 取得所有副作用函数 effectsconst effects = depsMap.get(key)// new Set 是为了防止 effectFn 执行时,进行无限的循环const effectsToRun = new Set(effects)effectsToRun.forEach(effectFn => effectFn())// 执行副作用函数// effects && effects.forEach(fn => fn())
}// 执行副作用函数,触发读取
effect(function effectFn(){document.body.innerText = obj.ok ? obj.text : 'not'
})// 1 秒后修改响应式数据
setTimeout(()=>{obj.text = 'hello vue3'
},1000)setTimeout(()=>{obj.ok = false
},3000)
http://www.ritt.cn/news/16168.html

相关文章:

  • 南阳微网站南昌网站seo外包服务
  • 了解深圳最好的网站西安seo排名收费
  • 官方网站找做化妆品套盒子百度推广客户端下载网址
  • 南京网站改版近日网站收录查询
  • 住房城乡建设部官方网站如何对网站进行推广
  • 金华电子商务网站建设网络销售都是诈骗公司吗
  • 临沂专业做网站长沙做网站推广公司咨询
  • 品牌商城网站建设谷歌seo外链
  • 济南软件网站建设备案域名查询
  • 学校网站在哪里找微信软文模板
  • 中山市建设信息网站苏州网站优化公司
  • 自己网站上做支付宝怎么收费的山西seo关键词优化软件搜索
  • 武汉网络推广技巧seo博客教程
  • 内蒙古做网站的公司免费广告推广
  • wordpress建站 防攻击今天大事件新闻
  • 钉钉小程序开发seo优化排名经验
  • 网站建设购买数据库的流程网络营销与直播电商专升本
  • 做服装的外贸网站完整的品牌推广方案
  • 3000元做网站婚恋网站排名前三
  • 自适应网站会影响推广小广告模板
  • 没有网站可以做seo排名吗搜索优化seo
  • cms建站系统 javawin11优化大师
  • 西宁网站建设官网正规拉新推广平台有哪些
  • 兴海县网站建设公司网络推广的方法和技巧
  • qq网站官网黑帽seo培训多少钱
  • 南京市雨花台区建设局网站百度关键词优化大师
  • 深圳企业网站开发公司优秀的网页设计网站
  • 产品开发流程图模板保定百度seo排名
  • 做网站套路知乎推广
  • 韩国美食做视频网站有哪些网店推广方法