【前端面试题——vue3篇】(二)

简介: 【前端面试题——vue3篇】(二)

【前端面试题——vue3篇】(一)https://developer.aliyun.com/article/1399662


16.v-model的使用

表单控件在实际开发中是非常常见的,特别是对于用户信息的提交,需要大量的表单


Vue中使用v-model指令来实现表单元素和数据的双向绑定


  • 案例的解析:


  • 当我们在输入框输入内容时
  • 因为input中v-model绑定了message,所以会实时将输出的呢容传递给message,message发生改变。
  • 当message发生改变时,因为上面我们使用Mustache语法,将message的值参入到DOMZ中,所以DOM会发生相应的变化
  • 所以通过v-model实现了双向绑定


17.v-on可以监听多个方法吗

可以


 <div class="pa">
 <button v-on='
 {
     click:dianji,
     focus:focu,
     blur:blu
 }'>
监听多个方法的写法
</button>
 </div>

18.vue中过滤器有什么作用及详解

过滤器分为全局过滤器和局部过滤器,

全局过滤器可以在任何组件调用,局部过滤器只能在当前组件调用,

过滤器使用|管道符调用。可以串联使用。


19.EventBus注册在全局上时路由切换时会重复触发事件,如何解决

建议在created里注册,在beforeDestory移出

在组件内的beforeRouteLeave中移除事件监听


20.vuex有哪几种属性

  • state

state:state类似容器,包含应用的大部分状态

一个页面只能有一个state

状态存储是响应式的

不能直接改变 state 中的状态,唯一途径显式地提交mutations


  • mutations

mutations:更改store中的状态唯一方法就是提交mutation,它是同步的,每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。更改 Vuex 的 state 中的状态的唯一方法是提交 mutation。回调函数可以接受两个参数,第一个参数是state状态,第二个参数是 mutation 的载荷就是外面store.commit 传入额外的参数。

mutations其实就相当于我们vue里面的methods,也是定义方法的,只不过这个方法可以在多个组件调用就是了。

使用mutations中的方法格式: this.$store.commit(‘名称’)


  • getters

getters:相当于state的计算属性,从state派生出一些状态


  • actions

actions:Action 类似于 mutation,不同在于:

action 提交的是 mutation,而不是直接变更状态;

action可以进行任何异步操作,mutation不可以;


  • modules

modules:模块化管理,有多个state可以通过模块化import到index.js的module属性中,可直接进行调用。参考vue的组件化思想。


21.请详细说下你对vue生命周期的理解

vue2.0生命周期:

创建阶段

beforeCreate()创建前阶段,这个时候还不能使用data中的数据。

created()创建完成 最早可以使用data中的数据


挂载阶段

beforeMount:在挂载开始之前被调用: 相关的 render 函数首次被调用

mounted: 挂载完成,DOM节点挂载到实例上去之后调用该钩子


更新阶段

beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。

updated: 数据更新完成并且DOM更新完成后调用销


销毁阶段

beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用

destroved:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定


vue3.0


  • 去掉了vue2.0中的 beforeCreate 和 created 两个阶段,同样的新增了一个 setup
  • beforeMount 挂载之前 改名 onBeforeMount
  • mounted 挂载之后 改名 onMounted
  • beforeUpdate 数据更新之前 改名 onBeforeUpdate
  • updated 数据更新之后 改名 onUpdated
  • beforeDestroy 销毁前 改名 onBeforeUnmount,可在此进行清除定时器,进行事件监听,发布订阅。
  • destoryed 销毁后 改名 onUnmounted
  • errorCaptured 报错 改名 onErrorCaptured


总结

不难发现3.0中钩子函数最大的变化就是setup代替了2.0中的beforeCreate和created,而对应其它几个函数来说都是名称上发生了一些变化,其功能基本上还是一样的。


22.vue优点

  • vue作为一款轻量级框架,门槛低,上手快,简单易学。
  • vue可以进行组件化开发,数据与结构相分离,使代码量减少,从而提升开发效率,易于理解
  • vue最突出的优势在于对数据进行双向绑定,使用虚拟DOM
  • 相较于传统页面通过超链接实现页面跳转,vue会使用路由跳转不会刷新页面
  • vue是单页面应用,页面局部刷新,不用每次跳转都请求数据,加快了访问速度,提升了用户体验


23.单页面应用和多页面应用区别及优缺点

单页应用 页面跳转---->js渲染

优点:页面切换快 缺点:首屏加载稍慢,seo差


多页应用 页面跳转---->返回html

优点:首屏时间快,seo效果好 缺点:页面切换慢


24.vue路由跳转传参的方式有哪些

在template中可以使用标签实现跳转。


  • router-link 标签直接拼接参数实现跳转

   点击跳转


