No29.精选前端面试题,享受每天的挑战和学习

简介: No29.精选前端面试题,享受每天的挑战和学习

Vue中Style中的Scoped属性是如何实现样式隔离的

在 Vue 中,<style> 标签的 scoped 属性用于实现样式的隔离。当给 <style> 标签添加了 scoped 属性后,该样式仅适用于当前组件的作用域,不会影响其他组件。

实现样式隔离的原理是通过将组件的选择器的唯一哈希值添加到每个 CSS 选择器上,这样就确保了每个组件的样式都是唯一的,不会相互干扰。

例如,下面是一个使用了 scoped 属性的 Vue 组件示例:

<template>
  <div class="example">
    <p class="text">Hello, world!</p>
  </div>
</template>
<style scoped>
.example {
  background-color: red;
}
.text {
  color: blue;
}
</style>

在上述代码中,.example 类名和 .text 类名被编译成类似 [data-v-f3f3eg9] .example[data-v-f3f3eg9] .text 的形式,其中 [data-v-f3f3eg9] 是用于确保样式的唯一性的哈希值。

这样,只有具有相同哈希值的组件才会受到这些样式的影响,从而实现了样式的隔离。

需要注意的是,scoped 样式仅适用于当前组件,不会影响子组件或插槽内容中的样式。如果需要在子组件中应用相同的样式规则,可以使用 ::v-deep/deep/ 选择器来穿透样式隔离。

例如:

<style scoped>
.example >>> .child {
  color: red;
}
</style>

以上示例中使用了 >>> 来穿透样式隔离,将该样式应用于 .child 类名的子组件。

总结起来,Vue 中的 scoped 属性通过为每个组件生成唯一的哈希值,实现了样式在组件作用域内的隔离,确保了不同组件的样式不会相互干扰。

new Vue的Vue都经历了什么

当使用new Vue()创建一个新的Vue实例时,Vue经历了以下过程:

  1. 实例化Vue对象:通过new Vue()创建一个Vue实例,并初始化Vue的各种内部属性。
  2. 合并选项:Vue会将传入new Vue()构造函数的选项对象与全局Vue配置进行合并。合并后的选项对象包括datamethodscomputedwatch等组件选项,以及Vue特定的选项如eltemplate等。
  3. 数据响应式处理:Vue会对选项对象中的data进行响应式处理。它会使用Object.defineProperty或ES6的Proxy来劫持数据对象,为每个属性添加“get”和“set”方法,以便在数据变动时触发视图的更新。
  4. 模板编译:如果Vue实例的选项中提供了template,Vue会对模板进行编译。编译的过程将模板转换为渲染函数,用于生成虚拟DOM。
  5. 创建虚拟DOM:Vue使用编译得到的渲染函数来创建虚拟DOM节点树(Virtual DOM),它是一个以JavaScript对象的形式描述真实DOM的结构和属性。
  6. 挂载到DOM:Vue将虚拟DOM渲染成真实的DOM,并将其挂载到指定的目标元素上(由el选项指定)。
  7. 模板渲染:Vue根据响应式数据和虚拟DOM进行首次渲染。它会将数据绑定到模板中相应的位置,并将变动更新到视图上。
  8. 侦听器和计算属性的初始化:Vue会初始化watch选项中定义的侦听器,以及computed选项中定义的计算属性。
  9. 生命周期钩子:在实例创建完成后,Vue会依次触发一系列生命周期钩子函数,如createdmounted等。这些钩子函数提供了在特定阶段执行自定义逻辑的能力。
  10. 实例就绪:最后,Vue实例创建完成,可以通过调用实例的方法或访问其属性来与应用程序进行交互。

总结起来,通过new Vue(),Vue经历了实例化、选项合并、数据响应式处理、模板编译、创建虚拟DOM、挂载到DOM、模板渲染、侦听器和计算属性的初始化、生命周期钩子的触发等过程,使得Vue实例能够响应数据变化、生成并更新DOM,从而完成一个完整的Vue应用的构建和渲染过程。

听说vue3数据的响应性会丢失?

不准确。Vue 3 中的数据响应性并不会丢失,相反,Vue 3 在数据响应性方面进行了一些改进和优化。

在 Vue 2.x 版本中,Vue 使用了 Object.defineProperty 或者 ES6 的 Proxy 来实现数据的响应式。而这种实现方式在某些特定场景下存在性能问题,例如处理大量数据时的性能可能受到影响。

为了解决这个问题,Vue 3 引入了基于 Proxy 的响应式系统,取代了 Object.defineProperty。Proxy 提供了更强大、更灵活的拦截器机制,使得 Vue 3 在性能、功能和扩展性方面都有了显著的提升。

相较于 Vue 2.x,Vue 3 的响应式系统具有以下优势:

  1. 更好的性能:基于 Proxy 的响应式系统能够更高效地跟踪属性的变化,使得数据变更的检测和更新更加快速和准确。
  2. 更好的嵌套支持:在 Vue 3 中,多层嵌套对象的响应式也得到了优化和改善,使得嵌套对象的属性和数组中的元素都能被追踪和响应。
  3. 更好的类型推断:Vue 3 利用 TypeScript 的类型系统提供了更好的类型推断支持,使得开发者在编写代码时能够获得更好的类型检查和自动完成。

综上所述,Vue 3 并不会丢失数据的响应性,反而通过引入基于 Proxy 的响应式系统,提供了更好的性能和功能。因此,尽管在使用 Vue 3 时有一些变化和调整,但仍然可以放心地使用数据的响应性功能。

附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️⭐️)

Vue.js 和 Egg.js 开发企业级健康管理项目

带你从入门到实战全面掌握 uni-app

相关文章
|
2月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
56 0
|
1月前
|
前端开发 开发者 C++
独家揭秘:前端大牛们如何高效学习新技术,保持竞争力!
【10月更文挑战第31天】前端技术飞速发展,如何高效学习新技术成为关键。本文通过对比普通开发者与大牛们的策略,揭示了高效学习的秘诀:明确目标、主动探索、系统资源、实践应用和持续学习。通过这些方法,大牛们能更好地掌握新技术,保持竞争力。示例代码展示了如何通过实践加深理解。
50 4
|
2月前
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
37 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
1月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
66 1
|
3月前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
2月前
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
44 4
|
2月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
130 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
2月前
|
前端开发 JavaScript 小程序
前端新机遇!为什么我建议学习鸿蒙?
【10月更文挑战第4天】前端新机遇!为什么我建议学习鸿蒙?
132 0
前端新机遇!为什么我建议学习鸿蒙?
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
208 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
3月前
|
网络协议 算法 数据库

热门文章

最新文章