首页 > 其他分享 >关于vue2的模块级总结

关于vue2的模块级总结

时间:2023-09-17 19:11:21浏览次数:407  
标签:总结 createNamespacedHelpers vue2 mapState 模块 使用 mapMutations vuex

前阵子在赶一个项目的进度,一直没时间做总结,今日闲来无事,消化一下。

背景

vue2的项目,面向受众为g端

内容

1. 项目原因,单路由下包含详情&列表两页面。根据v-if跳转,笔者这里用的是动态组件的方式
2. 同样由于项目原因,使用的模块级vuex,因而在使用时,也有了许多盲点:

(如图:)

  1. 使用createNamespacedHelpers导入模块级vuex的辅助函数

createNamespacedHelpers方法用于使用模块级vuex的辅助函数,免于臃肿的路径导入

假设vuex有一模块moduleA,有一stateA,有一mutationA用于操作stateA则使用createNamespacedHelpers的方式为:

// pageA.vue
<script>
import { createNamespacedHelpers } from "vuex"; // 导入createNamespacedHelpers方法
const { mapState:moduleA_mapState, mapMutations:moduleA_mapMutations} =  createNamespacedHelpers("moduleA");// 基于createNamespacedHelpers中的moduleA导入内部的mapState, mapMutations 
// 此处由于是共有页面,因此须重命名
const { mapState:moduleB_mapState, mapMutations:moduleB_mapMutations} =  createNamespacedHelpers("moduleB");//基于createNamespacedHelpers中的moduleB导入内部的mapState, mapMutations 

export default {
computed:{
...moduleA_mapState({
dataA:stateA // 将stateA映射为dataA
}),
...moduleB_mapState({
dataB:stateB // 将stateA映射为dataB
})
},
methods:{
...moduleA_mapMutations(['SET_stateA ']),//导入a模块的a方法
...moduleB_mapMutations(['SET_stateB ']),//导入b模块的b方法
}
}
</script>

以上是使用createNamespacedHelpers函数进行模块级vuex的数据处理方法。

  1. props仅监听第一次数据的问题:
    这个问题一个月前碰到过,当时也的确给出了解决办法,可是为了修复这个bug却要使用watchdata两处,在多props下,这种方式就显得有一些臃肿,因而可以使用以下办法:
export default {
  props:{
    myProp:[String]
 },
 computed:{
  myProp_Computed(){
      return this.myProp
  }
 } 
}

以上是规避props仅接受第一次传入数据的办法

  1. 移入移出事件的简写
    在写入移入移出事件时,首先应添加使用防抖/节流方法限制此事件,如果移入移出方法同时存在,如果事件够简单,可以通过使用$event来判断事件类型:
//template

<div v-for='item of list' :key='item.id'>
    <div
       @mouseenter="mouse(item, $event)"
       @mouseleave="mouse(item, $event)"
       class="tab-title">
    </div>
</div>

<script>
import throttle from "lodash/throttle"; // 导入lodash的throttle方法
export default {
      // event的`type`标识了此次事件的类型,简单事务场景下可以直接写成一个方法 
      mouse: throttle(function (item, { type }) {
        item.removable = type === `mouseenter`;
        item.isShowEdit = type === `mouseenter`;
    }, 200),

}
</script>

总结:

  1. 在写入模块级变量时,要思考该模块是否为通用的,如果仅仅是一个或者两个地方使用,考虑使用组件传值的方式

  2. 在使用mapMutations设置数据时,不能仅考虑直接使用,特别是在另一个组件在监听被set的值变化时随即发生请求动作时的这个业务场景时,考虑将事件回传至page页由page页统一使用mapMutations设置数据,这样做的目的是防止出现意外的重复渲染事件发生。

  3. 由于实际是两个页面共用一个路由,且组件数据是在vuex中存储,因而要考虑当路由切换时,页面在销毁前要将vuex中的数据重置为初始态。(时间太赶,来不及写一些新方法)

  4. 以后再写此类需求时,应尽可能将多建立几个组件以避免写在同一个大组件里导致可读性差

  5. 使用mixins以避免重复逻辑出现

  6. 如果要使用async/await,外部必须要使用try...catch...包裹,以避免意外报错造成代码阻塞,如果是crud类的请求,必须要判断返回值是否为全等于true,这是为了避免某些可能近似trusty的值影响接下来的动作(tip:promise == true)

