Vue2在团队内的分享

简介: 简要介绍Vue的相关内容

# VUE2


## 优点

* 体积小

* 运行效率高(虚拟dom,diff算法)

* 双向数据绑定

* 学习成本低,生态丰富



## 基础


#### Vue实例

```js

varvm = newVue({

 // 参数

})

```


#### 参数


   data

   props

   propsData

   computed

   methods

   watch


   el

   template

   render

   renderError


   生命周期函数


   directives // 自定义指令

   filters // 过滤器

   components // 可用组件


   parent

   mixins

   extends

   provide / inject


   ...



#### 生命周期


![生命周期](https://cdn.nlark.com/yuque/0/2021/png/22701779/1638146818471-46881d6e-7773-4b6a-ad96-a8123ac1c278.png"生命周期")

* beforeCreate(创建前),在数据观测和初始化事件还未开始


* created(创建后),完成数据观测,属性和方法的运算,初始化事件, $el 属性还没有显示出来


* beforeMount(载入前),在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。


* mounted(载入后),在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。


* beforeUpdate(更新前),在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。


* updated(更新后),在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。


* beforeDestroy(销毁前),在实例销毁之前调用。实例仍然完全可用。


* destroyed(销毁后),在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。


#### 语法糖

* v-model

* v-bind

* v-on

* v-if/v-else-if/v-else

* v-show

* v-text

* v-html

* v-for

* v-slot

* v-pre

* v-cloak

* v-once

* ...


#### vue内置组件

   component

   keep-alive

   slot


#### vue组件示例


```vue

<template>

 <div>

   <h1>{{title}}h1>

   <ChildComponents>ChildComponents>

 div>

template>

<script>

// 引入子组件

importChildComponentsfrom"./ChildComponents.vue";

// 引入其他Js脚本或类库

importCookiefrom"@/lib/cookie.js";


exportdefault {

 //注册子组件

 components: {

   ChildComponents,

 },

 //组件私有数据

 data() {

   return {

     title:"组件标题",

     firstName:"",

     lastName:"",

   };

 },

 //父组件传递过来的数据(两种方式声明:1.数组 2.对象)

 props: {

   age: {

     type:Number,

     default:0,

     required:true,

     validator:function (value) {

       returnvalue>=0;

     },

   },

 },

 //计算属性

 computed: {

   fullName() {

     returnthis.firstName+this.lastName;

   },

 },

 //监听

 watch: {

   title(preVal, newVal) {

     console.log(`改变之前的值:${preVal};改变之后的值:${newVal}`);

   },

 },

 //方法集

 methods: {

   getCurrentDate() {

     returnnewDate().toLocaleDateString();

   },

 },

 //生命周期钩子:实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用

 beforeCreated() {

   console.log("component before created");

 },

 //生命周期钩子:组件实例完成创建之后调用

 created() {

   console.log("component created");

 },

 //生命周期钩子:组件实例渲染完成时调用

 mounted() {

   console.log("component mounted");

 },

 //   ...

};

script>


<stylelang="less"scoped>

div {

 width: 100%;

}

style>

```


#### vue-router

* 路由模式: hash、history

* 使用方法

 1. 创建路由组件,挂载到Vue实例中

 2. 配置路由映射:组件和路径映射关系

 3. 使用路由:通过````



#### vuex


> dispatch -> action -> commit -> mutation -> store


![状态管理](https://cdn.nlark.com/yuque/0/2021/png/22701779/1638146852711-b8e50350-9abb-49e8-8ab2-738242f9cf67.png"状态管理")


* 概念

 * State

 * Getters

 * Mutations

 * Actions

 * Modules


* 辅助函数

 * mapState

 * mapGetters

 * mapMutations

 * mapActions


#### 渲染函数 JSX

* render写法

* vue语法适配


## 原理


#### MVVM设计模式

* Model 代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。

* View 代表UI 组件,它负责将数据模型转化成UI 展现出来。

* ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。双向数据绑定。


#### 响应式

> Vue2 的响应式原理是核心是通过 ES5 的保护对象的 Object.defindeProperty中的访问器属性中的 get和 set方法,data 中声明的属性都被添加了访问器属性,当读取 data 中的数据时自动调用 get 方法,当修改 data 中的数据时,自动调用 set 方法,检测到数据的变化,会通知观察者 Wacher,观察者 Wacher自动触发重新render 当前组件(子组件不会重新渲染),生成新的虚拟 DOM 树,Vue 框架会遍历并对比新虚拟 DOM 树和旧虚拟 DOM 树中每个节点的差别,并记录下来,最后,加载操作,将所有记录的不同点,局部修改到真实 DOM 树上。


* 双向数据绑定原理

 * Object.defindeProperty检测data变化

 * 重新定义数组原型

 * 监听对象属性

```js

constdata = {};

letname = "张三";


Object.defineProperty(data,'name',{

   get:function(){

       console.log('触发get')

       returnname

   },

   set:function(newVal){

       console.log('触发set')

       name=newVal

   }

})


//测试

console.log(data.name)   // 触发get  张三

data.name = '李四'         // 触发set

```

 

* 缺点

 * 深度监听obj,需要递归到底,一次性计算量大,如果数据过大页面,页面可能会卡死

 * 无法监听新增属性/删除属性(提供Vue.set Vue.delete)


#### 虚拟DOM、DIFF算法

1. 在内存中构建虚拟dom树;

2. 将内存中虚拟dom树渲染成真实dom结构;

3. 数据改变的时候,将之前的虚拟dom树结合新的数据生成新的虚拟dom树;

4. 将此次生成好的虚拟dom树和上一次的虚拟dom树进行一次比对(diff算法进行比对),来更新只需要被替换的DOM,而不是全部重绘。在Diff算法中,只平层的比较前后两棵DOM树的节点,没有进行深度的遍历;

5. 会将对比出来的差异进行重新渲染;


## 进阶


#### vue-cli/Webpack、Babel

* 项目搭建

* 打包配置

* bable编译配置


#### SSR


#### Vue插件

* 使用(Vue.use)

* 开发(install 方法)


## Vue与React

* JSX 和纯函数式的编程范式,直接进行局部重新刷新(或者重新渲染),更简单,对原生的支持和更彻底贯彻相关思想显得更纯粹;

* Vue 进行数据拦截/代理,它对侦测数据的变化更敏感、更精确,也间接对一些后续实现(比如 hooks,function based API)提供了很大的便利;

* Vue 的方案在结构、样式、业务分离方面更清晰彻底,更符合前端多年来的编码习惯,更符合直觉,更容易学习和维护;

* 相比 React 需要学习的新概念比较少,把 API 看一遍就上手,学习曲线平滑。看下这个问题下的答案多少把二者当做框架、分不清模板和 virtual dom 就能体会了,但对研究不深的使用者或者初学者其实影响不大,React 的文档可比 Vue 简短多了,大篇幅在介绍概念而非 API;


* React 并不知道什么时候“应该去刷新”,触发局部重新变化是由开发者手动调用 setState 完成。React setState 引起局部重新刷新。为了达到更好的性能,React给开发者 shouldComponentUpdate 这个生命周期 hook,来避免不需要的重新渲染(相比之下,Vue 由于采用依赖追踪,默认就是优化状态:你动了多少数据,就触发多少更新,不多也不少,而 React 对数据变化毫无感知,它就提供 React.createElement 调用已生成 virtual dom)。



相关文章
|
设计模式 JavaScript 前端开发
Vue2在团队内的分享
简要介绍Vue的基础特性和区别于react的地方
189 2
|
17天前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
140 2
|
4月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
579 0
|
6月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
777 4
|
4月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
5月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
554 77
|
3月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
116 0
|
3月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
248 1
|
6月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
4月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
377 17