2024前端开发面试经验—01

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数据进行数据计算、数据监听等处理,十分灵活方便。

 缺点:aprops篡改(是否能够篡改分情况: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上吗?

很迷,不知道如何回答。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值