(适趣AI)Vue笔试题

📑前言

本文主要是【Vue】——(适趣AI)Vue笔试题的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见

目录

    • 📑前言
    • 1.请简述Vue.js的生命周期函数及其执行顺序
    • 2.Vue.js中的v-bind指令和v-model指令有什么区别?
    • 3.简述Vue.js的组件通信方式及其优缺点。
      • 3.1 props
      • 3.2 provide inject
      • 3.3 Vuex
    • 4.Vue.js如何实现父子组件之间的数据传递
    • 5.请简述Vue.js中的响应式原理。
    • 6.如何在Vue.js中实现路由跳转?
    • 7.Vue.js中的computed和watch有什么区别?
    • 8.Vue.js中的v-for指令和v-if指令有什么区别
    • 9.请简述Vue.js中的mixins和extends的作用及其区别。
      • mixins
      • extends
      • 区别
    • 10.Vue.js中的keep-alive组件有什么作用? 如何使用
    • 📑文章末尾

1.请简述Vue.js的生命周期函数及其执行顺序

  • Vue生命周期函数有8个。
  • Vue生命周期函数有四个阶段:
    • 1.实例创建之前/之后
    • 2.组件挂载之前/之后
    • 3.数据改变视图之前/之后
    • 4.实例销毁之前/之后。

顺序:

  • beforeCreate,created
  • beforeMount,mounted
  • beforeUpdate,updated
  • beforeDestory,destoryed

扩展:每个钩子可以做什么:

1.实例创建之前/之后:

  • beforeCreate(实例创建之前):每个页面都是一个Vue实例,这时实例还没创建,所以data还不知道,也不能用watch监听,这时data和methods的钩子函数都不能使用。
  • created(实例创建之后):实例已经创建完,可以得到data,调用watch,但是页面还是空白的,是最早可以使用data和methods的钩子函数。

2.组件挂载之前/之后:

  • beforeMount(组件挂载之前):页面挂载前,这时节点还没渲染完成。
  • mounted(组件挂载之后): 页面挂载完成,页面的内容已经渲染出了,也可以访问到dom,此时模版渲染完成。

created和mounted的区别:

  • created:实例创建完成之后,最早可以使用data和methods的钩子函数
  • mounted: 组件挂载之后,此时模版渲染完成,挂载的节点。
  • created和mounted都可以请求axios

3.数据改变视图更新之前/之后:

  • beforeUpdate(数据改变更新视图之前): 数据改变更新视图之前,就是虚拟DOM打补丁之前,这时访问到的DOM还有原有的DOM。
  • updated(数据改变视图更新之后):数据改变视图更新之后。

4.实例销毁之前/之后:

  • beforeDestory(实例销毁之前):在destory阶段,对data的改变不会再触发周期函数,说明此时Vue实例已经解除了事件监听以及和dom的绑定,但是dom结构依然存在,是最后一次可以使用data和methods的钩子函数。
  • destoryed(实例销毁之后):实例已经被完全销毁。

执行顺序:

2.Vue.js中的v-bind指令和v-model指令有什么区别?

  • v-bind是一个单向数据绑定,映射关系:Model->View,我们不需要额外的DOM操作,只需要进行Model的操作就可以实现视图的联动更新。
  • v-model是一个双向数据绑定,映射关系:View接受的数据传给model,model的数据再传给view。把model绑定到view的同时也将view绑定到model上,这样就既可以通过更新model来实现view的自动更新,也可以通过view来实现model数据的更新。所以,当我们用javascript代码更新model时,view就会自动更新,反之,如果用户更新了view,model的数据也自动被更新了。

3.简述Vue.js的组件通信方式及其优缺点。

3.1 props

  • props通信方式是大家常见的通信类型,也是父子组件通讯的常用方式,用法是直接在子组件标签中绑定属性和方法,用props拿到声明的属性。对于父组件的方法,可以通过this.$emit触发
  • 优点: props传递数据的优点显而易见,可以对props数据进行数据计算、数据监听等处理,十分灵活方便,但这里单单只是父子一层。
  • 缺点:子组件虽然不能直接对父组件prop进行重新赋值,但父组件是引用类型的时候,子组件可以修改父组件的props下面的属性。

3.2 provide inject

  • 此方法是在父组件上通过provide 将方法,属性,或者是自身实例暴露出去,子孙组件、插槽组件,甚至是子孙组件的插槽组件,通过inject把父辈provide引进来。提供给自己使用,很经典的应用的案例就是element-ui中el-form和el-form-item

3.3 Vuex

  • vuex算是vue中处理复杂组件通信的最佳方案,毕竟vue和vuex一个娘胎里出来的。而且vuex底层也是用vue实现的。
  • 优点:1.根本解决复杂组件的通信问题 2.支持异步组件通信
  • 缺点:流程相比较稍微复杂。

4.Vue.js如何实现父子组件之间的数据传递

第一种:父组件->子组件

父组件通过 :area方式,将areaData的数据传递给子组件,子组件通过props接收父组件传递的数据。

第二种: 子组件 ->父组件

子组件通过this.$emit(‘方法名’,‘数据’)将数据传递给父组件,父组件执行@change=‘handleChange’,handleChange方法的参数step,就是子组件传递过来的数据。

5.请简述Vue.js中的响应式原理。

vue3响应式原理

vue3.x为数据响应式,是通过proxy实现的。

  • 相关设计模式
    • 观察者模式(Observer pattern):指的是在对象间定义一个一对多(被观察者与多个观察者)的关联,当一个对象改变了状态,所有其他相关对象都会被通知并且自动刷新。
    • 发布订阅模式(Publish-subscribepattern):可认为是为观察者模式解耦的进阶版本。
    • 在发布者和订阅者之间添加消息中心,所有的消息均通过消息中心管理,而发布者与订阅者不会直接联系,实现了两者的解耦。

6.如何在Vue.js中实现路由跳转?

1.router-link (实现跳转最简单的方法)

<router-link to='需要跳转到的页面的路径'>

2.this.$router.push(‘vue路由’)

3.this.router.replace(‘vue路由’)

7.Vue.js中的computed和watch有什么区别?

在vue.js中,computed和watch是两个常用的属性,用于处理数据的监听和响应。

  • 1.computed属性: computed属性用于定义一个计算属性,它根据其他属性的值计算出一个新的值。计算属性是基于他们的依赖进行缓存的,只有当依赖发生变化时,计算属性才会重新计算。
new Vue({data: {firstName: 'John',lastName: 'Doe'},computed: {fullName: function() {return this.firstName + ' ' + this.lastName;}}
});
  • 2.watch属性:watch属性用于监听一个属性的变化,并在变化发生时执行响应的操作。与computed不同,watch属性是一个对象,需要为需要监听的属性提供一个处理函数。

    new Vue({data: {firstName: 'John',lastName: 'Doe',fullName: ''},watch: {firstName: function(newVal, oldVal) {this.fullName = newVal + ' ' + this.lastName;},lastName: function(newVal, oldVal) {this.fullName = this.firstName + ' ' + newVal;}}
    });

    computed和watch都可以用于监听属性的变化并执行相应的操作

    computed和watch的区别

    • computed是基于它们的依赖进行缓存的,只有当依赖发生变化时,计算属性才会重新计算;而watch则是在属性变化时立即执行相应的操作。
    • computed适用于那些需要根据其他属性计算出一个新值的场景;而watch适用于那些需要在属性变化时执行异步或开销较大的操作的场景。
    • computed可以像属性一样直接访问,而不需要调用函数;而watch则需要定义处理函数,并在函数中执行相应的操作。

8.Vue.js中的v-for指令和v-if指令有什么区别

  • v-if指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回true值的时候被渲染。
  • v-for指令基于一个数组来渲染一个列表。v-for指令需要使用item in items形式的特殊语法,其中items是源数据数组或者对象,而item则是被迭代的数组元素的别名。
  • 在v-for的时候,建议设置key值,并且保证每个key值都是独一无二的,这方便diff算法进行优化。

9.请简述Vue.js中的mixins和extends的作用及其区别。

mixins

  • mixins选项接受一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项。这些选项将会被合并到最终的选项中,使用的是和Vue.extend()一样的选项合并逻辑。

    mixins的几个规则:

    • 一、触发生命周期钩子函数时,先触发mixins组件中的钩子,再调用组件自身的函数。
    • 二、当mixins数组中有watch,混入的组件中也存在watch,而且watch中的key相同时,混入组件中的watch会先触发,而后再是组件中的watch触发
    • 三、虽然也能在建立mixin时添加data、template属性,但当组件自身也拥有此属性时以本身为准,从这一点也能看出制做者的用心(扩充)。
    • 四、data、methods内函数、components和directives等键值对格式的对象均以组件自身或实例为准,组件自身没有定义才会去mixins混入的组件中去找。
    • 五、watch,mixins数组中的组件和组件自身的watch会合并在一个数据中,mixins中的组件中的watch会先运行,而后再是组件自己的watch
    • 六、mixins选项合并:当组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”。数据对象在内部会进行递归合并,在有同名的keys时以组件数据优先。

    extends

    • 允许声明扩展另一个组件(可以是一个简单的选项对象或构造函数),而无需使用Vue.extend,这主要是为了便于扩展单文件组件。
    • extends与mixins相似;合并规则和mixins一致,extends容许声明扩展另外一个组件(能够是一个简单的选项对象或构造函数),而无需使用Vue.extend。这主要是为了便于扩展单文件组件。
    • mixins和extends是为了扩展组件,均可以理解为继承。

区别

  • 1.mixins接收对象数组(可理解为多继承),extends接收的是对象(可理解成单继承)
  • 优先级>extends>mixins,继承钩子函数的时候,是不进行覆盖的,extends的钩子函数先触发,而后再是mixins的钩子函数触发,最后就是组件自身的钩子函数触发。
  • mixins类似于面向切面的编程(AOP),extends类似于面向对象的编程。

10.Vue.js中的keep-alive组件有什么作用? 如何使用

  • keep-alive是vue的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁他们,和transition相似,keep-alive是一个抽象组件:它自身不会渲染成一个DOM元素,也不会出现在父组件链中。

作用

  • 在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。

使用

1.Props

  • include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
  • exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
  • max - 数字。最多可以缓存多少组件实例。

2.生命周期函数

1.activated

  • 在keep-alive组件激活时调用
  • 该钩子函数在服务器端渲染期间不被调用

2.deactivated

  • 在keep-alive组件停用时调用
  • 该钩子在服务器渲染期间不被调用

3.缓存所有页面

  • 1.在App.vue里面

4.根据条件缓存页面

  • 1.在App.vue里面

5.结合Router,缓存部分页面

  • 1.在router目录下的index.js文件里
  • 在App.vue里面

📑文章末尾

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326820.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础语法(一)(1)

常量和表达式 在这里&#xff0c;我们可以把Python当成一个计算器&#xff0c;来进行一些算术运算 例如&#xff1a; print(1 2 - 3) print(1 2 * 3) print(1 2 / 3)注意&#xff1a; print是一个python内置的函数&#xff0c;这个稍后我们会进行介绍 可以使用-*/&…

数据库攻防学习之MySQL

MySQL 0x01mysql学习 MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统&#xff0c;它具有客户机/服务器体系结构的分布式数据库管理系统。可以免费使用使用&#xff0c;用的人数很多。 0x02环境搭建 这里演示用&#xff0c;phpstudy搭建的…

Scrum的工件

我们采用了Scrum进行开发方面的管理&#xff0c;那么所有的计划和工作都应该是透明的&#xff0c;这给了我们检查这些东西的机会&#xff0c;以便能够即时做出调整来适应即将发生的变化。 那么Scrum为我们设计了一些工件帮助我们检查我们的工作和计划&#xff0c;每个工件都有…

MySQL--基础篇

这里写目录标题 总览MySQl各个阶段基础篇总览 MySQL概述数据库相关概念查看本机MySQL版本号启停mysql打开windows服务管理windows命令行启停 连接mysql客户端mysql运行逻辑数据模型关系型数据库 总结 SQL总览SQL通用语法SQL语句分类DDL数据库操作表操作查询表创建表结构数据类型…

springboot + vue3实现增删改查分页操作

springboot vue3实现增删改查分页操作 环境最终实现效果实现功能主要框架代码实现数据库后端前端 注意事项 环境 jdk17 vue3 最终实现效果 实现功能 添加用户&#xff0c;禁用&#xff0c;启用&#xff0c;删除&#xff0c;编辑&#xff0c;分页查询 主要框架 后端 spri…

【Python学习】Python学习3-变量类型

目录 【Python学习】Python学习3 前言变量赋值多个变量赋值标准数据类型Python Numbers(数字)Python List&#xff08;列表&#xff09;Python Tuple&#xff08;元组&#xff09;Python Dictionary&#xff08;字典&#xff09; Python数据类型转换总结参考 文章所属专区 Py…

商品砍价系统设计原理与实践:技术解析与注意事项

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

AOP(面向切面编程)基于XML方式配置

概念解释&#xff1a;&#xff08;理解基本概念方可快速入手&#xff09; 连接点&#xff08;joinpoint&#xff09; 被拦截到的点&#xff0c;因为Spring只支持方法类型的连接点&#xff0c;所以在Spring中连接点指的就是被拦截到的方法。 切入点&#xff08;pointcut&#x…

ROS-arbotix安装

方式一&#xff1a;命令行输入&#xff1a; sudo apt-get install ros-melodic-arbotix如果ROS为其他版本&#xff0c;可将melodic替换为对应版本。 方式二&#xff1a; 先从 github 下载源码&#xff0c;然后调用 catkin_make 编译 git clone https://github.com/vanadiumla…

数据库初始化脚本(用 truncate 命令一键清空某个数据库中全部数据表数据)

数据库初始化脚本&#xff08;用 truncate 命令一键清空某个数据库中全部数据表数据&#xff09; 1.执行下面的sql语句生成“清空数据库的sql脚本”2.执行“清空数据库的sql脚本” 在开发中&#xff0c;当数据表结构有变动或者数据库中有脏数据时&#xff0c;想要清空数据表中的…

使用jmeter从0开始完成性能测试

使用JMeter从0开始完成性能测试 介绍 在软件开发过程中&#xff0c;性能测试是一项关键任务&#xff0c;它可以帮助我们评估系统在不同负载条件下的性能表现&#xff0c;发现潜在的性能瓶颈。JMeter是一款功能强大且易于使用的性能测试工具&#xff0c;它可以帮助我们完成各种…

技术资讯:谷歌最新发布!2023年度最受欢迎的Chrome扩展榜单

大家好&#xff0c;我是大澈&#xff01; 本文约1300字&#xff0c;整篇阅读大约需要2分钟。 感谢关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费领取"面试礼包"一份&#xff0c;然后免费加入问答群&#xff0c;从此让解决问题的你不再孤单&#xff01…