| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> Vue常见面试题 -> 正文阅读 |
|
[JavaScript知识库]Vue常见面试题 |
1.什么是MVVM?
2.组件通讯
3.生命周期
4.vue组件中data为什么必须是一个函数而Vue的根实例则没有此限制?(源码地址:src/core/instance/state.js - initData() ) 保证复用组件(多实例)的时候数据不会互相干扰 Vue组件可能存在多个实例,如果用对象的形式定义data的话,则会导致多个组件共用一个data对象,当一个组件的data对象改变时,就会影响到所有对象,这样是不合理的,但是如果用函数的形式定义data的话,在initData时会返回一个全新的data对象,规避了多实例之间的污染问题。而在Vue根实例创建过程中则不存在该限制,也是因为根实例只能有一个,不会存在这个问题 5.Vue中v-if和v-show有什么区别?v-if在进行切换时会直接对标签进行创建和销毁,不显示的标签不会加载在DOM树中。而v-show在进行切换时,只是对标签的display属性进行切换,通过display来显示隐藏元素。一般来说v-if的性能开销会比v-show大,切换频繁的标签更适合用v-show 6.Vue 中 computed 和 watch 有什么区别?计算属性 computed:
侦听属性 watch:
7.$nextTick 是什么在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。 8. v-for 中 key 的作用是什么?key 是 Vue 使用 v-for 渲染列表时的节点标识。使用了 key 之后,当列表项发生变化时,Vue 会基于 key 的变化而重新排列元素顺序,并且移除 key 不存在的元素,提升运行效率。 9.vue中的key
10. Vue 的双向数据绑定原理是什么?Vue 采用数据劫持+订阅发布模式实现双向绑定。通过 Object.defineProperty()方法来为组件中 data 的每个属性添加 get 和 set 方法,在数据变动时,触发 set 里相应的监听回调函数,将变动信息发布给订阅者。主要有以下步骤:
11.如何动态更新对象或数组的值?由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。 this.$set(要改变的数组/对象,要改变的位置/key,要改成的value) ? this.$set(this.arr, 0, "OBKoro1"); // 改变数组 this.$set(this.obj, "c", "OBKoro1"); // 改变对象 ? //数组原生方法造成的数据更新,可以被 Vue 监听到。如 splice()push()pop()等 12.常用的事件修饰符有哪些?.stop:阻止冒泡; .prevent:阻止默认行为; .self:仅绑定元素自身可触发; .once:只触发一次.. 13.Vue 如何获取 DOM 元素?首先先为标签元素设置 ref 属性,然后通过 this.$refs.属性值获取 <div ref="test"></div> ? const dom = this.$refs.test 14.Vue 初始化页面闪动问题如何解决?出现该问题是因为在 Vue 代码尚未被解析之前,尚无法控制页面中 DOM 的显示,所以会看见模板字符串等代码。 解决方案是,在 css 代码中添加 v-cloak 规则,同时在待编译的标签上添加 v-cloak 属性: ? [v-cloak] { display: none; } ? <div v-cloak> {{ message }} </div> ? ? 15.Vue 如何清除浏览器缓存?
16.Vue-router 路由有哪些模式?他们的区别是什么一般有两种模式:
17.Vue-cli 项目中 assets 和 static 文件夹有什么区别?两者都是用来放静态资源为文件夹。区别在于: assets中的文件在运行npm run build的时候会被打包,简单来说就是会被压缩体积,代码格式化之类的。打包之后也会放在static中。static中的文件则不会被打包 18.Vuex 是什么?有哪几种属性?Vuex是专为Vue设计的状态管理工具,采用集中式的存储管理Vue中的所有组件的状态
const store = new Vuex.Store({ ?state: { ? ?count: 0, }, ?mutations: { ? ?increment(state) { ? ? ?state.count++; ? }, }, ?actions: { ? ?increment2(context) { ? ? ?context.commit('increment'); ? }, ? ?fun(context) { ? ? ?context.dispatch('increment2'); ? }, }, });
19.说一下v-model的原理v-model本质就是一个语法糖,可以看成是value + input方法的语法糖,当input方法修改了data中的属性值时,defineProperty会监听data中每一个属性的get和set方法,从而一旦某个属性重新赋值,则能监听到变化来操作相应的页面 20.Vue模版编译原理知道吗,能简单说一下吗?简单说:Vue的编译过程就是将template转化成render函数的过程。会经历以下阶段:
首先解析模版,生成AST语法树(一种用JavaScript对象的形式来描述整个模板)。 使用大量的正则表达式对模板进行解析,遇到标签、文本的时候都会执行对应的钩子进行相关处理。 Vue的数据是响应式的,但其实模板中并不是所有的数据都是响应式的。有一些数据首次渲染后就不会再变化,对应的DOM也不会变化。那么优化过程就是深度遍历AST树,按照相关条件对树节点进行标记。这些被标记的节点(静态节点)我们就可以跳过对它们的比对,对运行时的模板起到很大的优化作用。 编译的最后一步是将优化后的AST树转换为可执行的代码 21.Vue中组件生命周期调用顺序组件的调用顺序都是先父后子,渲染完成的顺序是先子后父。 组件的销毁操作是先父后子,销毁完成的顺序是先子后父。 加载渲染过程 父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount- >子mounted->父mounted 子组件更新过程 父beforeUpdate->子beforeUpdate->子updated->父updated 父组件更新过程 父 beforeUpdate -> 父 updated 销毁过程 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed 22.你都做过哪些Vue的性能优化编码阶段
<template> <div id="app"> ? ? ? ?<keep-alive> ? ? ? ? ? ?<router-view/> ? </keep-alive> ? ?</div> </template>
打包优化
23.在使用计算属性的时,函数名和data数据源中的数据可以同名吗?不可以,会报错:The computed property "xxxx" is already defined in data 24.vue中data的属性可以和methods中的方法同名吗?为什么?不可以,会报错:Method "xxx" has already been defined as a data property 25.怎么给vue定义全局的方法?挂载到Vue的prototype上,把全局方法写在一个文件里面,然后for循环挂载到prototype上 26.v-if和v-for哪个优先级更高?(源码地址:compiler/codegen/index.js)
27. 你怎么理解vue中的diff算法
28.什么是虚拟DOM?虚拟DOM就是将真实的DOM用js语言描述出来,运用diff算法更新数据之后再映射成真实的DOM(为了解决浏览器的性能问题) 29.组件化
30.谈一谈vue设计原则的理解
渐进式的JavaScript框架: Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手还便于与第三发库或既有项目整合。 31.vue3的新特性
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 12:07:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |