vue-面试题
watch与computed的区别
区别:
// computed
支持缓存,只有依赖数据发生改变,才会重新进行计算
不支持异步,当computed内有异步操作时无效,无法监听数据的变化
computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值
如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed
如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法。
// watch
不支持缓存,数据变,直接会触发相应的操作
watch支持异步
监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值
当一个属性发生变化时,需要执行对应的操作;一对多
监听数据必须是data中声明过或者父组件传递过来的props中的数据,当数据变化时,触发其他操作,函数有两个参数,
immediate:组件加载立即触发回调函数执行,
deep: 深度监听,为了发现对象内部值的变化,复杂类型的数据时使用,例如数组中的对象内容的改变,注意监听数组的变动不需要这么做。注意:deep无法监听到数组的变动和对象的新增,参考vue数组变异,只有以响应式的方式触发才会被监听到。
使用场景:
当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。这是和computed最大的区别
computed 是计算一个新的属性,并将该属性挂载到 vm(Vue 实例)上,而 watch 是监听已经存在且已挂载到 vm
上的数据,所以用 watch 同样可以监听 computed 计算属性的变化(其它还有 data、props)
computed 本质是一个惰性求值的观察者,具有缓存性,只有当依赖变化后,第一次访问 computed 属性,才会计算新的值,而
watch 则是当数据发生变化便会调用执行函数
// 当一个属性受多个属性影响的时候就需要用到computed 最典型的例子: 购物车商品结算的时候
// 当一条数据影响多条数据的时候就需要用watch 搜索数据
// computed 适用一个数据被多个数据影响,而 watch 适用一个数据影响多个数据
https://www.cnblogs.com/jiajialove/p/11327945.html
vue生命周期及对应的行为
vue父子组件生命周期执行顺序
组件间通讯方法
如何实现一个指令
vue.nextTick实现原理
diff算法
如何做到的双向绑定
虚拟dom为什么快
如何设计一个组件
vue和react区别
// 同:
使用 Virtual DOM
提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件
// 异:
模板 vs JSX
React整体是函数式的思想,一直提倡的是单向数据流,他称之为 onChange/setState()模式,推崇结合 immutable 来实现数据不可变
Vue 的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立 Watcher 来监听,当属性变化的时候,响应式的更新对应的虚拟 DOM
所以 React 的性能优化需要手动去做,而Vue的性能优化是自动的,但是Vue的响应式机制也有问题,就是当 state 特别多的时候,Watcher 会很多,会导致卡顿
单向数据流:Vue和react都是单向数据流,单向数据流并非‘单向绑定’,甚至单向数据流与绑定没有‘任何关系’。单向数据流中的‘单向’-- 数据从父组件到子组件这个流向叫单向
绑定的单双向:View层与Module层之间的映射关系。
双向绑定和响应式的概念
双向绑定是双向的,表示数据改变驱动视图改变,视图反过来也可以改变数据。
响应式是单向的,只代表数据改变驱动视图改变,Vue响应式的主要原理是数据劫持和观察者模式,是 Vue 最核心的模块
react中不存在单向绑定 响应式的概念 只存在 单向数据流的概念 react设计不是为了写更少的代码,而是为了让代码逻辑更清晰
mvvm
双向数据绑定
响应式
vue实例传入的optinos
vue 生命周期
es6 for in for of reduce
虚拟dom内部复用问题
v-for key
数组对象的响应式
v-model原理
data为什么是一个函数
插槽
this指向
hash与history 路由实现原理
浏览器对象 文档对象的区别
vue.use 原理
动态路由替换tab标签 替换组件的用法