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

动易网站官网项目管理师

动易网站官网,项目管理师,wordpress 付费功能,wordpress禁止 逍遥前提:实际开发中,响应式对象肯定是不止一个对象的, 使用数组reactiveFns, 所有依赖的函数都放到数组里面,是满足不了多个响应式对象,使用类单独来管理一个对象所有的依赖1. 响应式依赖收集-类 1.1. 类结构:创建Depend类…

前提:实际开发中,响应式对象肯定是不止一个对象的, 使用数组reactiveFns, 所有依赖的函数都放到数组里面,是满足不了多个响应式对象,使用类单独来管理一个对象所有的依赖

1. 响应式依赖收集-类

  • 1.1. 类结构:创建Depend类来管理响应式依赖,包含reactiveFns数组存储依赖函数
  • 1.2. 核心方法:
  • addDepend(fn):添加依赖函数到数组,会先判断fn是否存在
  • notify():遍历执行所有收集的依赖函数
  • 代码如下:
	// 使用类单独来管理一个对象所有的依赖class Depend {constructor() {this.reactiveFns = [];}addDepend (fn) {if(fn) {// 将依赖函数添加到数组,this.reactiveFns.push(fn);}}notify () {this.reactiveFns.forEach(fn => {// 遍历执行所有收集的依赖函数fn()})}}
  • 1.3. 优势: 相比单一数组管理,可以针对不同对象创建独立的Depend实例,避免所有依赖混在一起
  • 1.4. 执行过程
    • 创建Depend实例:const dep = new Depend()
    • 收集依赖:通过watchFn函数调用dep.addDepend(fn)
    • 触发更新:修改属性后手动调用dep.notify()
    • 示例代码如下:
    	// 创建Depend实例const dep = new Depend()function watchFn (fn) {dep.addDepend(fn)// 传入函数后立即执行一次,类似watchEffect()fn()}// 响应式函数watchFn(function foo () {console.log('foo: ', obj.name);console.log('foo: ', obj.age);console.log('foo function');})watchFn(function bar () {console.log('bar: ', obj.name + ' hello');console.log('bar: ', obj.age + 10);console.log('bar function');})// 修改obj的属性obj.name = 'kobe'// 当依赖发生变化时,会执行对应的响应式函数dep.notify()```
    
  • 1.5. 当前问题:
  • 每次属性修改后需要手动调用dep.notify()
  • 容易遗漏导致依赖不更新
  • 多个属性变更时需要多次调用
	// 参考上面的代码...// 修改obj的属性console.log('name发生变化时----------------------------------------');obj.name = 'kobe'// 当依赖发生变化时,会执行对应的响应式函数dep.notify()// 再次修改obj的属性obj.name = 'james'// 每次手动通知,一旦忘记就不是响应式了// dep.notify()
    1. 完整代码如下:
       	// 使用类单独来管理一个对象所有的依赖class Depend {constructor() {this.reactiveFns = [];}addDepend (fn) {if(fn) {// 将依赖函数添加到数组,this.reactiveFns.push(fn);}}notify () {this.reactiveFns.forEach(fn => {// 遍历执行所有收集的依赖函数fn()})}}// 实际开发中,响应式对象肯定是不止一个对象的// 例如: // const user = { nickName: 'kobe', level: 100 }// const product = { name: '电脑', price: 1000 }// 有一个弊端,只有一个数组reactiveFns, 所有依赖的函数都放到数组里面,是满足不了多个响应式对象// 例如:一旦修改了product.name所有的响应式函数都会执行,目标是只想要执行product.name的响应式函数const obj = {name: 'why',age: 18}// 当上面有很多依赖函数时,很难收集// 设置一个专门执行响应式函数的一个函数const dep = new Depend()// obj => new Depend()// user => new Depend()// product => new Depend()function watchFn (fn) {dep.addDepend(fn)// 传入函数后立即执行一次,类似watchEffect()fn()}watchFn(function foo () {console.log('foo: ', obj.name);console.log('foo: ', obj.age);console.log('foo function');})watchFn(function bar () {console.log('bar: ', obj.name + ' hello');console.log('bar: ', obj.age + 10);console.log('bar function');})// 修改obj的属性console.log('name发生变化时----------------------------------------');obj.name = 'kobe'// 当依赖发生变化时,会执行对应的响应式函数dep.notify()// 修改obj的属性console.log('age发生变化时----------------------------------------');obj.age = 20dep.notify()console.log('name发生变化时----------------------------------------');obj.name = 'james'// 每次手动通知,一旦忘记就不是响应式了// dep.notify()```
    
  • 1.7. 后续改进:
  • 将展示如何自动创建依赖收集器
  • 实现属性变更自动通知机制
http://www.dtcms.com/wzjs/563104.html

相关文章:

  • 建设营销型网站服务有什么免费ppt模板网站
  • 小说网站模板建站品牌vi包括什么
  • 手机报价大全2021中关村如何对网站做引擎优化
  • 上海800做网站网络布局设计
  • 电子商务网站建设报价表最好看的网站设计
  • 网站模板如何制作凡客和凡客诚品一样吗
  • 欧美网站欣赏无锡前洲行业网站建设
  • 网站地图 xml html免费设计网站素材
  • 网站建设科技有限公司微信小程序怎么解绑
  • 公司网站高端网站建设东莞最新一例阳性
  • 做南美生意做什么网站好怎么查找网站后台
  • 企业培训网站建设网站seo外包
  • dede网站建设步骤优秀设计作品网站
  • 苏州建设职业培训中心网站已有域名怎么建设网站
  • wordpress异步刷新seo广告平台
  • 网站建设教的误区dede手机医院网站模板
  • 徐州开发区中学网站seo中心
  • 网站建设模版 优帮云苏州企业建设网站
  • 陵水县建设局网站做网站会遇到的问题
  • 安阳做网站的地方江西响应式网站建设哪家好
  • 廊坊网站建设设计网页排版设计的基本形式
  • 泰安毕业生档案查询做网站优化费用
  • 海外搜索引擎网站建设如何建设红色旅游网站
  • 用rp怎么做网站功能按钮免费建站模板
  • 广告设计网站排行榜前十名济南知名网站建设平台
  • 常州 网站建设成都做一个小企业网站需要多少钱
  • 信誉好的网站建设案例想要做网站的企业
  • 郑州做网站远辰网站建设制作流程
  • 网站备案 法人用什么软件可以做网站动态
  • 国外的电商网站wordpress母婴主题