1、vue2、vue3双向绑定的区别,监听数组和对象有什么不同
vue2通过数据劫持、结合发布订阅模式,核心是object.defineproperty
vue3是ES6的proxy API,对数据进行代理,可以监听数组和对象的变化
proxy的优势:
1、defineproperty只能监听某个属性,不能全属性监听,proxy可以对整个对象进行监听,可以拦截对象所有的操作
2、可以检测到数组内部的变化
3、可以省去for in,闭包等内容来提升效率(直接绑定整个对象即可)
2、ref和reactive的区别
ref:声明基本类型和引用类型(引用类型底层也是reactive),访问时通过.value--底层是object.defineproperty的getter和setter实现数据代理
reactive:声明引用类型 –底层是proxy实现数据代理
shallowRef:对其包装的值仅进行浅层的响应式,当对象的值发生改变时,只有对象的第一层属性会触发响应式更新,不会深层遍历对象。
3、provid和injecte的局限和优势(跨层级关系)
优点:1、组件通信不受子组件层级影响(无论组件嵌套多少层,都不受层级影响)
2、适用于插槽和嵌套插槽(这就是为什么el-form和el-form-item能够协调管理表单的状态。在elemnt源码中,el-form就是将this本身provide出去的)
局限:1、不适合兄弟组件通信(流向一直是父到子)
2、父级组件无法主动通信(父组件对子组件的状态一无所知。也不能主动发起通信)
其它通信方式:
1、用法是直接在子组件标签中绑定属性和方法。用props拿到声明的属性。对于父组件的方法,可以通过this.$emit触发。(父子组件)
优点:可以对props数据进行数据计算、数据监听等处理,十分灵活方便。
缺点:a、props篡改(是否能够篡改分情况:props若是基本数据类型,篡改会报错,props是引用类型,可以修改数据的某一属性)b、跨层级通讯(父-子-子)、兄弟组件(子-父-子)通讯困难
2、vueX(兄弟关系)
优点:a、从根本上解决复杂组件之间通信问题
b、支持异步组件通信(在actions中可以进行一些异步操作)缺点:流程相对较为复杂
vueX的属性:
state:数据源、基本数据(用来存储变量),单向数据流,只能通过mutations修改
getters:state的计算属性
mutations:修改状态和数据,是同步操作
actions:提交mutations,可以包含异步操作
modules:模块化vuex,使每个store都有state、getters等等...
3、eventButs事件总线(vue3不推荐)(核心思想是事件的绑定和触发on绑定,emit触发)
优点:a、不受层级限制,可以实现任意两个组件间的通信。b、不受框架限制,react也可以。
4、Refs(父子组件):父组件可以通过refs引用子组件实例,调用子组件的方法或访问其数据。(不适合跨多层级组件通信)
4、telePort为什么能能修改嵌套层级
telePort组件原理涉及到vue3的portal(传送门)机制,portal允许在组件的模板中,将DOM树渲染到其它位置,使其不受组件嵌套限制
5、自定义指令的钩子函数
Vue2:bind-指令绑定到元素后调用,只调用一次。Inserted-元素插入父DOM后调用。
Update-当元素更新,子元素尚未更新时调用。
componentUpdate-被绑定的元素所在模板完成一次更新周期,就调用。
Unbind-一旦指令被移除就调用,只调用一次。
Vue3: created :绑定元素属性或事件监听器被应用之前调用。该指令需要附加需要在普通的 v-on 事件监听器前调用的事件监听器时,这很有用。
beforeMounted :当指令第一次绑定到元素并且在挂载父组件之前执行。
mounted :绑定元素的父组件被挂载之后调用。
beforeUpdate :在更新包含组件的 VNode 之前调用。
updated :在包含组件的 VNode 及其子组件的 VNode 更新后调用。
beforeUnmounted :在卸载绑定元素的父组件之前调用。
unmounted :当指令与元素解除绑定且父组件已卸载时,只调用一次。
6、为什么promise能解决异步问题、为什么可以进行链式调用
它起到代理作用(proxy),充当异步操作和函数之间的中介,使得异步操作具备同步操作的接口。可以将异步的操作,以同步的方式进行处理和管理。
每次调用then方法都会返回一个新的promise实例,可以继续调用then方法进行下一步操作。
小tips:
在js中,promise构造函数是同步执行的,然而then方法是异步的,它返回一个promise实例,这个promise在原promise变为已解决或者已拒绝状态时,安排执行相应的函数,每个then中的处理函数都将按照它们的添加顺序依次执行,即使前一个处理函数中有异步操作。
7、Setup
是组合式API的入口
传入两个参数setup(props, context),第一个是组件的props,第二个是上下文对象
整合了vue的生命周期钩子:beforCreate和create,beforDestroy改为beforUnmount,destroyed改为Unmounted
8、事件循环,宏任务、微任务
同步和异步任务分别进入不同的执行环境,同步任务进入主线程,异步任务进入任务队列,当主线程任务执行完毕,会去任务队列读取相应任务推入主线程,这个不断循环的过程就是事件循环。
任务队列有宏任务和微任务,宏任务有:setTimeOut、setInterval、异步ajax、I/O操作,DOM渲染、script脚本的执行
微任务:promise(then\cath)、ansyn/awiat、process.nextTick
微任务执行顺序:process.nextTick> promise(then\cath)=ansyn/awiat
9、Antdesign的弹窗可以直接绑在body上吗?
很迷,不知道如何回答。