zoukankan      html  css  js  c++  java
  • vue进阶面试题

    1=>为什么data是一个函数 【理解】

    组件的data写成一个函数,
    这样每复用一次组件,就会返回一分新的data。
    也就说:给每个组件实例创建一个私有的数据空间。
    各个组件维护各自的数据。
    如果单纯的写成对象形式,那么所有组件实例共用了一份data,就会造成一个变了全都会变的结果。
    data(){
        return{
            
        }
    }
    

    2=> Vue组件通讯有哪些方式?

    1、props(父给子) 和 $emit (子传递父) 很熟悉
    
    2、$parent 和 $children 获取单签组件的父组件和当前组件的子组件。
    
    3、$attrs 和 $listeners A -> B -> C。Vue2.4开始提供了$attrs和$listeners来解决这个问题。
    
    4、父组件中通过 provide 来提供变量,然后在子组件中通过 inject 来注入变量。(官方不推荐在实际业务中适用,但是写组件库时很常用。)
    
    5、$refs 获取组件实例。
    
    6、envetBus 兄弟组件数据传递,这种情况下可以使用事件总线的方式。
    
    7、vuex 状态管理。
    

    3=> vue的生命周期 8+2

    我们都知道vue常用的8个生命周期,但是这几个生命周期你熟悉吗
    activated keep-alive 专属,组件被激活时调用
    deactivated keep-alive 专属,组件被销毁时调用
    

    4=> 怎样理解 Vue 的单项数据流

    数据总是从父组件传到子组件,
    子组件没有权利修改父组件传过来的数据,[]
    只能请求父组件对原始数据进行修改。
    这样会防止从子组件意外改变父组件的状态,
    从而导致你的应用的数据流向难以理解。
    
    注意:在子组件直接用 v-model 绑定父组件传过来的 props 这样是不规范的写法,开发环境会报警告。
    如果实在要改变父组件的 props 值可以再data里面定义一个变量,并用 prop 的值初始化它,之后用$emit 通知父组件去修改。
    

    5=> v-if 和 v-for 为什么不建议一起使用

    v-for和v-if不要在同一标签中使用,
    因为解析时先解析v-for在解析v-if,[会消耗性能的哈]
    如果遇到需要同时使用时可以嵌套一层元素  <template></template>
    

    Vue 如何检测数组变化 [这个我不太理解]

    数组考虑性能原因没有用 defineProperty 对数组的每一项进行拦截,
    而是选择对7种数组(push,shift,pop,splice,unshift,sort,reverse)方法进行重写(AOP 切片思想)。
    所以在 Vue 中修改数组的索引和长度无法监控到。
    需要通过以上7种变异方法修改数组才会触发数组对应的watcher进行更新。
    

    Vue的父子组件生命周期钩子函数执行顺序 [这一部分自己确实不够了解]

    加载渲染过程
    父beforeCreate -> 父created -> 父beforeMount ->
    ->子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted
    
    子组件更新过程
    父beforeUpdate -> 子beforeUpdate -> 子updated -> 父updated
    
    父组件更新过程
    父beforeUpdate -> 父updated
    
    销毁过程
    父beforeDestroy -> 子beforeDestroy -> 子destroyed -> 父destroyed
    

    虚拟DOM是什么?有什么优缺点?

    [本节是一个重点,你需要多花一点时间去理解哈]

    由于在浏览器中操作DOM是很昂贵的。频繁操作DOM,
    会产生一定性能问题。这就是虚拟Dom的产生原因。
    Vue2的Virtual DOM 借鉴了开源库 snabbdom 的实现。
    Virtual DOM本质就是用一个原生的JS对象去描述一个DOM节点,是对真实DOM的一层抽象。
    
    优点:
    1、保证性能下限:框架的虚拟DOM需要适配任何上层API可能产生的操作,
    他的一些DOM操作的实现必须是普适的,所以它的性能并不是最优的;
    但是比起粗暴的DOM操作性能要好很多,
    因此框架的虚拟DOM至少可以保证在你不需要手动优化的情况下,依然可以提供还不错的性能,既保证性能的下限。
    2、无需手动操作DOM:我们不需手动去操作DOM,
    只需要写好 View-Model的 代码逻辑,框架会根据虚拟DOM和数据双向绑定,
    帮我们以可预期的方式更新视图,极大提高我们的开发效率。
    3、跨平台:虚拟DOM本质上是JavaScript对象,而DOM与平台强相关,
    相比之下虚拟DOM可以进行更方便地跨平台操作,例如服务器端渲染、weex开发等等。
    
    缺点:
    1、无法进行极致优化:虽然虚拟DOM + 合理的优化,
    足以应对大部分应用的性能需要,但在一些性能要求极高的应用中虚拟DOM无法进行针对性的极致优化。
    
    2、首次渲染大量DOM时,由于多了一层DOM计算,会比innerHTML插入慢。
    

    v-model 原理

    v-model 只是语法糖而已。
    v-model 在内部为不同的输入元素使用不同的 property 并抛出不同的事件。
    text 和 textarea 元素使用 value property 和 input 事件;
    checkbox 和 radio 使用 checked property 和 change事件;
    select 字段将 value 作为 prop 并将 change 作为事件。
    注意:对于需要使用输入法的语言,你会发现 v-model 不会在输入法组合文字过程中得到更新。
    在普通元素上:
    input v-model='sth' 
    input v-bind:value='sth' v-on:input='sth = $event.target.value'
    

    17、v-for为什么要加key

    如果不使用key,
    Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。
    key 是为Vue中Vnode的唯一标识,通过这个key,我们的diff操作可以更准确、更快速。
    更准确:因为带key就不是就地复用了,在sameNode函数 a.key === b.key 对比中可以避免就地复用的情况。所以更加准确。
    更快速:利用key的唯一性生成map对象来获取对应节点,比遍历方式块。
    

    本文的源地址:https://www.cnblogs.com/wenshaochang123/p/14888494.html

    作者:明月人倚楼
    出处:https://www.cnblogs.com/IwishIcould/

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!

    万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!

    想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

    支付宝
    微信
    本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    BZOJ 5018 [Snoi2017]英雄联盟
    BZOJ 4945 [Noi2017]游戏
    BZOJ4942 [Noi2017]整数
    BZOJ 2427 [HAOI2010]软件安装
    BZOJ 4870 [Shoi2017]组合数问题
    THINKPHP 全局404
    PHP 万能查询代码
    xml Array 相互转化
    JS 倒计时计算
    PHP 多态
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/15395353.html
Copyright © 2011-2022 走看看