当前位置:首页 » 《关于电脑》 » 正文

Vue | 2024 前端 实习 八股 速记 30题| vue.js

1 人参与  2024年04月01日 08:01  分类 : 《关于电脑》  评论

点击全文阅读


1. MVVM

Model:数据模型

View:UI组件

ViewModel:通过双向数据绑定把 View层和 Model 层连接起来。

2. Vue、React框架特点

双向绑定(双向数据绑定),虚拟DOM,组件化

3. v-show和v-if

v-if:动态操作DOM元素

v-show:修改display属性为None

性能:v-if具有更高的切换开销,v-show具有更高的初始渲染开销

4. v-if和v-for不建议一起使用

v-for的优先级比v-if高,二者同时使用时会先循环再判断,将列表渲染出来后再根据判断做销毁,造成不必要的计算。更好的做法是,通过computed属性对数据做过滤,或v-show+v-for?

5. 双向数据绑定

双向体现在:数据变化 -> 视图更新;视图交互变化(例如input操作)-> 数据模型变更。

Vue2.x 与 Vue3.x 对双向数据绑定的实现方式不同:Vue2.x 采用数据劫持结合发布订阅模式,通过Object.defineProperty来劫持各个属性的setter和getter,Vue3.x使用ES6原生的Proxy。

Observer、Compile、Watcher

6. 数据计算computed、watch、methods

7. 插槽

插槽就是slot,<slot></slot>。

作用是向component中添加额外的内容。

8. key

Key相当于给vnode添加一个唯一的id,利于diff算法的追踪,在DOM diff 算法中能够高效地更新虚拟DOM。此外,key还可用于强制替换元素。

常见用法,例如列表循环:

<div v-for = “num in nums”, :key = “组件uid+index”> {{ num }} </div>

9. 过滤器

一般用来生成格式文本、格式id等。

定义过滤器有2种方式:双花括号插值 & v-bind 表达式。

定义过滤的方法有 2 种表达方式:全局定义 & 组件内定义。

// 双花括号插值

{{ rawMessage | formalMessage }}

// v-bind

<div v-bind:id = “rawMessage | formalMessage”}></div>

// 组件内定义,首字母大写

filters: {

  formalMessage: function(value){

if(!value) return ‘’

value = value.toString()

return value.charAt(0).toUpperCase() + value.slice(1)

}

}

// 全局定义

Vue.filter(‘formalMessage’: function(value) {

if(!value) return ‘’

value = value.toString()

return value.charAt(0).toUpperCase() + value.slice(1)

})

10. scoped(没看懂)

设置作用域样式 scoped css。

11. ref

用于获取DOM元素或组件的引用,也可用于父子组件通信。

$refs 只会再组件渲染完成之后生效。

12. NextTick

在vue中,并非数据一发生改变就立即更新视图。如果我们需要实时获取到最新的DOM,可以在修改数据后手动调用 $nextTick 方法(例如,在mounted,updated钩子函数中调用 vm.$nextTick 方法)。

13. Keep-alive

用于缓存不活动的组件实例,当我们返回时能重新激活,避免重复渲染。

14. data

组件中的data 写成一个函数,以函数返回值的形式定义。相当于为每个组件创建一个私有的数据空间,避免(全局数据)牵一发而动全身。

15. 组件生命周期

Vue生命周期有8个阶段:创建前后,挂载前后,更新前后,销毁前后。

另外,组件还有激活前后 2 个阶段。

16. 组件通信

父子props,子父emit,层级很多时用provide,全局得到状态管理使用vuex。

具体:父传子:props

子传父:this.$emit

多层级:父组件中使用provide,子组件中使用inject

兄弟组件:中间事件总线思想(也叫事件巴士)

以上是比较常见的。

17. 事件总线eventbus

示例没看懂。

18. vue-router

路由有2个属性:$router和 $route。

19. hash 和 history 模式的区别

$router.mode有2种模式:hash模式和history模式。

在显示上:hash模式的URL带有 # 号,而history模式没有。

二者在底层实现方式上也不同:hash模式监听location.hash 的改变,history模式用history.pushState() 改变url地址且不发送请求,用history.replaceState() 读取历史记录栈。

默认为hash模式。

20. 路由传参

路由传参方式有2种:$route.params 和 $route.query。

二者写法不同,

另外,使用query 传参所传递的参数会显示在地址栏中,使用parmas传参所传递的参数可以显示在地址栏中,也可以不显示,params相对于query更安全一些:

方式一:通过params来传递。

// 父组件前往?

this.$router.push({

       name: ‘B’,

       params: {

              page: ‘2’

}

})

// 子组件读取

this.num = this.$route.params.page

方式二:通过query来传递。

// 父组件前往?

this.$router.push({

       path: ‘/children’,

       query: {

              page: ‘2’

}

})

// 子组件读取

this.num = this.$route.query.page

21. 前端路由

检测url变动,解析路由实现UI更新。

Hash模式,监听浏览器地址hash值的变化,执行浏览器前进、后退操作。优势是兼容性好,但路径在#后面,不好看。

History模式,相当于有一个栈来保存浏览器地址的变化历史,使用history.pushState() 和 history.replaceState()会直接修改浏览器地址,但不会执行浏览器前进、后退操作。需要调用history.go()、history.back()、history.forward()方法来跳转页面。缺点是兼容性不如hash模式,但路径正规,因为pushState不能添加跨域网址?

22. Vuex

是一个状态管理库。

用于集中式地对组件的状态进行存储和管理。

避免多个实例或组件共享同一个数据时,出现数据不同步或数据状态难以维护等错误。

23. Vuex的优点

