2021Vue.js面试题汇总及答案【全网最全 建议收藏】(三)

简介: 2021Vue.js面试题汇总及答案【全网最全 建议收藏】

二、组件 Component


2.1.vue中如何编写可复用的组件 (编写组件的原则)


以组件功能命名


只负责ui的展示和交互动画,不要在组件里与服务器打交道(获取异步数据等)

可复用组件不会因组件使用的位置、场景而变化。尽量减少对外部条件的依赖。


2.2.如何让CSS只在当前组件中起作用?


在每一个Vue.js组件中都可以定义各自的CSS、 JavaScript代码。如果希望组件内写的CSS只对当前组件起作用,只需要在Style标签添加Scoped属性即可


2.3.keep-alive是什么?


如果需要在组件切换的时候,保存一些组件的状态防止多次渲染,就可以使用 keep-alive 组件包裹需要保存的组件。


两个重要属性,include 缓存组件名称,exclude 不需要缓存的组件名称。


2.4.如何在 Vue. js动态插入图片


对“src”属性插值将导致404请求错误。应使用 v-bind:src (简写:src)格式代替。


2.5.父子组件的生命周期顺序(可参照上方图解)


加载渲染过程:

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

子组件更新过程:父beforeUpdate->子beforeUpdate->子updated->父updated

父组件更新过程:父beforeUpdate->父updated

销毁过程:父beforeDestroy->子beforeDestroy->子destroyed->父destroyed


三、Vuex


3.1.vuex的核心概念


1.state => 基本数据

2.getters => 从基本数据派生的数据

3.mutations => 修改数据,同步

4.actions => 修改数据,异步 (Action 提交的是 mutation,而不是直接变更状态)

5.modules => 模块化Vuex


3.2.vuex是什么?怎么使用?哪种功能场景使用它?


Vuex 是一个专为 Vue.js 应用程序开发的状态管理器,采用集中式存储管理应用的所有组件的状态,主要是为了多页面、多组件之间的通信。


Vuex有5个重要的属性,分别是 State、Getter、Mutation、Action、Module,由 view 层发起一个 Action 给 Mutation,在 Mutation 中修改状态,返回新的状态,通过 Getter暴露给 view层的组件或者页面,页面监测到状态改变于是更新页面。如果你的项目很简单,最好不要使用 Vuex,对于大型项目,Vuex 能够更好的帮助我们管理组件外部的状态,一般可以运用在购物车、登录状态、播放等场景中。


3.3.多个组件之间如何拆分各自的state,每块小的组件有自己的状态,它们之间还有一些公共的状态需要维护,如何思考这块


1.公共的数据部分可以提升至和他们最近的父组件,由父组件派发

2.公共数据可以放到vuex中统一管理,各组件分别获取


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


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


2.如果被其他地方复用,这个很大几率上是需要的,如果需要,请将请求放入action里,方便复用,并包装成promise返回,在调用处用async await处理返回的数据。如果不要复用这个请求,那么直接写在vue文件里很方便


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


actions与mutations作用类似,都是可以对状态进行修改。不同的是actions是异步操作的。


actions是可以调用Mutations里的方法的

const actions={
  addActions(context){
    context.commit('add',10);//调用mutations中的方法
    setTimeout(()=>{context.commit('reduce')},5000)
  //  setTimeOut(()=>{context.commit('reduce')},3000);
    console.log('我比reduce提前执行');
  },
  reduceActions({commit}){
    commit('reduce');
  }
}


3.6.Vuex中actions和mutations的区别


Mutation 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数


const store = new Vuex.Store({
  state: {
    count: 1
  },
  mutations: {
    increment (state) {
      // 变更状态
      state.count++
    }
  }
})

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


Action 提交的是 mutation,而不是直接变更状态。


Action 可以包含任意异步操作

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    increment (context) {
      context.commit('increment')
    }
  }
})


3.7.怎么在组件中批量使用Vuex的state状态?


使用mapState辅助函数, 利用对象展开运算符将state混入computed对象中

import {mapState} from 'vuex' export default{ computed:{ ...mapState(['price','number']) } }


3.8.Vuex中状态是对象时,使用时要注意什么?


对象是引用类型,复制后改变属性还是会影响原始数据,这样会改变state里面的状态,是不允许,所以先用深度克隆复制对象,再修改。


四、Router


4.1.vue-router 路由模式有几种


1.Hash: 使用 URL 的 hash 值来作为路由。支持所有浏览器。 带#。如:http://localhost:8080/#/pageA。改变hash,浏览器本身不会有任何请求服务器动作的,但是页面状态和url已经关联起来了。


2.History: 以来 HTML5 History API 和服务器配置。参考官网中 HTML5 History 模式,不带#, 如:http://localhost:8080/ 正常的而路径,并没有#。基于HTML5的 pushState、replaceState实现


3.Abstract: 支持所有 javascript 运行模式。如果发现没有浏览器的 API,路由会自动强制进入这个模式。


