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

济南php网站开发市场研究公司

济南php网站开发,市场研究公司,基于搜索引擎的网站推广方式,做动态图的网站如存在三元运算符时,怎么处理 // 原始数据 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.15wanjia.com/news/186246.html

相关文章:

  • 建设一个网站用什么软件网站设计编程有哪些
  • 安阳市建设安全监督站网站做网站切图是什么意思
  • 桐城网站设计营销做网站公司
  • 网站做全景图广东东莞属于哪个市
  • 律师个人网站有用吗mip改造wordpress
  • 汉中市建设局网站佛山企业网站建设机构
  • 网站建设 中企动力南昌0792wordpress 文章备份
  • 40万用户自助建站wordpress文章统计
  • 网站名称备案什么叫网站权重
  • 山西官方网站有哪些海南城乡和住房建设厅网站
  • 建设wap网站企业自己做网站方法
  • wordpress添加子站canva在线设计平台
  • 建站公司 网络服务传统网站网站
  • 长辛店镇网站建设做炭化料的网站
  • 做本地网站怎么挣钱苏州策划网站模板建站公司
  • 南京建站公司模板免费做网站app
  • 做招聘网站需要什么有道云笔记 wordpress
  • 宁晋做网站山西制作网站
  • 网站平台规划方案求网址直接能看的2021
  • 网站建设 网页php网站开发实战视频教程
  • 网站免费备案凡科互动网站
  • 如何用网站赚钱微信app下载安装官方版2023
  • 制作个网站大概多少钱网络运营商
  • 小说网站开发技术实现淄博著名网站开发方法
  • html5导航网站网上开店基本流程
  • 网站设计策划书网架公司需要给设计院提交的资料
  • 好的活动策划网站电商网站怎么做seo优化
  • 网站上的图标用什么软件做的重庆做的好的房产网站
  • ddns做网站电子商务网站建设的盈利模式
  • 如何提高网站浏览量火车头 wordpress xml