vue双向数据绑定原理1--前置知识点reduce、发布订阅模式

前端面试题汇总 总结了一下之前面试遇到的问题,方便自己也方便他人 阅读详情

一.前置知识点

1.reduce数组方法。

    该方法接受一个回调函数和初始值,会循环当前的数组,一般用于数组的循环累加操作,每一次的循环操作依赖上一次的返回值。

回调函数内包含两个参数,第一个是上次循环的结果,第二个是当前循环的项,第一次循环的lastval是传入的初始值。

const arr = [3,5,21,22,55,241,123]

const result = arr.reduce((lastval, item) => { return lastval+item },0)

console.log(result);

//输出结果
470

2.通过reduce方法链式获取对象属性。

   在vue中,data里面包含的数据常常是层层嵌套的,我们拿到的一般是其字符串形式:

const obj = {
  name:'cloudgaps',
  info: {
    address:{
      location:'changsha'
    }
  }
}

const attstr = 'info.address.location'
const result =  attstr.split('.').reduce((Newobj,key) =>{return Newobj[key]},obj)

console.log(result);

//输出结果
changsha

3.发布订阅模式

1.dep类,负责进行依赖收集。

2.watch类,负责订阅一些事件。

  简单的说就是dep类将watch类的订阅(函数方法)进行收集,集中进行存入一个数组,到时候dep再进行订阅发布,触发订阅,此时,watch类会收到通知。

  dep里有两个方法,一个是向数组里添加订阅,一个是循环数组内的来触发数组中的每个订阅信息。

简单实现发布订阅模式

class Dep {
  constructor(){
    // 存放订阅信息
    this.subs = []
  }
  // 添加订阅信息
  addSub(watcher){
    this.subs.push(watcher)
  }
  // 发布订阅 触发watcher类身上的update通知
  notify(){
    this.subs.forEach(item =>
      item.update())
  }
}

class Watcher {
  // 接收一个回调并挂载到自身
  constructor(cb){
    this.cb = cb
  }
  // 触发回调 当dep类触发所有实例的update方法时,watch类就会收到通知
  // 订阅者本很并不知道什么时候进行数据更新,这就相当于给dep类的联系方式
  // dep类可以通过这个方式来通知watch类进行更新
  update(){
    this.cb()
  }
}
const w1 = new Watcher( ()=>{
  console.log('我是第1个订阅')
})
const w2 = new Watcher( ()=>{
  console.log('我是第2个订阅')
})

// 实例化dep类 收集watcher实例并触发通知
const dep = new Dep()
dep.addSub(w1)
dep.addSub(w2)
dep.notify()

//打印结果
我是第1个订阅
我是第2个订阅

当我们在vue中为data重新赋值时,这个赋值的动作就会被vue监听到,然后vue会把数据的变化通知给每个订阅者(dom元素),接下来订阅者(dom元素)就会根据最新的值来重新渲染页面。CB回调内就是拿到最新数据并更新的具体逻辑。

SCADA|KIO程序导出变量错误处理办法 雷工在使用KingSCADA3.52软件导出KIO变量时,遇到导出Excel格式文件报错的问题,错误提示为“ADODB.Connection未找到提供程序”。经过咨询技术人员,发现该功能需要安装Office软件,并与已安装的WPS软件兼容。雷工随后安装了Office2021版本,并进行了兼容性设置。安装过程中遇到无法启动的问题,通过删除安装目录、清理注册表、使用卸载软件和重启电脑等方法解决。安装完成后,雷工在WPS中设置了与Microsoft Office2003兼容的模式,最终成功解决了导出变量时的问题。 阅读详情

相关推荐

PaddleOCR实战:从零开始打造专属OCR模型的完整指南

本文提供了一份从零开始使用PaddleOCR打造专属OCR模型的完整实战指南。内容涵盖环境搭建、数据标注与准备、模型训练与调优,以及最终的模型转换与部署。重点介绍了如何利用PaddleOCR进行模型训练,并整合PPOCRLabel等工具高效准备数据集,帮助开发者快速构建适用于特定场景的高精度OCR识别能力。

rl6adventurer的博客 733

Vue es6常见操作(主要reduce)

【代码】Vue es6常见操作(主要reduce)

weixin_41987908的博客 9339

FreeRTOS OTA实战:从Bootloader设计到安全升级的完整流程(附MQTT示例代码)

本文详细介绍了在FreeRTOS系统中实现安全OTA固件升级的完整流程。内容涵盖从Bootloader设计、存储分区规划到与MQTT协议集成的OTA Agent任务开发,并重点解析了固件签名验证、防回滚等关键安全机制,为嵌入式物联网设备提供了一套高可靠性的远程升级解决方案。

weixin_29248653的博客 161

