当前位置: 首页 > Web前端 > vue.js

Web前端必备Vue.js面试题

时间:2023-03-31 18:56:00 vue.js

优秀程序员web前端教程分享Vue.js面试题,1.渲染列表项时“key”属性的作用和重要性是什么?key属性允许Vue在渲染项目列表时跟踪每个Vnode。键值必须是唯一的。如果不使用key属性,并且列表的内容发生变化(例如当列表被排序时),VirtualDOM宁愿用更新的数据修补节点以反映变化,而不是向上或向下移动元素。这是默认模式,效果很好。当提供唯一键值时,元素将根据键的更改重新排序(而不是用新数据修补),如果键被删除(例如,删除列表中的项目时),相应的元素节点也被销毁或删除。请注意下图:这是一个呈现子组件列表的父组件。我们看到三个列表项呈现为三个子组件节点。这些子组件中的每一个都包含一个span标签、一个输入字段,并且可能还包含一个本地状态对象(可选)。现在让我们检查两种情况:当不使用key属性时:例如,如果列表已重新排序,Vue将简单地使用重新排序的数据修补已经存在的三个节点,而不是移动它们。只要用户不输入或更改这些子组件中的一个或多个的本地状态,这就可以正常工作。所以假设用户输入了组件编号为3的输入框,重新排序列表后,组件编号为3的span标签的内容会发生变化,但输入框会和用户输入的状态数据一起保留在这里。这是因为Vue不识别组件号3,它只是重新修补它看到的更新数据,即span标签的内容。当在子组件上使用key属性时,Vue知道该组件的身份,并且在重新排序列表时,将移动节点而不是修补它。这可确保手动编辑的输入以及整个组件移动到新位置。当有条件地渲染组件或元素时,key属性也可用于向Vue发出关于元素唯一性的信号,并确保该元素不会被新数据重新修补。2.您将如何在模板中呈现原始HTML?在模板中输出内容的典型方法是使用mustache语法标记从方法、属性或数据变量中输出数据。但是mustache标签呈现文本。如果您尝试使用mustache标签呈现HTML,它将呈现为文本字符串并且不会被解析。要将内容呈现和解析为html,我们可以使用v-html指令,如下所示。模板

复制代码AppApplicationnewVue({el:'#app',data:{title:'

Vue.js

'}});输出Vue.js如上例所示,v-html指令解析所有HTML,结果上面的语句将按需渲染。开发者必须在了解v-html的前提下使用。v-html的不当使用会使网站暴露于注入攻击,可能从外部源注入和执行恶意代码。3.什么是vue-loader?Vue-loader是Webpack的加载器模块,它允许我们以.vue文件格式编写单文件组件。单文件组件文件包含三个部分,模板、脚本和样式。vue-loader模块允许webpack使用单独的加载器模块(例如SASS或SCSS加载器)提取和处理每个部分。此设置允许我们使用.vue文件进行无缝编程。vue-loader模块还允许将静态资源视为模块依赖项并使用webpack加载程序进行处理。它还允许在开发过程中热重新加载。4.什么是混入?Mixins允许我们为Vue组件编写可插入和可重用的功能。如果你想跨多个组件复用一组组件选项,比如生命周期钩子、方法等,你可以将其写成mixin,并在组件中简单地引用它。然后将mixin的内容合并到组件中。如果你在mixin中定义了一个生命周期钩子,它在执行时将优先于组件自己的钩子。5、在开发过程中,如果你的Vue程序和后端API服务器不在同一台主机上运行,??如何代理API请求。假设使用Vue-CLI3进行设置?假设我们有一个在localhost:4040上运行的Node.js后端服务器。为了确保它在组件中被代理并可从组件访问,我们可以配置vue.config.js文件并包含一个devServer部分,如下所示:在localhost:4040上运行的Node.js后端服务器。为确保代理并使其可从组件访问,您可以配置vue.config.js文件并包含devServer部分,如下所示:在vue.config.js文件中:module.exports:{devServer:{proxy:{'/api':{target:'http://localhost:4040/api',changeOrigin:true}}}}6.prop如何指定其类型要求?可以通过实现prop验证选项来为单个props指定类型要求。这对生产没有影响,但会在开发过程中发出警告,帮助开发人员识别传入数据和道具的特定类型要求的潜在问题。配置三个props的例子:props:{accountNumber:{type:Number,required:true},name:{type:String,required:true},favoriteColors:Array}7.什么是虚拟DOM?文档对象模型或DOM定义了一个接口,允许像JavaScript这样的语言访问和操作HTML文档。元素由树中的节点表示,接口允许我们操作它们。但是这个接口是有代价的,大量非常频繁的DOM操作会减慢页面速度。Vue通过在内存中实现文档结构的虚拟表示来解决这个问题,其中一个虚拟节点(VNode)代表DOM树中的一个节点。当需要操作时,可以在虚拟DOM的内存中执行计算和操作,而不是在真实的DOM上执行。这自然会更快,并允许虚拟DOM算法找出更新实际DOM结构的最佳方式。一旦计算出来,它就会应用于实际的DOM树,从而提高性能,这就是Vue和React等基于虚拟DOM的框架脱颖而出的原因。8.什么是Vue插件?Vue插件允许开发人员构建全局级别的功能并将其添加到Vue。用于向程序添加全局可访问的方法和属性、资源、选项、mixin和其他自定义API。VueFire是一个Vue插件的例子,它添加了特定于Firebase的方法并将它们绑定到整个应用程序。然后,在此上下文中,程序结构中的任何位置都可以使用Firebase函数。9.什么是渲染函数?例如。Vue允许我们以多种方式构建模板,其中最常见的是仅使用带有特殊指令和mustache标签的HTML来实现响应功能。但您也可以使用称为渲染函数的特殊函数类通过JavaScript构建模板。这些函数非常接近编译器,这意味着它们比其他模板类型更高效、更快速。由于您使用JavaScript编写渲染函数,因此您可以自由使用该语言直接在需要的地方添加自定义函数。对于标准HTML模板的高级场景很有用。这是使用HTML作为模板的Vue程序newVue({el:'#app',data:{fruits:['Apples','Oranges','Kiwi']},template:`

水果篮

    {{fruit}}
`});下面是用渲染函数程序开发的同一个:newVue({el:'#app',data:{fruits:['Apples','Oranges','Kiwi']},render:function(createElement){returncreateElement('div',[createElement('h1','水果篮'),createElement('ol',this.fruits.map(function(fruit){returncreateElement('li',fruit);}))]);}});输出:FruitBasketApplesOrangesKiwi在上面的示例中,我们使用了一个返回一系列createElement()调用的函数,每个调用负责生成一个元素。虽然v-for指令适用于基于HTML的模板,但在使用渲染函数时,可以使用标准.map()函数简单地迭代fruits数据数组。10.哪个生命周期钩子最适合从API调用中获取数据?虽然这取决于组件的用途,但创建生命周期挂钩通常是放置API调用的好地方。此时组件的数据和响应功能可用,但组件尚未呈现。11.什么时候调用“updated”生命周期钩子?updated钩子将在响应数据更新和虚拟DOM重新渲染后被调用。它可用于执行与DOM相关的操作,但(默认情况下)不能保证子组件将被渲染,尽管这也可以通过在更新函数中使用this.$nextTick来确保。12.为什么在Vue实例中编写生命周期钩子或其他选项/属性时不使用箭头函数?箭头函数本身不定义this上下文,而是绑定到其父函数的上下文。当你在Vue程序中使用箭头函数(=>)时,this关键字没有绑定到Vue实例,因此会抛出错误。因此强烈建议改用标准函数声明。13.什么时候使用keep-alive元素?当由于数据属性或其他一些响应状态而动态切换组件时,它们将在每次切换到渲染状态时重新渲染。尽管您可能想要这种行为,但在某些情况下重新呈现可能不合适。例如在创建时从API调用中引入数据的组件。您可能不希望每次动态切换此组件进行渲染时都调用此API。此时,您可以将组件包装在一个保持活动状态的元素中。keep-alive元素缓存组件并从那里获取它,而不是每次都重新渲染它。14.在大型Vue应用程序中管理状态的推荐方法是什么?为什么?当程序在功能和代码方面增长时,状态管理变得困难,并且使用无穷无尽的下游网络道具和上游事件当然不是一个明智的决定。在这种情况下,有必要将状态管理转移到中央管理系统。Vuex是Vue生态系统中可用的,它是官方的状态管理库,也是集中存储状态的推荐模式。Vuex允许维护中央状态。组件使用Vuex作为反应式数据存储,并在状态更新时更新。多个或不相关的组件可以依赖于同一个中央存储。在这种情况下,Vue充当一个纯视图层。要修改状态,视图层(例如按钮或交互式组件)需要发出VuexAction,然后执行所需的任务。为了更新或修改状态,Vuex提供了Mutations。此工作流程的目的是留下可用的操作痕迹。15.什么是异步组件?当大型程序使用大量组件时,同时从服务器加载所有组件可能没有意义。在这种情况下,Vue允许我们定义在需要时从服务器异步加载的组件。在声明或注册组件时,Vue接受提供Promise的工厂函数。然后可以在调用该组件时对其进行“解析”。通过只加载必要的组件并将异步组件的加载推迟到未来的调用时间,可以节省带宽和程序加载时间。这是一个异步组件的简单示例。newVue({components:{'tweet-box':()=>import('./components/async/TweetBox')}});这样使用时,Webpack的code-splitting会被用来提供这个功能。