vue生命周期周期
-
beforeCreate: 实例初始化之后,数据观测、事件配置之前调用,这时候data、methods、computed、watch还没有初始化,不能访问
-
created: 可以操作data里面的数据和调用methods方法,如果需要访问DOM元素,则需要使用nextTick
-
beforeMount: 在挂载前调用,编译模板,创建虚拟DOM
-
mounted: 挂载之后调用,真实DOM挂载完毕,可以使用refs操作DOM
-
beforeUpdate 更新前调用,数据改变但是DOM还没更新
-
updated 更新后调用,DOM已更新
-
beforeDestory: 实例销毁前调用,这时候还能拿到实例
-
destory: 实例销毁后调用,事件监听器被移除,所有子实例被销毁
vue组件传值的方式
- props,$emit
- provide/inject
- $attrs
- ref
- vuex
谈谈你对vue响应式的理解
响应式就是能检测数据变化并作出响应
主要是通过
- 监听器: 递归遍历传入对象的所有属性,使用Object.defineproperty设置各个属性的setter和getter,一旦数据发生变化,通知订阅者,更新视图
- 解析器: 解析vue模板指令,将变量替换成数据,初始化模板,指令对应的节点绑定更新函数,添加订阅者,数据发生变化,更新视图
- 订阅者: 订阅监听器中属性的变化。一旦属性发生变化,调用自身update函数,触发解析器中的更新函数,更新视图
- 订阅器: 收集订阅者,管理监听器和订阅者
vue双向数据绑定
vue双向数据绑定是一个指令v-model,可以绑定一个响应式数据,是一个语法糖,默认情况下想当于:value @input也就是绑定value属性和input事件的监听,通常在表单上使用,<Input v-model="value1"> 表示将value1值绑定到表单value值上
为什么data是一个函数
如果data是对象的话,对象是引用类型,保存的是内存地址,造成所有实例公用一份data,造成改变一个等于改变多个的结果 如果data是函数,复用组件时,会返回一份新的data,让各个组件维护各自的数据
computed和watch的区别
computed具有缓存性,当依赖的数据发生变化时才会重新计算产生新数据 watch是用来监听现有数据的参数是newValue和oldValue
nextTick
vue采用的是异步更新策略,数据更新时不会立即更新DOM,而是开启一个任务队列,缓冲在同一事件循环中发生变化的所有数据,减少DOM操作
vue采用的是异步更新策略,数据变化时不会立即更新DOM,而是开启一个任务队列,传冲在同亿事件循环中改变你那的所有数据,这样可以减少DOM操作 接收一个回调函数,并将这个回调函数延迟到DOM更新后执行 在created中想要获取DOM时 响应式数据发生变化后拿到DOM更新后的状态,比如获取列表更新后的高度
keep-alive
keep-alive是vue内置组件,能在组件切换过程中将状态缓存下来,防止重复渲染DOM keep-alive是vue内置组件,能在组件切换的过程中将状态缓存下来防止重复渲染DOM 也就是不需要让页面重新加载时可以使用,
v-show和v-if的区别
都是控制元素显示和隐藏的指令,v-show是通过display:none控制元素隐藏,v-if则是对DOM元素进行增加或删除,v-show适合频繁切换的场景
vuex
vuex是用来集中式存储组件的状态 state getters mutations actions state:存储数据 getters:从state中派生出数据,类似于计算属性,当依赖的值发生变化后才会重新计算,具有缓存 mutations:定义改变state中数据的方法,必须是同步函数,通过store.commit('方法',参数) actions:用于提交mutations,可以包含任何异步操作 store.dispatch('方法',参数) modules:将vuex进行模块化每个模块都有自己的state,getters,mutations,actions
什么是虚拟DOM
虚拟DOM是JS按照DOM结构来实现的树形结构对象 类比虚拟DOM就是用 type: 标签类型 props: 元素属性 children: 元素的子节点
响应式的变化
Object.defineProperty一次只能监听一个属性,需要遍历才能监听所有属性,如果属性值是对象就需要递归遍历 无法监听新增或者删除的属性 无法监听数组的变化 Proxy可以直接监听整个对象,Proxy返回的是一个新对象,可以直接监听到数组的变化
vue3的新特性
vue3比vue2性能更好,代码体积更小,并且对ts的支持更好
composition API
ref: 一般用来定义基本数据类型的响应式数据 使用值需要.value reactive: 定义引用类型的响应式数据 toRef: 为响应式对象上的某个属性创建一个新的ref toRefs: 为响应式对象中包含的属性生成对应的ref
teleport: 将组件的HTML节点挂载到任意位置 将组件的HTML节点挂载到任意位置
单个组件支持多个v-model绑定 vue3中prop是modelValue 事件名称是update:modelValue
vue-router 路由模式
hash模式 history模式
hash模式 路由修改的是#中的信息,不会去请求服务器,而history模式如果刷新的话,服务器如果没有对应的资源的话会返回404