<router-link to="/t?index=1">
     <button class="btn btn-default">点击跳转</button>
</router-link>


  • router-link 标签使用to属性结合query实现跳转,里面是参数字典

 

<router-link :to="{path:'/t',query: {index: 1}}">
     <button class="btn btn-default">点击跳转</button>
</router-link>


  • this.$router.push() (@click函数里面调用)


this.$router.push({path: '/路径?参数=1'})
接收参数
this.$route.query.index


  • query和 params区别
  • query类似 get, 跳转之后页面 url后面会拼接参数,类似?id=1, 非重要性的可以这样传,密码之类还是用params刷新页面id还在
  • params类似 post, 跳转之后页面 url后面不会拼接参数 , 但是刷新页面id 会消失


  • VUE几种路由跳转几种方式的区别
  • this.$router.push:跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面
  • this.$router.replace:跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)
  • this.$router.go(n):向前或者向后跳转n个页面,n可为正整数或负整数


25.vue遇到的坑,如何解决的

axios封装和api接口的统一管理


  • axios的封装,主要是用来帮我们进行请求的拦截和响应的拦截。
  • 在请求的拦截中我们可以携带userToken,post请求头、qs对post提交数据的序列化等。
  • 在响应的拦截中,我们可以进行根据状态码来进行错误的统一处理等等。
  • axios接口的统一管理,是做项目时必须的流程。这样可以方便我们管理我们的接口,在接口更新时我们不必再返回到我们的业务代码中去修改接口。


26.vue封装通用组件方法思路

点击查看


27.Vue.js中ajax请求代码应该写在组件的methods中还是vuex的actions中

如果请求来的数据是不是要被其他组件公用,仅仅在请求的组件内使用,就不需要放入vuex 的state里。

如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用。


28.Vuex中如何异步修改状态

actions和之前讲的Mutations功能基本一样,不同点是,actions是异步的改变state状态,而Mutations是同步改变状态(会互相干扰).

actions 里面放我们函数,函数里面的参数context ,可以帮我们提交的mutations。主要逻辑其实就是在组件内部,调用actions之后,actions里面又去调用mutations,而mutations又去修改了state。


mutations:{
      increate(state){ //payload:携带参数
         state.counter++
      }
    },
    actions:{
       //放函数,
        increateAction(context){
            context.commit("increate")
        }
    }


import {useStore} from 'vuex'
import {onMounted} from "vue"
export default {
setup(){
    const store=useStore()
    onMounted(() => {
        store.dispatch("getHomeMutidata")
    }),
    return{
    }
}


29.刷新浏览器后,Vuex的数据是否存在?如何解决

vuex的数据在刷新浏览器后不会保存,

这是因为vuex实例store里的数据保存在运行内存中,页面刷新会重载vue实例,导致store里的数据丢失

解决方法:


  • 下载持久化存储插件,例如:vuex-along,vuex-persist、vuex-persistedstate
  • 使用localStorage 或者 sessionStroage


30.vuex中的辅助函数怎么使用

  • mapState

mapState 函数返回的是一个对象。通常,我们需要使用一个工具函数将多个对象合并为一个,以使我们可以将最    终对象传给 computed 属性。自从有了对象展开运算符,我们可以极大地简化写法:(使用扩展运算符)

  • mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性
  • 使用 mapMutations 辅助函数将组件中的 methods 映射为 store.commit,其原理就是将this.montify 映射为this.$store.commit(‘montify’)
  • 在组件中使用 this.$store.dispatch(‘prodect’) 分发 action,或者使用 mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用


【前端面试题——vue3篇】(三)https://developer.aliyun.com/article/1399695

相关文章
|
1月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
137 2
|
12天前
|
资源调度 前端开发 JavaScript
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第10天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤,包括安装依赖、创建混淆脚本、修改 `package.json` 脚本命令、构建项目并执行混淆,以及在 HTML 文件中引用混淆后的文件。通过这些步骤,可以有效提高代码的安全性。
|
25天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
25天前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
27天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
61 1
|
30天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
30天前
|
监控 JavaScript 前端开发
前端的混合之路Meteor篇(六):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统
本文介绍了 Meteor 3.0 中的发布-订阅模型,详细讲解了如何在服务器端通过 `Meteor.publish` 发布数据,包括简单发布和自定义发布。客户端则通过 `Meteor.subscribe` 订阅数据,并使用 MiniMongo 实现实时数据同步。此外,还展示了如何在 Vue 3 中将 MiniMongo 的 `cursor` 转化为响应式数组,实现数据的自动更新。
|
1月前
|
前端开发 JavaScript 安全
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
在vue前端开发中基于refreshToken和axios拦截器实现token的无感刷新
104 4
|
15天前
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
|
1月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
88 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化

热门文章

最新文章

下一篇
无影云桌面