vue2学习:reduce方法和computed计算属性用法

第一个参数是一个回调函数,函数第一个参数是汇总起来的最终值,默认是集合的第一项,函数第二个参数是集合遍历出来的集合元素;跟data,methods同级,语法跟methods一样,但是不是方法是属性,因此在页面结构中取值是{{方法名}}computed计算属性可以计算data中的值,并随着data中数据的改变自动重新计算值。reduce可以遍历集合并将集合所有的值汇总为一个。第二个参数可以指定回调函数中第一个参数汇总值的默认值。

weixin_51930617的博客 2473

基于JavaFX的Http Server模拟器

源码地址 GitHub - DayRain/http-server-simulator: http server 模拟器 功能描述 HttpServer模拟器,通过简单的配置即可模拟第三方服务端,用于接收和响应HTTP请求。 支持同时模拟多个服务、动态添加接口、动态配置返回值。 使用说明 运行 exe运行 编译代码后,点击exe直接运行 代码运行 下载好代码后,运行主类ApplicationStarter即可 新建服务 主界面如下 点击 文件-新建 创建新的服务 ...

小楼夜听雨的博客 2534

DB文件在编程中的作用及示例代码

通过使用DB文件,我们可以实现数据的持久化存储,并能够高效地进行数据的增删改查操作。在本文中,我们以SQLite数据库为例,演示了如何使用Python语言创建和操作DB文件的示例代码。在实际的编程中,我们可以根据具体的需求和使用的数据库系统来进行更复杂的操作和优化。通过使用DB文件,我们可以实现数据的持久化存储,确保数据在程序关闭后也能被保留,并且能够高效地进行数据检索和更新。在本文中,我们将探讨DB文件的作用,并提供一些示例代码展示如何在编程中使用DB文件。上述代码中,我们使用SQLite提供的。

CodeSpark的博客 1821

3.vue--------reduce属性的使用--------vue知识积累

数组名.reduce((pre,current) => {},参数2)当一个值受其他值影响的时候,就会将这个值写在计算属性当中。​ pre:上次执行该方法的返回值。​ current:数据项。存放属性(以函数的形式)有效缓存效果:只执行一次。

飞翔༒之翼 1954

【YOLOv8-pose姿态识别部署至RK3588:模型训练到RKNN落地,让人体姿态分析精度与边缘推理速度双突破】

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 329

Vue中,filter、map、reduce的用法

数组 let newArr=[10,20,40,50],把数组中的每个元素*2,再添加到新的数组中。使用reduce必须要传入这几个参数,一个回调函数和一个初始化值。数组 let new2Arr=[20,40,80,100]是数组中第一个元素,n数组是第二个元素。循环数组:求和(每个元素单独操作/判断,并返回结果);reduce也会遍历数组,当没有传入初始值时,第一个。遍历数组:查询数组,查询数组的指定的值(>,<,=)map函数会将回调函数返回的值作为新值传入到新数组中。将是数组中的第一个元素。

CjiangN的博客 2453

PreScan快速入门到精通第二十一讲驾驶员模型之驾驶员在环

请注意,操纵杆的输出角度是以度为单位的,而方向盘执行器希望其输入是以弧度为单位的。当选择一个支持的方向盘时,PreScan会自动将按钮映射到正确的功能上(如换挡),并设置轴的正确范围(如转向角度)。该系统中的所有其他组件都是为了提供正确的按钮映射,并为所选的方向盘设置正确的范围。对于每一个额外连接的控制器,它们的ID会增加一个,例如第二个控制器的设备ID为1,第三个控制器的设备ID为2,等等。由于所有的方向盘最初放在编译表上的设备ID都是0,所以用户应该先进行正确的调整,将每个控制器设置为正确的设备ID。.

小明师兄的博客 1423

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题

国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题

无名何许人的博客 2438

vue快速入门(十四)reduce求和

注释很详细,直接上代码……

https://github.com/amoorzheyu 1340

捷联惯导,其实没有你想象的那么复杂!(附:惯导嵌入式应用中需要的一些C代码)

摘要:捷联惯导系统将惯性测量单元固连于运动载体,通过核心算法实现导航解算。系统首先进行传感器误差补偿和初始对准,然后利用陀螺和加速度计数据,通过姿态更新算法(如四元数法)计算载体相对于地理系的姿态。加速度数据经比力方程转换后积分得到速度和位置,过程中需补偿圆锥误差和划船效应。捷联惯导通过数字平台替代物理平台,实现了载体坐标系与导航坐标系的实时转换,是当前惯性导航系统的主流方案。

victoryqian528的博客 270

Vue双向数据绑定原理

