面试题整理

面试题
1.vue⽣命周期,⽗组件和⼦组件⽣命周期钩⼦执⾏顺序是什么?
    组件从创立到销毁的整个过程就是生命周期,通过生命周期,我们可以在不同的阶段进行操作
    vue生命周期:beforeCreate=>创建前
                created=>创建后
                beforMount=>挂载前
                mounted=>挂载后
                beforUpdate=>修改前
                updated=>修改后
                beforDestory=>销毁前
                destoryed销毁后
    页面一开始就会执行创建和挂载钩子函数,更新钩子函数需要在改变数据的时候触发,销毁钩子函数在组件切换时触发,
    在项目开发时经常用到created和mounted钩子函数,mounted用来获取dom元素,获取不到用$nextTick解决
    补充:父组件子组件执行顺序:
        加载渲染过程:父组件beforeCreate=>

                                父组件created=>父组件beforMount=>

                                子组件beforeCreate=>子组件created=>子组件beforMount=>
                                子组件 mounted=>父组件mounted=>

        更新过程:父组件beforUpdate=>子组件beforUpdate=>子组件updated=>父组件updated=>
        
        销毁过程:父组件beforDestory=>子组件beforDestory=>子组件 destoryed=>父组件         destoryed=>

        父组件可以监听到子组件的生命周期,通过$emit或者@hook

2. vuex的理解?
    vuex是状态管理工具,vue官方提供的,通过vuex可以实现各组件之间数据共享,vuex有5大核心,state,getters,mutations,actions,modules
    state里面保存的是数据状态,可以理解为数组,
    getters用来获取state里面数据状态并可以对state数据作出处理,类似于计算属性
    mutations修改state里面数据,只能进行同步操作,
    actions也是修改state里面的数据,可以进行异步操作,
    modules模块化操做,项目过大时模块化处理方便

    获取state里面的状态,通过this.$store.state获取,如果要调用getters方法,通过this.$store.getters
    调用mutations里面的方法,通过this.$store.commit获取,调用actions方法通过this.$store.dispatch
    辅助函数方法:  mapState, mapGetters, mapMutations, mapActions
                  mapState, mapGetters,在computed里面调用  mapMutations, mapActions 在methods里面调用
    
    改变state状态一般通过this.$store.dispatch触发actions里面的方法,通过commit调用mutations里面的方法改变state
    vuex弊端:在刷新页面时数据会丢失,需要搭配本地存储解决,通过localStorage将数据存到本地

3.vue路由模式有几种,区别是?
    两种,hash模式和history模式,hash模式在url后面带有#字符,历史模式没有,hash模式不会保存在https请求当中,不会重新加载页面,hash模式
         原理就是onhashChange()事件
         history模式需要前后端配合,前后端请求url要保持一致,否则报404错误
    切换历史状态:forward()go()  back()
    修改历史状态:pushState()  replaceState()

4.vue路由守卫?
  vue路由守卫是在页面跳转时出发的钩子函数,一共三种,全局路由守卫,组件内路由守卫,路由独享守卫  
  全局路由守卫分为三种:前置路由首位,路由解析守卫,后置路由守卫,
  组件内路由守卫:beforRouteEnter,  beforRouteUptate,beforRouteLeave,
  路由独享守卫:beforEnter
  每个路由守卫都会有几个钩子函数,每个钩子函数有三个回调函数to  from  next分别对应要进入的,要离开的,和进入一个路由在项目中经常使用的
  路由守卫实现页面的鉴权
  当用户登陆后会吧后台返回的token保存在vuex和本地当页面进行跳转的时候我们会在路由守卫里面获取到token,如果token存在执行下一步不存在返回登陆页

5.v-if与v-show的区别?
    两者都是控制dom元素显示与隐藏的
    v-if控制显示与隐藏的时候会删除dom元素,当这个元素需要显示的时候加载
    v-show是先把元素加载出来,然后通过样式display-none控制显示与隐藏
    涉及到频繁显示与隐藏的时候使用v-show,不需要频繁显示与隐藏的时候使用v-if
    例如搜索栏提示就可以使用v-if与v-show

6.v-for与v-if优先级谁更高?
    v-for优先级更高,v-for的时候dom元素刚开始渲染,v-if这个时候还无法判断,他们两个不能同时使用,可以在v-for之外包一个div写上v-if