4.2.vue-router如何定义嵌套路由


通过children 数组:

const router = new VueRouter({
  routes: [
    {
      path: "/parentPage",
      component: testPage,
      children: [
        {
          path: "/childrenA",
          component: childrenComponentA,
        },
        {
          path: "/childrenB",
          component: childrenComponentB,
        },
      ],
    },
    {
      // 其他和parentPage平级的路由
    },
  ],
});


4.3.vue-router有哪几种导航钩子?


1.全局导航钩子:router.beforeEach(to,from,next)

2.组件内的钩子beforeRouteEnter (to, from, next) beforeRouteUpdate (to, from, next) beforeRouteLeave (to, from, next)

3.单独路由独享组件 beforeEnter: (to, from, next)


参数:有to(去的那个路由)、from(离开的路由)、next(一定要用这个函数才能去到下一个路由,如果不用就拦截)最常用就这几种


4.4. $ route和$ router的区别


1.$route是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。


1.$route.path 字符串,对应当前路由的路径,总是解析为绝对路径如"/foo/bar"。


2. $route.params 一个 key/value 对象,包含了 动态片段 和 全匹配片段, 如果没有路由参数,就是一个空对象。


3. $route.query 一个 key/value 对象,表示 URL 查询参数。 例如,对于路径 /foo?user=1,则有$route.query.user == 1, 如果没有查询参数,则是个空对象


4. $route.hash 当前路由的hash值 (不带#) ,如果没有 hash 值,则为空字符串


5. $route.fullPath 完成解析后的 URL,包含查询参数和hash的完整路径。


6. $route.matched 数组,包含当前匹配的路径中所包含的所有片段所对应的配置参数对象。


7. $route.name 当前路径名字


8. $ route.meta 路由元信息


$router是“路由实例”对象包括了路由的跳转方法,钩子函数等

实例方法:


1、push


1.字符串this.$router.push('home')

2. 对象this.$router.push({path:'home'})

3. 命名的路由this.$router.push({name:'user',params:{userId:123}})

4.带查询参数,变成 /register?plan=123this.$router.push({path:'register',query:{plan:'123'}})

push方法其实和< router-link :to="…">是等同的。

注意:push方法的跳转会向 history 栈添加一个新的记录,当我们点击浏览器的返回按钮时可以看到之前的页面。


2、go

页面路由跳转

前进或者后退this.$router.go(-1) // 后退

3、replace

push方法会向 history 栈添加一个新的记录,而replace方法是替换当前的页面,

不会向 history 栈添加一个新的记录


4.5.路由之间跳转的方式


1.声明式(标签跳转)

2.编程式( js跳转)


4.6.active-class是哪个组件的属性


vue-router 模块 的router-link组件


4.7.vue-router实现路由懒加载(动态加载路由)


把不同路由对应的组件分割成不同的代码块,然后当路由被访问时才加载对应的组件即为路由的懒加载,可以加快项目的加载速度,提高效率


const router = new VueRouter({
  routes: [
    {
      path: '/home',
      name: 'Home',
      component:() = import('../views/home')
    }
  ]
})


4.8.怎么定义vue-router的动态路由以及如何获取传过来的动态参数?


在router目录下的index.js文件中,对path属性加上/:id

  1. 使用router对象的params id

目录
相关文章
|
2月前
|
JSON JavaScript 前端开发
Javascript基础 86个面试题汇总 (附答案)
该文章汇总了JavaScript的基础面试题及其答案,涵盖了JavaScript的核心概念、特性以及常见的面试问题。
50 3
|
2月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
3月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
3月前
|
JavaScript 前端开发
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
这篇文章主要讨论了axios的使用、原理以及源码分析。 文章中首先回顾了axios的基本用法,包括发送请求、请求拦截器和响应拦截器的使用,以及如何取消请求。接着,作者实现了一个简易版的axios,包括构造函数、请求方法、拦截器的实现等。最后,文章对axios的源码进行了分析,包括目录结构、核心文件axios.js的内容,以及axios实例化过程中的配置合并、拦截器的使用等。
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
|
3月前
|
JavaScript 前端开发 数据处理
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
这篇文章讨论了Vue中实现权限管理的策略,包括接口权限、路由权限、菜单权限和按钮权限的控制方法,并提供了不同的实现方案及代码示例,以确保用户只能访问被授权的资源。
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
|
12天前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
25 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
3月前
|
JavaScript 前端开发
【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
文章讨论了Vue项目目录结构的设计原则和实践,强调了项目结构清晰的重要性,提出了包括语义一致性、单一入口/出口、就近原则、公共文件的绝对路径引用等原则,并展示了单页面和多页面Vue项目的目录结构示例。
|
2月前
|
缓存 JavaScript 前端开发
vue面试题
vue面试题
165 64
|
1月前
|
JavaScript 前端开发
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
40 0
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
|
30天前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题