当一个vue实例创建时,vue会遍历data中对象所有的属性,使用Object.defineProperty(Vue3使用的是proxy)把这些属性全部转成getter / setter。 而每个组件实例都有Watcher对象,会在组件渲染的过程中把属性记录成依赖, 之后当依赖项的setter被调用时,会通知Watcher重新计算,从而使得关联的组件得以更新。...

qq_45359288的博客 498

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vue双向数据绑定代码解读

Vue双向数据绑定

警警的博客 2001

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Vue2的双向数据绑定技术点

Vue2的双向数据绑定技术点 文章目录Vue2的双向数据绑定技术点1. 数组的reduce()方法2. 发布订阅模式3. Object.defineProperty() 1. 数组的reduce()方法 应用场景一:如何实现数组的累加? const arr = [3,7,8,9,0,123]; // function 1 let total = 0; arr.forEach((item)=>{ total += item; }) // anymore ? reduce语法: arr.r

HYY的博客 892

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

vue的响应式原理

一、reduce 1.数值的累加 作用:将****前一项*和*后一项****的值进行运算,返回累积的结果 格式:数组.reduce(function(prev,next){…}) 其中,prev表示前一项,next表示后一项。 运算规则: 默认情况下,会把数组的第一个元素作为prev的初始值。 每循环一次,把累积的结果赋给prev,next就变为下一个数组元素 var arr3 = [10,22,23,25,50]; const total = arr3.reduce(function(pre,ne

垂耳兔的博客 9169

vue数据双向绑定原理总结加完整代码

双向数据绑定-前置技术点 1.数组的reduce()方法 应用场景:下次操作的初始值,依赖于上次操作的返回值 (1)数组的累加计算 普通实现 const arr = [1,2,3,4,5,6] let total = 0; arr.forEach(item=>{ total+=item; }) console.log(total); 通过reduce实现 基础知识 使用reduce()方法实现 使用方法: 数组.reduce(函数,初始值) 循环当前数组,侧重于“滚雪球” 数组.redu

WXX的博客 687

手写vue双向数据绑定原理

class Vue { constructor(options) { this.$el = options.el; this.$data = options.data; let computed = options.computed; let methods = options.methods // 这个跟元素是否存在 if (this.$el) { // 把数据全部转化成用Ob

那一刻的博客 314

不好意思!耽误你的十分钟,让MVVM原理还给你

时间在嘀嗒嘀嗒的走着 既然来了就继续看看吧 这篇文章其实没有什么鸟用,只不过对于现在的前端面试而言,已经是一个被问烦了的考点了 既然是考点,那么我就想简简单单的来给大家划一下重点 众所周知当下是MVVM盛行的时代,从早期的Angular到现在的React和Vue,再从最初的三分天下到现在的两虎相争。 无疑不给我们的开发带来了一种前所未有的新体验,告别了操作DOM的思维,换上了数据驱动页面的思想...

weixin_45189747的博客 162

Vue2基础(二)

​ 语法:数组名.reduce((pre,current) => {},参数2)​ 语法:数组名.filter(函数 (形参1,形参2,形参3){​ shift(): 在数组的最前面删除数据项。​ unshift(): 在数组的前面添加数据项。​ concat(): 数组合并的(数据项)(要删除的索引,删除的个数,替换的数据项): 用来操作数组。​ push(): 在数组末尾添加新的数据项。​!

qq_56743396的博客 1919

前端开发Vue基础篇:day02 Vue基础知识

模板语法的插值操作 (1)v-html 往标签内部插入html文本; (2)v-text 往标签内部插入普通文本(解析不了标签); (3)v-pre 在界面上直接展示胡子语法; (4)v-cloak 隐藏数据渲染到页面之前,胡子语法在界面上的展示。 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" ..

半晴Miko的博客 1000

Vue中的辅助函数和js数组的高阶函数 map、filter、reduce

Vue中的辅助函数( push()、pop()、 shift()、unshift()、splice()、 sort()、 reverse() 和高阶数组函数map、reduce、filter)js数组的高阶函数 map、filter、reduce

伟庭的博客 1470

[Vue warn]: Error in render: “TypeError: data.reduce is not a function“found in报错详解

报这个错是因为赋值类型问题,我使用的是elementUI框架的el-table组件来开发的。<el-table :data="tableData">里面中的tableData接收的是一个数组,你不能给它一个对象或者其它类型的,不然就会报这个错误,这种报错在使用elementUI框架的表单<el-form :model="form">时也会常出现这种报错问题 问题总结: 出现这种错误很可能是在使用elementUI框架的el-table组件时,里面的:data="ta...

qq_920189602的博客 4974
上一篇: 云E办思路回顾
下一篇: vue双向数据绑定原理2-前置知识点defineProperty
cloudgaps
博客等级 码龄6年 11粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值