VueX 高频面试题及真实口语化答案_第1页
VueX 高频面试题及真实口语化答案_第2页
VueX 高频面试题及真实口语化答案_第3页
VueX 高频面试题及真实口语化答案_第4页
VueX 高频面试题及真实口语化答案_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VueX高频面试题及真实口语化答案一、基础认知类(入门必问)1.说说你对Vuex的理解?为什么要用Vuex?参考答案:Vuex是Vue官方的全局状态管理工具,说白了就是把项目里需要多个组件共享的数据,统一放到一个公共仓库里管理。正常项目里,父子组件传值用props、子父用事件、兄弟组件靠父组件中转,但是项目大了之后,多层嵌套、跨页面、跨组件传值会特别乱,传值链条很长,维护起来麻烦。用Vuex的好处就是:数据统一管理、一处修改多处生效、方便全局复用、方便调试和维护。简单场景比如用户登录态、全局弹窗、购物车数据、全局配置,都适合放Vuex。2.Vuex和全局变量有什么区别?参考答案:普通全局变量可以随便改,不受约束,谁都能改,出了问题不知道哪个组件改的,调试困难。Vuex的state数据不能直接手动修改,必须通过mutations修改,所有数据变更都可追踪、可回溯,符合Vue单向数据流的规范。而且Vuex的数据是响应式的,全局普通变量不具备响应式,改了页面不会自动更新。3.Vuex的核心属性有哪些?各自作用是什么?参考答案:一共五个核心属性,我按使用逻辑说:state:公共数据源,存所有全局状态,相当于仓库的仓库底子mutations:唯一修改state的地方,同步方法,用来改数据actions:处理异步操作,比如接口请求,不能直接改state,要通过commit调用mutation改getters:相当于全局计算属性,对state数据做二次加工、筛选、计算modules:模块化拆分,项目大了之后拆分多个模块,避免state臃肿、命名冲突二、核心原理与用法(面试高频)4.mutations为什么必须是同步的?actions为什么专门处理异步?参考答案:核心原因是为了调试工具可以精准追踪数据变化。如果mutation里写异步,比如定时器、接口请求,数据修改的时机不确定,Vuex的devtools就捕捉不到准确的变更记录,出bug没法溯源。所以官方规定:mutation只做同步数据修改,保证每一次数据变更都是可追踪、可回溯的。异步逻辑全部放到actions里,actions等异步结束后,再commitmutation修改数据,分工明确。5.能不能在actions里直接修改state?参考答案:语法上可以直接改,不会报错,但是绝对不推荐、项目里禁止这么写。因为直接修改的话,devtools无法跟踪数据变化,丢失了Vuex的设计意义,后续排查问题完全没有线索,代码也不规范,不符合单向数据流。6.getters和直接取state数据有什么区别?参考答案:如果只是单纯取值,两者没区别。但如果需要对数据做处理,比如筛选、过滤、拼接、计算、判空,就必须用getters。getters是缓存式的计算属性,依赖的state不变的话,多次调用不会重复计算,性能更好。而且统一封装处理逻辑,不用每个组件都写一遍相同的处理代码,复用性更高。7.commit和dispatch的区别?参考答案:commit:调用mutations,同步操作,用来修改state数据dispatch:调用actions,支持异步,用来发请求、做异步逻辑简单记:同步改数据用commit,异步逻辑用dispatch。三、模块化Module相关(中高级必问)8.Vuex模块化怎么用?默认有什么坑?怎么解决?参考答案:项目大了之后,我会按业务拆分模块,比如user模块、cart模块、order模块,每个模块单独写state、mutations、actions、getters。默认坑点:模块化之后,state是局部的,但是mutations、actions、getters是全局的,不同模块如果方法名重名,会相互覆盖、重复执行。解决方式:给每个模块开启namespaced:true命名空间,开启之后,所有方法和状态都是局部的,不会全局污染,调用的时候需要带上模块路径。9.开启namespaced之后,怎么调用模块里的方法和数据?参考答案:三种常用方式,项目里经常用:直接原生写法:this.$store.state.模块名.属性、this.$mit('模块名/方法名')辅助函数写法:mapState、mapMutations等传第二个参数模块名createNamespacedHelpers单独生成模块辅助函数,代码更简洁10.模块里怎么访问根仓库的state和getters?参考答案:模块化的actions和mutations里,参数会有rootState、rootGetters,通过这两个属性就能拿到根仓库的全局数据,跨模块取值也可以用这个。四、辅助函数实操题(面试常问实操)11.说说mapState、mapGetters、mapMutations、mapActions的作用和使用场景参考答案:这四个辅助函数就是为了简化代码,避免页面写大量重复的$store代码:mapState:映射state数据到页面,当做页面变量使用mapGetters:映射加工后的状态,适合需要二次处理的数据mapMutations:映射同步修改方法,页面直接调用修改statemapActions:映射异步方法,页面直接调用接口逻辑12.辅助函数能不能和页面原生data、methods混用?参考答案:可以混用。实际开发中经常这么做,页面自己的局部数据放data,全局共享数据用map映射,互不冲突。五、常见坑点与解决方案(进阶高频)13.Vuex刷新页面数据丢失怎么解决?参考答案:因为Vuex数据是存在内存里的,页面刷新内存清空,数据就没了。项目里常用两种方案:本地持久化:配合localStorage/sessionStorage,数据变更后存本地,页面刷新先从本地取数据赋值给state使用vuex-persistedstate插件:自动持久化,配置简单,不用手动写存储逻辑,开发中用的最多14.直接修改state数组/对象的属性,不commit会怎么样?参考答案:页面数据会更新,视图也会变,因为Vue本身对数组和对象的变更有响应式监听。但是devtools不会记录这次修改,数据变更无日志,线上出问题无法排查,属于不规范写法,项目里必须禁止。正确做法:必须走mutation修改,要么整体替换,要么Vue.set修改属性,保证可追踪。15.Vuex和Pinia的区别?为什么现在推荐用Pinia?参考答案:Pinia是Vuex的替代方案,也是官方推荐的新一代状态管理工具,对比Vuex优势很明显:去掉了繁琐的mutations,异步同步统一写在actions里,代码更简洁天然模块化,不需要命名空间,无命名冲突问题TS类型支持更好,类型推断更精准体积更小、API更简单,上手成本低Vue2老项目还是用Vuex,Vue3新项目基本都用Pinia。六、手写实操简答(面试官加分项)16.简单说一下Vuex的执行流程?参考答案:组件触发dispatch调用actions=>actions执行异步接口/逻辑=>commit触发mutations=>mutations修改state数据=>s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论