首页 > 其他分享 >Vue面试题48:你觉得Vuex有什么缺点?(总结自B站up主‘前端杨村长’视频,仅供自用学习)

Vue面试题48:你觉得Vuex有什么缺点?(总结自B站up主‘前端杨村长’视频,仅供自用学习)

时间:2022-11-14 09:55:07浏览次数:38  
标签:namespaced 面试题 Vue 48 getters state 模块 使用 store

  • 体验

    • 使用模块:用起来比较繁琐,使用模式也不统一,基本上得不到类型系统的任何支持:
  • const store=createStore({
    	modules:{
            a:moduleA
        }
    })
    store.state.a  //-→要带上moduleA的key,内嵌模块的话会很长,不得不配合mapState使用
    store.getters.c  //-→moduleA里的getters,没有namespaced时又变成了全局的
    store.getters['a/c']  //-→有namespaced时要加path,使用模式又和state不一样
    store.commit('d')  //-→没有namespaced时变成了全局的,能同时触发多个子模块中同名mutation
    store.commit('a/d')  //-→有namespaced时要加path,配合mapMutations使用感觉也没简化
    
  • 思路

    • 先夸再贬;
    • 使用感受;
    • 解决方案;
  • 回答范例

    • vuex利用响应式,使用起来已经相当方便快捷了;但是在使用过程中感觉模块化的使用过于复杂,容易出错,还要经常查看文档
    • 比如:访问state时要带上模块key,内嵌模块的话会很长,不得不配合mapState使用,模块加不加namespaced区别也很大:如果不加,getters,mutations,actions这些默认是全局,加上之后则必须用字符串类型的path来匹配,使用模式不统一,容易出错;另外Vuex对ts的支持也不友好,在使用模块时没有代码提示;
    • 之前Vue2项目中用过vuex-module-decorators的解决方案,虽然类型支持上有所改善,但又要学一套新东西,增加了学习成本;pinia出现之后使用体验好了很多,Vue3+pinia会是更好的组合;
  • 模块化原理

    • 下面我们来看看vuex中store.state.x.y这种嵌套的路径是怎么搞出来的:
    • 首先是子模块安装过程:父模块状态parentState上面设置了子模块名称moduleName,值为当前模块state对象。放在上面的例子中相当于:store.state[ 'x' ]=modulex.state;此过程是递归的,那么store.state.x.y安装时就是:store.state[ 'x' ][ 'y' ]=moduleY.state

标签:namespaced,面试题,Vue,48,getters,state,模块,使用,store
From: https://www.cnblogs.com/Mochenghualei/p/16888102.html

相关文章

  • 高频react面试题自检
    fetch封装npminstallwhatwg-fetch--save//适配其他浏览器npminstalles6-promiseexportconsthandleResponse=(response)=>{if(response.status===4......
  • vite vue使用Markdown
    下载插件:npmivite-plugin-mdhighlight.jsgithub-markdown-css配置插件:importMarkdownfrom'vite-plugin-md'importvuefrom'@vitejs/plugin-vue'plugins:[......
  • element Vue-表单删除按钮以及修改按钮的使用(附加dialog对话的使用)
    先上代码: <el-table-columnwidth="300"label="操作"><templateslot-scope="scope"><el-buttonclass="btn"size="mi......
  • Vue脚手架安装慢解决
    https://www.cnblogs.com/Aangle-long/p/11600966.html安装npminstall时,长时间停留在fetchMetadata:xxxxxx处, 是数据源的问题,下载太慢了 更换成淘宝的源就行了np......
  • #yyds干货盘点#vue使用事件总线进行模块之间的通信
        vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过props传数据给子组件,当子组件有事情要告诉父组件时会通过$emit事件告诉......
  • vue mock
    vue域名定义引用已经定义的`${direct.sitv1}/path`抖动currenMethod:debounce(function(){action;},100); importMockfrom'mockjs';import{getQueryParams}fr......
  • 【剑指Offer学习】【面试题3 :二维数组中的查找】
    思路:规律从右上角开始,或左下开始。不能从左上角开始找,这样每次比较后向右和向下都是越来越大。publicclassP03_FindMaxInMatrix{/*规律从右上角开始:......
  • Vue 刷新后回登陆页
    在Vue项目中无论在当前在哪个页面上时,如果点击浏览器的刷新实现回到登陆页的方法  在 App.vue 中 this.$router.push("/");//直接跳转至首页beforeCreate(){}......
  • vue实现上下切换自动轮播 移入移出暂停轮播
    <template><divclass="about"><divstyle="display:flex;"><divclass="left"><divclass="box1"><divclass="box2":style="{bac......
  • sh: vue-cli-service: command not found
    mac环境下运行vue项目报错sh:vue-cli-service:commandnotfound解决方法:cd到项目目录下,执行命令sudorm-rfnode_modulespackage-lock.json&&npminstall然后根......