7.methods    computed   watch 区别?
    methods是定义方法的区域,里面定义的方法需要调用才能触发,不具备缓存
    computed用来计算属性,watch用来监听state中的变化,
    computed支持缓存,当依赖的属性发生变化时,计算属性会重新计算,反之使用缓存中的属性
    watch不支持缓存,对应属性发生变化触发执行
    computed不支持异步有异步操作时无法监听数据变化,watch支持异步
    computed第一次加载就监听,watch第一次加载不监听,immedaite:true默认false,deep深度监听,不推荐,耗费性能
    computed调用return,watch不调用
    computed一个属性受多个属性影响,watch一个数据影响多条数据
    数据变化异步操作或者高性能操作推荐使用watch

8.vue组件通信,写组件的目的,要解决什么?props作用,组件化开发理解?
    父传子:在子组件上定义通信,子组件通过props进行接受,可以通过数组方式进行接受,也可以通过对象方式进行接受,如果父组件没有传递属性,
            子组件可以通过defult设置默认值

    子传父:子组件通过this.$emit(自定义事件,要传给父组件的数据),父组件通过自定义标签监听自定义事件,通过方法接受传过来的数据

    非父子组件通信:通过中央事件总线eventbus,需要创建一个空的js文件,倒出空的vue实例,传数据this.$bus.$emit传递,,
                    接收数据在钩子函数created中,this.$bus.$on接受,,第一个参数事件名称,第二个参数回调函数,包含要接受的数据,
                    以上就是非父子组件通信方式
    利用vuex进行组件通信把公共数据都存在vuex里面就可以实现组件之间都能使用这个数据
    利用v-modle实现组件通信 因为 v-model 就是 :value 和 @input 事件的合写 如果在⼀个⼦组件上使⽤ v-model 也能实现⽗⼦组件之间的通信
    本地存储
    利用ref和refs
    .sync 修饰符
    `$parent和$children`在⼦组件内可以直接通过$parent对⽗组件进⾏操作,在⽗组件内可以直接通过$children 对⼦组件进⾏操作
                        在⽗组件调⽤⼦组件时候要加下标也就是$children 是⼀个数组 因为可以有很多个⼦组件

    provide 和 inject   ⽗组件通过通过 provide 提供变量 ⼦组件中通过 inject 注⼊变量,不论嵌套了⼏层⼦组件 都能通过 inject
                        来调⽤ provide 的数据

    $attr+$listener 如果⽗组件 A 下⾯有⼦组件 B ⼦组件 B 下⾯⼜有⼦组件 C 如果 a 组件的变量和⽅法想要传给组件 C 的时候 就
                    ⽤到这个⽅法 适⽤于多级组件传值
                    在 B 组件中给 C 组件绑定 v-bind="$attrs" v-on="$listeners" 然后在 C 组件中就可以直接使⽤ a 传来
                    的属性和⽅法了(简单来说:$attrs与$listeners 是两个对象,$attrs ⾥存放的是⽗组件中绑定的⾮ Props 属
                    性,$listeners ⾥存放的是⽗组件中绑定的⾮原⽣事件。)
    组件通信⽬的:传递或共享某些数据,解决组件间数据⽆法共享的问题
        props选项作⽤:设置和获取标签上的属性值的
        vue组件化理解:
        1.组件是独⽴和可复⽤的代码组织单元。组件系统是Vue核⼼特性之⼀,它使开发者使⽤⼩型、独⽴和通常可复⽤的组
        件构建⼤型应⽤;
        2.组件化开发能⼤幅`提⾼应⽤开发效率、测试性、复⽤性`等;
        3.组件使⽤按分类有:⻚⾯组件、业务组件、通⽤组件;
        4.vue的组件是基于配置的,我们通常编写的组件是组件配置⽽⾮组件,框架后续会⽣成其构造函数,它们基于
        VueComponent,扩展于Vue;
        5.vue中常⻅组件化技术有:属性prop,⾃定义事件,插槽等,它们主要⽤于组件通信、扩展等;
        6.合理的划分组件,有助于提升应⽤性能;
        7.组件应该是⾼内聚、低耦合的;
        8.遵循单向数据流的原则。


9.$nextTick⽅法有什么作⽤?
        $nextTick也叫做异步更新队列⽅法,⽽$nextTick⽅法的主要作⽤就是等待dom元素加载完毕之后才会执⾏的回调函
        数,我们经常会在$nextTick⽅法⾥⾯`获取dom元素`

10.说⼀下什么是mvvm模式?
    MVVM 是Model代表数据模型,数据和业务逻辑都在Model层中定义;View代表UI视图,负责数据的展示;
    ViewModel负责监听Model中数据的改变并且控制视图的更新,处理⽤户交互操作;
    View 的变化会⾃动更新到 ViewModel , ViewModel 的变化也会⾃动同步到 View 上显示。这种⾃动同步是因
    为 ViewModel 中的属性实现了 Observer ,当属性变更时都能触发对应的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值