使多层嵌套的组件、兄弟组件之间的状态更好维护管理。

减轻服务端压力,对于同一份数据,请求会缓存,使所有组件共用。

大型项目协作,便于团队之间开发、维护和调试。

主要是没用过,不知道怎么结合项目回答。

24. Vuex的五个核心概念:

Store:仓库/商店,包含应用中的大部分状态,同时提供了state、getters、mutations、action和modules 5 个方法。

State:存储数据,使用 this.$store.state获取。

Getters:访问数据,是state的计算属性,随state发生变化而同时改变。

Mutations:修改state的值。(mutation是名词,这个单词的释义是变异。)

Action:异步的修改state的值。

Modules:分割store,使得每个module都拥有自己的state、getters、mutations、actions等调度方法。

25. Flux模式:

Vuex的思想是实现flux模式。

在一个应用程序中,包含的组件可能有很多,多个组件之间共享数据,它们互连的复杂性可能会增加到使数据状态不在可预测或不可理解,使应用程序无法扩展或维护。

Flux要解决多组件之间状态管理混乱的问题。

Flux的特点:(1)单一数据来源,组件只能从store中读取数据;(2)数据只可读,组件可以自由地从store中读取数据,但不能直接更改数据;(3)更新是同步的,不能是异步的,否则很难判断执行的顺序。

Flux的具体应用是vuex和react。

26. 虚拟DOM

虚拟DOM本质上是一个能描述DOM结构及其属性信息的JS对象。

假如没有虚拟DOM,更新过程为:数据改变->操作DOM->视图更新。

有了虚拟DOM,Vue工作流:数据改变 -> 计算变更,操作虚拟DOM -> 操作真实DOM -> 视图更新。

虚拟DOM的优点:(1)减少DOM操作,减少DOM树重新渲染,减少重排,优化性能。(2)将渲染过程抽象化,实现跨平台、跨端能力。

虚拟DOM的缺点:当每一次改动较少时,虚拟DOM是高效的。如果改动很多的话,使用虚拟DOM多出了很多计算,是不利的。

27. Diff算法

计算新老DOM的最小变化。

(1)只进行同级比较(具有相同父节点的新旧子节点进行比较),不跨级比较。

(2)标签不同,直接删除,不比较

(3)标签名相同,key相同,认为是相同节点,不继续深度比较。

28. Vue3 composition(成分)和vue2 option(选项)区别

(1)代码组织形式:Vue2根据选项功能组织代码,Vue3可根据逻辑功能组织代码,可读性更强。

(2)逻辑复用:Vue2使用混入(mixins)或全局函数,可能导致命名冲突及数据来源不明确;Vue3使用setup函数,逻辑复用更灵活。

(3)响应式:Vue2通过this.$data来访问响应式数据;Vue3通过ref、reactive函数创建响应式数据(Proxy)。

(4)TypeScript支持:Vue3提供更好的TypeScript支持。

29. Vue2和Vue3的区别:

(1)打包体积:引入了tree-shaking,移除了不常用的api,打包体积变小。

(2)逻辑复用:引入了composition API,组件逻辑更易组织和复用。

(3)响应式:用Proxy替代Object.defineProperty,提高了响应式系统的性能。

(4)TypeScript:Vue3提供更好的TypeScript支持。

(5)编译优化:Vue3只需要对比动态节点内容。

(6)路由、生命周期、props使用、vuex状态管理、父子传值等写法不同。

30. 为什么使用Proxy替换Object.defineProperty?

这个问题属于“响应式”的范畴。

总结而言,Object.defineProperty 存在以下问题:

无法监听到数组的索引变化;添加或删除对象不会触发属性的get或set操作,也无法监听;Object.defineProperty 在处理嵌套对象时需要递归,有性能问题。

Vue3中引入proxy,提供了更为丰富的劫持操作,能够劫持整个对象。对递归观察对象树的变化更加轻松。也可以更准确地监测数组的变化。


点击全文阅读


本文链接:http://zhangshiyu.com/post/88746.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 李成功金嘉兰(产子第二天,月嫂哄我儿子喊她妈)最新章节免费在线阅读_李成功金嘉兰(产子第二天,月嫂哄我儿子喊她妈)全章节在线阅读(笔趣阁)
  • 热推《程辰许清何泽》程辰许清何泽~小说全文阅读~完本【已完结】笔趣阁
  • 被全家害死在哀牢山后,我杀疯了尤向兰赵小燕最新好看小说推荐_最新全本小说被全家害死在哀牢山后,我杀疯了_(尤向兰赵小燕)免费小说在线阅读
  • 免费小说《尤向兰赵小燕》已完结(尤向兰赵小燕)热门小说大结局全文阅读笔趣阁
  • 被全家害死在哀牢山后,我杀疯了尤向兰赵小燕完结版小说全文免费阅读_免费完本小说被全家害死在哀牢山后,我杀疯了(尤向兰赵小燕)完本热门小说
  • 《被负心渣男欺骗后,灵魂互换的我彻底杀疯了》(郑江明明)在哪看免费小说_完整版免费全文阅读《被负心渣男欺骗后,灵魂互换的我彻底杀疯了》郑江明明 -
  • 《我服婚役后,帝君他四海八荒抢新娘!》(金乌昊天泽)免费小说免费阅读_免费完整版小说《我服婚役后,帝君他四海八荒抢新娘!》(金乌昊天泽) -
  • 零基础Java第十九期:认识String(一)
  • C++ —— 以真我之名 如飞花般绚丽 - 智能指针
  • JavaScript 读取及写入本地文件
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.21——动态内存管理
  • 前端流式播放TTS语音:技术细节与实现

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1