Vue基础面试题

目录

v-show和v-if的区别?

key的作用

模板语法

为什么data是一个函数而不是一个对象

watch和computed的区别 

watch:

computed:

组件通信组件交互组件传值

单向数据流(数据更改的方向)

为什么Vue中的v-if和v-for不建议一起用?

什么是虚拟DOM?

什么是Vue的响应式/Vue响应式原理

Vuex

Vue生命周期 

页面之间如何跳转

router和route区别

谈谈你对Vue的理解?

MVVM模式分为Model,View,ViewModel 三个部分

什么是MVVM?

组件中 data 为什么是一个函数? 为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?

谈谈你对 keep-alive 的了解?

computed和watch的区别是什么?

谈谈对组件的理解?

Vue的普通Slot以及作用域Slot的区别?


v-show和v-if的区别?

        v-if对应的是元素/标签的添加或者删除,满足条件添加元素,不满足条件删除元素
        v-show对应的是元素的CSS样式中的display属性隐藏和显示
        满足条件对应的是元素的显示 display:block
        不满足条件对应的是元素的隐藏 display:none
        v-show用于频繁的切换css样式

key的作用

   vue会尽可能高效率渲染元素,我们不希望被渲染的时候。只需添加一个具有唯一值的 key

模板语法

    插值: 1.基本渲染 {{}}  v-html  v-bind
    列表渲染;v-for 
    条件渲染:v-if v-show
    属性渲染
    事件渲染v-on:click  @click

为什么data是一个函数而不是一个对象

因为组件是一个可复用的实例,所有组件引用同一个对象会造成数据污染,函数使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件。

watch和computed的区别 

watch:

      1. 监听值的变化,执行异步操作【axios请求】
      2. 无缓存性,页面重新渲染时值不变化也会执行

computed:

      1.具有缓存性,页面重新渲染值不变化,计算属性会立即返回之前的计算结果
      2.不支持异步,异步操作无法监听数据的变化

组件通信组件交互组件传值

    父组件向子组件传递数据——使用props 
    子组件向父组件传递数据——使用this.$emit暴露一个function给父组件
    兄弟组件之间;子组件A传给父组件 父组件传给子组件B

单向数据流(数据更改的方向)

父组件可以改给子组件的数据 
 父改子可以,子改父不行

为什么Vue中的v-if和v-for不建议一起用?

v-for优先级比v-if高
v-if 和 v-for 同时用在同一个元素上,带来性能方面的浪费(每次渲染都会先循环再进行条件判断)

什么是虚拟DOM?

它是真实DOM的内存表示,一种编程概念,一种模式,会和真实DOM同步.


什么是Vue的响应式/Vue响应式原理

什么是响应式,也即是说,数据发生改变的时候,视图会重新渲染,匹配更新为最新的值。
Object.defineProperty 为对象中的每一个属性,设置 get 和 set 方法,每个声明的属性,都会有一个专属的依赖收集器 subs,当页面使用到 某个属性时,触发 ObjectdefineProperty - get函数,页面的 watcher 就会被 放到 属性的依赖收集器 subs 中,在 数据变化时,通知更新;
当数据改变的时候,会触发Object.defineProperty - set函数,数据会遍历自己的依赖收集器 subs,逐个通知 watcher,视图开始更新;

Vuex

Vuex是状态机,理解为状态管理模式;用来维护组件之间共享数据,内部有五个属性
state是用来维护共享数据的,getters用来操作state中的数据之后并返回,mutations是用来做同步操作的,这是唯一修改state数据的方式,actions是用来做异步操作的,将后台获取到的响应通过突变commit提交给mutations。modules用来维护多个状态机对象的。

Vue生命周期 

beforeCreate--刚初始化了一个空的vue实例对象,只有默认的事件和生命周期,其他东西未创建。
created--在created阶段,data和methods中的方法已经初始化好了
beforeMount--模板在内存编译好了,但还没挂载到页面上去,页面还是旧的
mounted--整个vue实例初始化完毕,挂载到页面。
beforeUpdate--页面中的数据还是旧的,此时data中的数据是最新的,页面尚未和最新数据同步
Updated--页面和data数据同步,都是最新的
beforeDestory--实例销毁前 仍然可以访问实例的data和methods
destoryed--组件已经完全销毁,监听器,子组件,事件监听等移除

页面之间如何跳转

使用编程式导航
this.$router.push(),可以通过name params和path query跳转 跳转区别:params携带一次性参数

router和route区别

router为VueRouter的实例,相当于一个全局的路由器对象,里面含有很多属性和子对象
route相当于当前正在跳转的路由对象。可以从里面获取name,path,params,query等

谈谈你对Vue的理解?

关键点: 渐进式 JavaScript 框架、核心库加插件、动态创建用户界面(异步获取后台数据,数据展示在界面)
特点:   MVVM 模式;代码简洁体积小,运行效率高,适合移动PC端开发;本身只关注 UI (和 react 相似),可以轻松引入  Vue 插件或其他的第三方库进行开发。

MVVM模式分为Model,View,ViewModel 三个部分

(1).Model:数据层,包含数据实体和对数据实体的操作
(2).View:界面层,对应于Activity,XML,View,负责数据显示以及用户交互。
(3).ViewModel:关联层,将Model和View进行绑定,Model或者View更改时,实时刷新对方。

什么是MVVM?

全称: Model-View-ViewModel , Model 表示数据模型层。view 表示视图层, ViewModel 是 View 和 Model 层的桥梁,数据绑定到 viewModel 层并自动渲染到页面中,视图变化通知 viewModel 层更新数据。

组件中 data 为什么是一个函数?
 为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?

因为组件是用来复用的,且 JS 里对象是引用关系,如果组件中 data 是一个对象,那么这样作用域没有隔离,子组件中的 data 属性值会相互影响,如果组件中 data 选项是一个函数,那么每个实例可以维护一份被返回对象的独立的拷贝, 组件实例之间的 data 属性值不会互相影响;而 new Vue 的实例,是不会被复用的,因此不存在引用对象的问题。

谈谈你对 keep-alive 的了解?

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染 ,其有以下特性:
一般结合路由和动态组件一起使用,用于缓存组件;
提供 include 和 exclude 属性,两者都支持字符串或正则表达式, include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;
对应两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 activated,当组件被移除时,触发钩子函数 deactivated。

computed和watch的区别是什么?

computed和watch都基于watcher来实现的。
computed的属性是具备缓存的,依赖的值不发生变化,对其取值时计算属性方法不会重复执行
watch是监控值的变化,当值发生改变的时候,会调用回调函数


  

谈谈对组件的理解?

组件化开发能大幅提高应用开发效率、测试性、复用性
常用的组件化技术:属性、自定义事件、插槽
降低更新范围,值重新渲染变化的组件
高内聚、低耦合、单向数据流

Vue的普通Slot以及作用域Slot的区别?

普通插槽
普通插槽是渲染后做替换的工作。父组件渲染完毕后,替换子组件的内容。

作用域插槽
作用域插槽可以拿到子组件里面的属性。在子组件中传入属性然后渲染。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值