热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Vue面试题相关知识点整理(2)vif与vshow相关、vfor相关、常见的Vue内置指令

整理了一部分最近看的Vue面试相关知识点目录一、v-if与v-show相关1.1v-if与v-show的区别1.2v-show指令是否算重排二、v-for相关2.1v-if

整理了一部分最近看的Vue面试相关知识点

目录

一、v-if 与 v-show相关

1.1 v-if 与 v-show的区别

1.2 v-show指令是否算重排

二、v-for相关

2.1 v-if 与 v-for 为什么不建议一起使用

2.2 v-for中key的作用

2.3 为什么v-for中key的不推荐使用随机数或index

2.4 v-for遍历对象时,是按什么顺序遍历的?如何保证顺序?

三、常见的Vue内置指令



一、v-if 与 v-show相关

1.1 v-if 与 v-show的区别


  • v-if:是真正的条件渲染,因为它会确保在切换过程中条件块内的监听器和子组件适当地销毁和重建;且v-if 是惰性的,只要条件渲染为假时,就是什么也不做,直到条件为真时,才会渲染条件块
  • v-show:首先 v-show 总是会先渲染条件块的,之后只是基于css中的display属性来控制条件块的显示/隐藏

因此 v-if 适用于不会频繁切换条件的场景;v-show适用于需频繁切换条件的场景

1.2 v-show指令是否算重排

v-show指令算是重排的。因为v-show本质是基于css中的display属性来控制条件块的显示/隐藏;而重排的定义是 渲染树中的节点信息发生大小、距离等改变,需重新计算各个节点和css具体的大小和位置。当display属性控制条件块显示/隐藏时,会改变节点的大小和渲染树的布局,从而导致重排。




二、v-for相关

2.1 v-if 与 v-for 为什么不建议一起使用

因为 v-if 与 v-for 之间是有优先级的。v-for 的优先级高于 v-if。这主要在vue源码中有体现,在vue.js 中的 genElement方法中里的 if - else if 判断,可以看出v-for执行的优先级高于v-if。(例如:beforeCreate 与 created 生命周期钩子,它们的优先级在源码中已经是设定好的了,先执行beforeCreate 再执行 create)

2.2 v-for中key的作用

key的作用:可以使vue的diff操作更加准确、快速

1. 虚拟DOM中key的作用:

key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:

2. 对比规则:

        (1)旧虚拟DOM中找到了与新虚拟DOM相同的key:

                ①. 若虚拟DOM中内容没变,直接使用之前的真实DOM!

                ②. 若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM

        (2)旧虚拟DOM中未找到与新虚拟DOM相同的key:

                创建新的真实DOM,随后渲染到页面

3. 用index作为key可能引发的问题:

        (1)若对数据进行:逆序添加、逆序删除等破坏顺序操作:

                会产生没有必要的真实DOM更新 ==> 界面效果没问题,但效率低

        (2)如果解构中还包含输入类的DOM:

                会产生错误DOM更新 ==> 界面出现问题

4. 开发中如何选择key?

        (1)最好使用每条数据的唯一标识作为key,比如id、手机号、学号、身份证等唯一值

        (2)如果不存在对数据的逆序添加、逆序删除等破坏顺序解构操作,仅用于渲染列表用于展示,使用index作为key是没有问题的
————————————————

Vue知识点整理(一)- Vue核心(4)- 列表渲染 - 1.3 key作用与原理(重要)


2.3 为什么v-for中key的不推荐使用随机数或index

因为在插入数据或者删除数据时,会导致后面数据的key绑定的index发生变化,进而导致重新渲染,效率会降低,同时也会导致渲染出错;当数据进行更改时,会通过key来判断虚拟DOM树是否进行了更改。如果发现了相同的dom-key就可以直接复用,减少渲染消耗。所以使用随机数或index作为key,会导致性能的浪费,并且使用index作为key可能导致渲染出错。

