您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页每天10个vue面试题(八)

每天10个vue面试题(八)

来源:华佗小知识

1、Vue-router 路由跳转和 location.href 区别?

  • 使用 location.href= /url 来跳转,简单方便,但是刷新了页面;
  • 使用 history.pushState( /url ) ,无刷新页面,静态跳转;
  • 引进 router ,然后使用 router.push( /url ) 来跳转,使用了 diff 算法,实现了按需加载,减少了 dom 的消耗。其实使用 router 跳转和使用 history.pushState() 没什么差别的,因为vue-router就是用了 history.pushState() ,尤其是在history模式下。

2、vuex是什么?   

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。


3、vuex实现原理?

1. store是怎么注册的?

  • Vuex在vue的生命周期中的初始化钩子前插入一段Vuex初始化代码,给Vue的实例注入一个$store的属性,这就是为什么我们在Vue的组件中可以通过this.$store.xxx,访问到Vuex的各种数据和状态

2. mutation,commit是怎么实现的?

  • mutation 在源码中:registerMutation 是对store的mutation的初始化。接受4个参数,store为当前Store实例,type为mutation的key,handler为mutation执行的回调函数,path为当前模块的路径
  • mutation的作用就是同步修改当前模块的state
  • 函数首先通过type拿到对应的mutation对象数组,
  • 然后把一个mutation的包装函数push到这个数组中
  • 这个函数接收一个参数payload,这就是我们在定义mutation的时候接收的额外参数
  • 这个函数执行的时候会调用mutation的回调函数
  • 并通过getNestedState(store.state,path)方法得到当前模块的state
  • 和playload一起作为回调函数的参数
  • commit 支持3个参数,type表示mutation的类型,payload表示额外的参数,根据type查找对应的mutation,找不到就输出一条错误信息,否则遍历这个type对应的mutation对象数组,执行handler(payload)方法,这个方法就是之前定义的wrappedMutationHandler(handler), 执行它就相当于执行了registerMutation注册的回调函数

4、什么情况下使用vuex?

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。如果不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果需要构建一个中大型单页应用,很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。


5、vuex辅助函数有哪些?

Vuex提供了mapState、MapGetters、MapActions、mapMutations等辅助函数给开发在vm中处理store


6、vuex属性包含哪些?

有五种,分别是 State、Getter、Mutation 、Action、Module

  • state => 基本数据(数据源存放地)
  • getters => 从基本数据派生出来的数据
  • mutations => 提交更改数据的方法,同步
  • actions => 像一个装饰器,包裹mutations,使之可以异步。
  • modules => 模块化Vuex

7、mutation和action有什么区别?

  • Mutation专注于修改State,理论上是修改State的唯一途径;Action业务代码、异步请求。
  • Mutation:必须同步执行;Action:可以异步,但不能直接操作State。
  • 在视图更新时,先触发actions,actions再触发mutation
  • mutation的参数是state,它包含store中的数据;action的参数是context,它是 state 的父级,包含 state、getters

8、vuex工作流程?

  • 通过new Vuex.Store()创建一个仓库 state是公共的状态,state--->components渲染页面
  • 在组件内部通过this.$store.state.属性 来调用公共状态中的state,进行页面的渲染。
  • 当组件需要修改数据的时候,必须遵循单向数据流。通过this.$store.dispatch来触发actions中的方法
  • actions中的每个方法都会接受一个对象 这个对象里面有一个commit方法,用来触发mutations里面的方法
  • mutations里面的方法用来修改state中的数据 mutations里面的方法都会接收到2个参数 一个是store中的state,另外一个是需要传递的参数
  • 当mutations中的方法执行完毕后state会发生改变,因为vuex的数据是响应式的 所以组件的状态也会发生改变

9、Vuex和单纯的全局对象有什么区别?

  • Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  • 不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样可以方便地跟踪每一个状态的变化,从而能够实现一些工具帮助更好地了解我们的应用。

10、Vuex的mutation为什么不能做异步操作?

  • 原因是因为mutation必须是同步函数。这是因为Vuex的设计原则是通过mutation来改变状态,而状态改变后,视图会立即更新。如果mutation中是异步操作,那么当状态改变时,视图可能还没有更新完成,这会导致视图和状态不一致的情况。
  • 另外,如果mutation中进行异步操作,那么就无法保证状态的改变是按照预期的顺序执行的,这可能会导致一些难以预料的问题。
  • 如果需要进行异步操作,可以在action中进行。action可以包含任意异步操作,当异步操作完成后,再通过调用mutation来改变状态。这样可以保证状态的改变是按照预期的顺序执行的,同时也保证了视图和状态的一致性。
  • 除了保证状态改变的一致性和可预测性,Vuex要求mutation必须是同步函数还有另一个重要的原因,那就是为了确保devtools中的时间旅行功能可以正常使用。

    

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务