vuex多文件配置 - Kaiqisan

大家好,都吃晚饭了吗?我是Kaiqisan,是一个已经走出社恐的一般生徒,当我们的项目渐渐大起来的时候,我们存放在vuex里面的数据也会渐渐变多,尤其在一些可视化操作页面项目中,用到的全局属性是爆炸多,这个时候,vuex中的数据太过,调用和编写都会变得非常麻烦,我们该如何分配资源呢?

这个时候单个vuex文件已经无法支持目前的项目了,需要创建多个文件,步骤如下

  • 把所有的state文件都存放到modules中
    在这里插入图片描述
  • 然后开始编写vuex入口文件 index.js
import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'

Vue.use(Vuex)

const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => { 
	// modulesFiles.keys()获取所有js文件的相对路径
    const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1') 
    // 对文件路径进行处理,获取文件名 比如 './app.js' => 'app'
    const value = modulesFiles(modulePath) 
    // 获取一个js文件(state)下的所有信息,这一步相当于 -- import 路径
    modules[moduleName] = value.default 
    // 整合到一个对象modules中
    return modules
    // 开始下一个迭代,直到所有文件被浏览
}, {})

const store = new Vuex.Store({
    modules,
    getters
})

export default store

上面代码的核心是利用require.context抓取一个路径下的所有的文件,然后整合所有数据,最终实现数据的分类,便于开发
require.context的知识详见 js require.context - Kaiqisan

原先的state, 文件是单一的文件

/* 原先的state */
const state = {
	name: 'kaiqi'
	uid: 10001
}

... //这里不多赘述

现在的state, 有多个文件 user.js app.js

/* 现在的app.js */
const state = {
	isOpen: true
}

const mutations = {
	....
}

const actions = {
	...
}

export default {
    namespaced: true, 
    // namespaced: true 的方式使其成为带命名空间的模块。保证在变量名一样的时候,添加一个父级名拼接。
    // 例: SET_NAME => user/SET_NAME
    state,
    mutations,
    actions
}
  • 修改getter.js
/* 原先的 */
const getters = {
	name: state => state.name,
	uid: state => state.uid
}
/* 现在的 */
const getters = {
	name: state => state.user.name,
	uid: state => state.user.uid
}

毕竟getter要跟随state的步伐(记得不要重名,如果在不同的文件出现一样的参数名的话在getter这里的命名一定要不一样,要区分出来,否则出大问题)

  • 投入使用
    (前排提示 使用mapGetter导入的方法还是一样的)

调用参数

在vue文件中直接使用 this.$state.state.[文件名].[参数名]
比如

this.$store.state.user.name

在js文件中需要导入vuex入口文件index.js

这里直接举例

import store from '@/store'

....

console.log(store.state.user.name)

调用方法

// 老
this.$store.commit('SET_NAME', val)
// 新
this.$store.commit('user/SET_NAME', val)

这对异步方法dispatch, getter的调用也同理

总结

不要为难自己,该封装的就要封装,麻烦是一时的,爽是一直的!

目錄 前言 第一章 ROS简介 机器人时代的到来 ROS发展历程 什么是ROS 安装ROS 安装ROS-Academy-for-Beginners教学包 二进制与源码包 安装RoboWare Studio 单元测试一 第二章 ROS文件系统 Catkin编译系统 Catkin工作空间 Package软件包 CMakeLists.txt package.xml Metapacakge软件元包 其他常见文件类型 单元测试二 第三章 ROS通信架构(一) Node & Master Launch文件 Topic Msg 常见msg类型 单元测试三 第四章 ROS通信架构(二) Service Srv Parameter server 11.5.4 1.5.5 1.5.6 1.5.7 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.8 1.8.1 1.8.2 1.8.3 1.8.4 1.9 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.6.1 1.9.6.2 Action 常见srv类型 常见action类型 单元测试四 第五章 常用工具 Gazebo RViz Rqt Rosbag Rosbridge moveit! 单元测试五 第六章 roscpp Client Library与roscpp 节点初始、关闭与NodeHandle Topic in roscpp Service in roscpp Param in roscpp 时钟 日志与异常 第七章 rospy Rospy与主要接口 Topic in rospy Service in rospy Param与Time 第八章 TF与URDF 认识TF TF消息 tf in c++ tf in python 统一机器人描述格式 附录:TF数学基础 三维空间刚体运动---旋转矩阵 三维空间刚体运动---欧拉角 21.9.6.3 1.10 1.10.1 1.10.2 1.10.3 1.10.4 1.11 1.11.1 1.11.2 1.11.3 1.11.4 1.12 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.12.7 1.12.8 1.12.9 1.12.10 1.12.11 1.12.12 1.12.13 1.12.14 1.12.15 1.12.16 三维空间刚体运动---四元数 第九章 SLAM 地图 Gmapping Karto Hector 第十章 Navigation Navigation Stack move_base costmap Map_server & Amcl 附录:Navigation工具包说明 amcl local_base_planner carrot_planner clear_costmap_recovery costmap_2d dwa_local_planner fake_localization global_planner map_server move_base_msg move_base move_slow_and_clear navfn nav_core robot_pose_ekf rotate_recovery 3中国大学MOOC---《机器人操作系统入门》 课 程讲义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiqisan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值