渲染出错的情况,例如:用v-for遍历list列表且以index作为key,其中list列表有item1、item2、item3,且都在checkbox表单控制元素上创建了双向的数据绑定,其中item2在勾选了checkbox。如果我们这时候删除了item1,就会导致item2, item3的key值绑定的index发生变化,使得checkbox勾选的变为了item3


2.4 v-for遍历对象时,是按什么顺序遍历的?如何保证顺序?


  1. 会先判读是否有iterator接口,如果有循环执行iterator.next() 方法
  2. 没有iterator的情况下,会调用Object.key()方法,在不同浏览器中,JS引擎不能保证输出顺序一致
  3. 保证对象的输出顺序,可以把对象放在数组中,作为数组元素

问题来源于GitHub,地址:[vue] vue使用v-for遍历对象时,是按什么顺序遍历的?如何保证顺序? · Issue #463 · haizlin/fe-interview · GitHub




三、常见的Vue内置指令
  1. v-on(@):用于监听DOM事件。例如:v-on:click、v-on:keyup
  2. v-bind(:):响应并更新DOM特性;主要用法:绑定属性,动态更新HTML元素上的属性
  3. v-model:数据双向绑定,用来在input、select、checkbox、radio等表单控制元素上创建双向的数据绑定
  4. v-show:条件渲染,基于css中的display属性控制条件块的 显示/隐藏
  5. v-if / v-else / v-else-if:条件渲染,控制条件块销毁和组建
  6. v-for:循环指令,注意:v-for优先级高于v-if,且key值不推荐使用随机数或index
  7. v-text:向其所在的节点中渲染文本内容,注意:v-test会替换掉节点中原本的内容
  8. v-html:向指定节点中渲染可包含html解构的内容,注意:v-html会替换掉节点中原本的内容
  9. v-cloak:本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。一般配合css中display属性来解决因网速慢时页面展示出{{xxx}}的问题
  10. v-once:v-once所在的节点在初次渲染后,就视为静态内容了。后续数据的改变不会引起    v-once所在的节点结构更新,可用于优化性能
  11. v-pre:跳过其所在节点的编译过程;可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译


推荐阅读
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在处理数据库中所有用户表的彻底清除时,目前尚未发现单一命令能够实现这一目标。因此,需要采用一种较为繁琐的方法来逐个删除相关表及其结构。具体操作可以通过编写PL/SQL脚本来实现,该脚本将动态生成并执行删除表的SQL语句。尽管这种方法相对复杂,但在缺乏更简便手段的情况下,仍是一种有效的解决方案。未来或许可以通过数据库管理工具或更高版本的数据库系统提供更简洁的处理方式。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 本项目通过Python编程实现了一个简单的汇率转换器v1.02。主要内容包括:1. Python的基本语法元素:(1)缩进:用于表示代码的层次结构,是Python中定义程序框架的唯一方式;(2)注释:提供开发者说明信息,不参与实际运行,通常每个代码块添加一个注释;(3)常量和变量:用于存储和操作数据,是程序执行过程中的重要组成部分。此外,项目还涉及了函数定义、用户输入处理和异常捕获等高级特性,以确保程序的健壮性和易用性。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 遗传算法中选择算子为何置于交叉算子和变异算子之前?本文探讨了这一问题,并详细介绍了遗传算法中常用的选择算子类型及其作用机制。此外,还分析了不同选择算子对算法性能的影响,为实际应用提供了理论依据。 ... [详细]
  • 本文探讨了在PHP中实现MySQL分页查询功能的优化方法与实际应用。通过详细分析分页查询的常见问题,提出了多种优化策略,包括使用索引、减少查询字段、合理设置缓存等。文章还提供了一个具体的示例,展示了如何通过优化模型加载和分页参数设置,显著提升查询性能和用户体验。 ... [详细]
author-avatar
一滴水
没事就吐槽!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有