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

武昌做网站公司推荐滨州网站seo

武昌做网站公司推荐,滨州网站seo,备案网站主办者承诺书,一学一做腾讯视频网站4.7 watch 的实现原理 watch本质上就是使用了effect以及options.scheduler 定义watch函数: // watch函数:传入参数source以及回调函数function watch(source , cb) {effect(() > source.foo,{scheduler(){// 回调函数cb()}})}watch接收两个参数分别是source和c…

4.7 watch 的实现原理

watch本质上就是使用了effect以及options.scheduler

定义watch函数:

  // watch函数:传入参数source以及回调函数function watch(source , cb) {effect(() => source.foo,{scheduler(){// 回调函数cb()}})}

watch接收两个参数分别是source和cb

  • source 是一个对象,我们希望监听它的 foo 属性的变化。
  • cb 是一个回调函数,当 source.foo 发生变化时,这个回调函数会被执行。

watch的使用:

    // 使用watch函数watch(obj , () => {console.log('值发生改变')})// 修改响应数据的值,导致回调函数执行obj.foo++

值发生改变

**改为更加通用:**除了foo发生改变,其他的发生改变也可以

修改思路:使用函数对传入的对象循环读取,traverse函数:传入对象以及一个set集合(存储已经访问过的),判断类型,类型过关就进行遍历。

    // traverse:值以及读取放入的setfunction traverse(value , seen = new Set){// 如果要读取的数据是原始值,或者已经读取过了,那么什么都不做if(typeof value !== 'object' || value === null || seen.has(value)){return;}// 暂时仅考虑value是一个对象,遍历valuefor(const k in value){traverse(value[k] , seen);}}// watch函数:传入参数source以及回调函数function watch(source , cb) {effect(// traverse() => traverse(source),{scheduler(){// 回调函数cb()}})}

壮大watch—getter函数:

修改思路:定义一个getter,如果source是函数类型直接使用getter函数,如果不是则递归调取

    // watch函数:传入参数source以及回调函数function watch(source , cb) {// 定义getterlet getter if(typeof source === 'function'){getter = source}else {getter = () => traverse(source)}effect(() => getter(),{scheduler(){// 回调函数cb()}})}

重要功能—新旧值

修改思路:这时候要拿到effect的返回参数,返回参数就是oldval,最核心的改动就是添加了懒加载lazy创建了一个懒加载effect,需要的时候才会执行,在值发生改变时,更新新值和旧值

    // watch函数:传入参数source以及回调函数function watch(source , cb) {// 定义getterlet getter if(typeof source === 'function'){getter = source}else {getter = () => traverse(source)}// 定义新旧值let newVal , oldValconst effectFn = effect(() => getter(),{lazy: true,scheduler(){// 值发生改变会发生,此时就有新值了newVal = effectFn()// 回调函数,传入新旧值cb(oldVal , newVal)// 一定要记得更新旧值oldVal = newVal}})// 调用effectFn就是旧值oldVal = effectFn();}

source以及回调函数
function watch(source , cb) {
effect(
// traverse
() => traverse(source),
{
scheduler(){
// 回调函数
cb()
}
}
)
}


**壮大watch---getter函数:**修改思路:定义一个getter,如果source是函数类型直接使用getter函数,如果不是则递归调取
// watch函数:传入参数source以及回调函数
function watch(source , cb) {// 定义getterlet getter if(typeof source === 'function'){getter = source}else {getter = () => traverse(source)}effect(() => getter(),{scheduler(){// 回调函数cb()}})
}

**重要功能---新旧值**修改思路:这时候要拿到effect的返回参数,返回参数就是oldval,最核心的改动就是添加了懒加载lazy创建了一个懒加载effect,需要的时候才会执行,在值发生改变时,更新新值和旧值
// watch函数:传入参数source以及回调函数
function watch(source , cb) {// 定义getterlet getter if(typeof source === 'function'){getter = source}else {getter = () => traverse(source)}// 定义新旧值let newVal , oldValconst effectFn = effect(() => getter(),{lazy: true,scheduler(){// 值发生改变会发生,此时就有新值了newVal = effectFn()// 回调函数,传入新旧值cb(oldVal , newVal)// 一定要记得更新旧值oldVal = newVal}})// 调用effectFn就是旧值oldVal = effectFn();
}

http://www.dtcms.com/wzjs/437818.html

相关文章:

  • 市住房城乡建设部网站如何快速被百度收录
  • 小程序免费制作平台登录西安seo优化工作室
  • 做网站怎么分手机版和电脑版百度正版下载
  • 山东省通信管理局 对于经营性网站的认定开网站需要什么流程
  • wordpress iot关键词排名优化易下拉霸屏
  • seo排名软件怎么做做seo排名
  • 沈阳做网站公司新区快速seo排名
  • 怎样做酒店网站ppt模板网站推广该怎么做
  • kn95口罩惠州seo招聘
  • 自己建设网站需要什么手续杭州网站seo外包
  • 做图网站如何创建网站站点
  • 公司的网站建设费做什么费用职业技能培训机构
  • 手机端网站怎么做苏州seo网站公司
  • 网站建设与管理教学大纲微信怎么推广找客源
  • seo如何优化网站推广智慧教育
  • 最新网站建设合同360网站推广费用
  • 东莞建设网官方网站广州快速排名
  • 江苏建站管理系统开发世界足球排名
  • 常州网站建设乛薇郴州网站seo外包
  • 网站建设分几模块河南省郑州市金水区
  • 网站的建设参考文献国际新闻快报
  • 网站底部显示百度站点地图河南纯手工seo
  • 在线看视频网站怎么做的北京网站建设公司大全
  • 建设企业网站需要用营业执照么滨州seo排名
  • 如何做视频网站的会员代理网上销售平台怎么做
  • 网站建设公司怎么做业务大连seo关键词排名
  • 乌市做网站的公司免费的行情网站app
  • 哪些网站可以做调查赚钱百度问答官网
  • 长沙网站建站推广网页开发
  • 手机微网站怎么做引流推广网站平台