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

猿创征文 |《深入浅出Vue.js》打卡Day1

目录

  • 第一章 Vue.js简介
    • 1、什么是Vue.js
    • 2、Vue.js简史
  • 第二章 Object的变化侦测
    • 1、什么是变化侦测
    • 2、变化侦测的过程
    • 3、关于Object的问题
  • 总结:

第一章 Vue.js简介

1、什么是Vue.js

Vue.js,通常简称Vue,是一款友好,多用途且高性能的JavaScript框架,能够帮助我们创建可维护性和可测试性更强的代码。
它是一款渐近式的JavaScript框架。渐进式就是如果你有一个现成的服务端应用,也就是非单页应用,可以将Vue.js作为该应用的一部分嵌入其中,带来更加丰富的交互体验。

2、Vue.js简史

2013年7月28日,尤雨溪,英文名叫Evan You,在Github上第一次为Vue.js提交代码,当时还不叫Vue.js,仓库中看出,这时的名字叫做Element,后来被更名为Seed.js;

2013年12月7日,尤雨溪在Github上发布了新版本0.6.6,将项目正式改名为Vue.js,并且把默认的指令前缀变成了 v- 。这一版本,代表Vue.js正式问世

2014年2月1日,尤雨溪将Vue.js 0.8 发布在了国外的Hacker News网站,这代表它首次公开发布

2015年10月26日,Vue.js终于迎来了1.0.0版本的发布

2016年10月1日,祖国的生日,同时也是Vue.js 2.0发布的日子;
Vue.js 2.0 引入了非常多的特性,其中一个明显的效果是Vue.js变得更轻,更快了,引入了虚拟DOM,支持JSX和TypeScript,支持流失服务端渲染,支持跨平台的能力等。

第二章 Object的变化侦测

1、什么是变化侦测

Vue.js 会自动通过状态生成DOM,并将其输出到页面上显示出来,这个过程叫做渲染。通常,在运行时应用内部的状态会不断发生变化,此时需要不停地重新渲染。这时如何确定状态中发生了什么变化?

变化侦测就是用来解决这个问题的,它分为两种类型:

  • “推”push
    Vue.js的变化侦测属于“推”,当状态发送变化时,Vue.js立刻就知道,而且在一定程度上直到哪些状态变了。因此它知道的信息更多,也就可以进行更细粒度的更新。这样也有一定的代价,因为粒度越细,每个状态所绑定的依赖就越多,依赖追踪在内存上的开销就会越大。因此,从Vue.js 2.0 开始,它引入了虚拟DOM,将粒度调整为中等粒度,即一个状态所绑定的依赖不再是具体的DOM节点,而是一个组件。这样状态变化后,会通知到组件,组件内部在使用虚拟DOM进行比对。这可大大降低依赖数量,从而降低依赖追踪所消耗的内存。
  • “拉”pull
    Angular和React中的变化侦测都属于“拉”,就是说当状态发生变化时,他不知道哪个状态变了,只知道状态可能变了,然后就发送一个信号告诉框架,框架内部收到信号后,会进行一个暴力对比来找出哪些DOM节点需要重新渲染,这在Angular中是叫做脏检测,在React中使用的是虚拟DOM (简单说,状态变了,你不知道哪个状态变了,你就全部拉出来看,来一个一个比较看哪个状态变了,之后重新渲染)

2、变化侦测的过程

我们以
student {
	name:'小明';
	age:18;
	school:{
		sname:'XXXX';
		adress:'XXX';
	}
}
为数据案例

第一步,我们使用Object.defineProperty进行封装,转变为getter/setter的形式来追踪变化;

第二步:收集依赖,即把用到数据student中属性的地方收集起来,getter就是收集依赖;如果属性发生改变则在setter中触发依赖;比如,我们修改了name:“小红”setter触发依赖;

第三步:getter收集依赖,我们把这些依赖存放到Dep类中,它专门帮我们管理依赖,收集,删除或发生通知。比如,上一步修改了name,触发了setter,那么settter就会通知Dep

第四步:属性发生变化之后,通知谁——Watcher。比如,上一步,setter已经通知Dep,但Dep只是用于存放的依赖地方,不能修改所用到依赖的地方,所以我们要通知Watcher角色,然后它再通知到 使用了name这个属性的其他地方,告诉它们,name数据已经修改了,你们要更新了;

第五步:封装Observer类,将数据内所有属性(子属性)都转换为getter/setter的形式。比如,我们看到student对象里面的其中一个属性school也是一个对象,所以我们也要把这个school对象中的属性都转为getter/setter属性进行侦测。

3、关于Object的问题

无法侦测到一个新属性被添加到对象中,也无法侦测到一个属性从对象中删除,为了解决这个问题Vue.js提供了两个API——vm.$set / vm.$delete

总结:

在这里插入图片描述

如有写的不好的地方,或不懂的地方,欢迎大家来找我讨论。
脚踏实地,一步一步来!!!

相关文章:

  • web前端面试高频考点——Vue3.x(Composition API的逻辑复用、Proxy实现响应式)
  • go语言实现十大排序算法
  • 学习笔记(13)ES6新特性
  • vue2 项目中引入iconfont
  • 手把手教你深度学习和实战-----循环神经网络(RNN、LSTM)
  • 西宾猫耳下载工具(missevandown)
  • 【C++项目】boost搜索引擎
  • 9.5-9.9 小知识点
  • 【流行框架】SpringMVC
  • Linux命令之chage命令
  • java导出功能(多个sheet页数据导出)
  • 力扣系列题,回溯专场
  • 在windows桌面上部署网站
  • 8月更新 | Visual Studio Code Python
  • 猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 2018一半小结一波
  • Asm.js的简单介绍
  • js中forEach回调同异步问题
  • k个最大的数及变种小结
  • Nacos系列:Nacos的Java SDK使用
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python3 使用 asyncio 代替线程
  • rabbitmq延迟消息示例
  • unity如何实现一个固定宽度的orthagraphic相机
  • Web标准制定过程
  • WePY 在小程序性能调优上做出的探究
  • XForms - 更强大的Form
  • 基于遗传算法的优化问题求解
  • 记一次删除Git记录中的大文件的过程
  • 经典排序算法及其 Java 实现
  • 实习面试笔记
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 终端用户监控:真实用户监控还是模拟监控?
  • nb
  • 你对linux中grep命令知道多少?
  • 阿里云API、SDK和CLI应用实践方案
  • #100天计划# 2013年9月29日
  • #Z2294. 打印树的直径
  • (4)STL算法之比较
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (译) 函数式 JS #1:简介
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)从 Java 代码到 Java 堆
  • .NET企业级应用架构设计系列之结尾篇
  • @Autowired和@Resource的区别
  • @synthesize和@dynamic分别有什么作用?
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [ 蓝桥杯Web真题 ]-布局切换
  • [1204 寻找子串位置] 解题报告
  • [ABC294Ex] K-Coloring
  • [AR]Vumark(下一代条形码)
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [C#基础]说说lock到底锁谁?