第一次使用此方式写,也有一些教训
反思:

  1. 代码冗余:在最开始写的时候没有考虑到可拓展性,导致最后由于临时的需求而不得不重构

  2. 代码重复较多:没有使用mixin,导致重复逻辑

  3. 没有遵从一个函数只做一件事,这里是尤其要注意的一个点

  4. 样式不够完美,有的样式没有处理好,在不该出现滚动条的地方出现了滚动条,随后笔者将会重新写一篇样式笔记。

这是笔者上个月在写此种样式时遇到的一些笔记,希望能给同样有此类需求的读者一些参考。

以上。

标签:总结,createNamespacedHelpers,vue2,mapState,模块,使用,mapMutations,vuex
From: https://www.cnblogs.com/hjk1124/p/17709492.html

相关文章

  • uniapp项目实践总结(十六)自定义下拉刷新组件
    导语:在日常的开发过程中,我们经常遇到下拉刷新的场景,很方便的刷新游览的内容,在此我也实现了一个下拉刷新的自定义组件。目录准备工作原理分析组件实现实战演练内置刷新案例展示准备工作在components新建一个q-pull文件夹,并新建一个q-pull.vue的组件;按照前面文章所说......
  • python语言基础与核心技巧知识点总结
    一、python语言基础python基础语言的详细操作演示1.1变量变量.png1.2数据类型数据类型.png1.3序列序列分类:可变序列list,不可变序列tuple、str。在python中,内建了6中序列:列表、元组、字符串、unicode字符串、buffer对象、xrange对象。(1)list列表list列表.png(2)tuple元祖tuple.png(......
  • pytest---fixture知识总结
    此博客内容全部来源于:https://zhuanlan.zhihu.com/p/443523226前言在做自动化的过程中,编写用例时候需要用到用例的前置和用例的后置,其中pytest中有setup_class和teardown_class可以帮助我们完成这些,但是不够完善而且灵活性不够强。举个简单的例子,一个calss中有3条用例,其中2......
  • Linux平台卸载MySQL总结
     如何在Linux下卸载MySQL数据库呢?下面总结、整理了一下Linux平台下卸载MySQL的方法。MySQL的安装主要有三种方式:二进制包安装(UsingGenericBinaries)、RPM包安装、源码安装。对应不同的安装方式,卸载的步骤有些不同。文章中如有不足或不对的地方,敬请指出或补充! RPM包安装方......
  • # 几个re模块的用法
    1、re.findall()ret=re.findall('a','aaaaaa')#把匹配到的值以列表的形式返回#没找到返回空列表2、re.search()ret=re.search('a','aaa')#只返回第一个值#返回的是对象#需要调用group方法输出#没找到返回None3、re.match()#用法同search#不同之处在于:match从字符......
  • 二十五、QT的BLE蓝牙操作,连接ECB02蓝牙模块收发信息
    1.注意事项(1)pro文件中引入bluetooth模块(2)安卓端运行时,需要同时打开蓝牙和定位才能获取到附近的蓝牙设备(3)mingw套件不能在Windows上运行,需要使用MSVC套件编译才能在Windows上运行2.操作步骤(1)使用QBluetoothLocalDevice类对设备蓝牙进行操作,判断设备蓝牙是否开启,开启和关闭设备......
  • vue2 使用tinymce编辑器实现上传图片及粘贴word文本保留格式并粘贴图片自动上传
    下载对应的版本 npminstall@tinymce/[email protected]@5.8.2-S然后在node_modules中找到tinymce把整个文件复制下来粘到public中 在组件页面使用根据自己需求进行注释或添加功能<template><divclass="tinymce-editor"><Editor:......
  • 安装pyCharm环境及wifi模块
    转载:python开发破译WiFi教程,你不看看吗?(baidu.com)转载:一、安装python环境(1)首先安装在python官网安装python环境(https://www.python.org/getit/)(2)选择Downloads--Windows点开,如图所示: (3)点开之后,你会发现有很多python版本,我们当然要选择python3.X版本,因为python2.......
  • MySQL 总结
    MySQL笔记MySQL视频课程......
  • 米联客MLK-CM03-7EG-7EV AMD MPSOC核心模块硬件手册
    1整体概述MLK-CM03-7EG-7EV-1156核心模块是米联客电子ZynqUltraScale+MPSOC系列开发平台的全新高端产品。其核心模块集成电源管理:0.85V核心电源,最大输出48A。用户基于核心模块设计功能底板(提供功能底板设计方案)。降低项目功能底板设计难度和生产成本,加速项目开发。其应用领域......