Vuex 的使用
Posted 鲸渔要加油
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vuex 的使用相关的知识,希望对你有一定的参考价值。
文章目录
vuex 是什么?
Vuex
是一个专为 Vue.js
应用程序开发的 状态管理模式
vuex
是采用 集中式 管理组件依赖的共享数据的一个工具,可以解决不同组件数据共享问题
state
共享数据状态mutations
所有数据的修改,但只能执行同步代码actions
执行异步的代码,然后将数据提交给mutations
import Vue from "vue";
import App from "./App.vue";
import Vuex from "vuex";
Vue.use(Vuex);
// store 就是 vuex 的实例
const store = new Vuex.Store(
state: ,
mutations: ,
actions: ,
getters: ,
modules: ,
);
new Vue(
render: (h) => h(App),
store,
).$mount("#app");
一、 state 的渲染
1. 原始形式
<div> $实例.state.数据名 </div>
2. 计算属性
将 state
属性定义在 computed
中
computed:
自定义属性名()
return this.$实例.state.属性名
再使用
<div> 自定义属性名 </div>
3. 辅助函数 mapState
第一步: 引入 mapState
并解构一个 mapState
,然后在计算属性中采用数组形式引入 state
属性,并用延展运算符导入
import mapState from 'vuex'
export default
computed:
...mapState(['属性名'])
第二步: 再使用
<div> 属性名 </div>
二、 mutations
state
数据的修改只能通过 mutations
,并且必须是同步更新,目的是形成 数据快照
数据快照 : 一次 mutations
的执行,立刻得到一种视图状态,因为是立刻所以必须同步
mutations
是一个对象,对象中存放修改 state
的方法
mutations:
// 这里传参的 state 就是当前的 vuex 中的 state 对象
// payload 自定义名的形参
// payload 载荷 提交 mutations 的方法时候传递的参数
// 可以是任何形式 任何类型的值
方法名(state, payload)
state.数据名 += payload
1. 原始形式
绑定点击事件
<button @click="事件名"> 按键名 </button>
在 methods
调用
methods:
事件名()
// 调用 mutations 方法 提交 mutations
// commit 是调用 mutations 里面方法的固定写法
// payload 是传入的参数
this.$实例.commit("方法名", 100)
2. 辅助函数 mapMutations
先引入,再在 methods
中用延展运算符导入 方法
import mapMutations from 'vuex'
export default
methods:
...mapMutations(['方法名'])
使用
这里 方法名 就是实例里面导入进来的
<button @click="方法名(1000)"> 按键名 </button>
三、 actions
state
是存放数据,mutations
是同步更新数据,actions
负责进行异步操作,必须通过 mutations
改数据
actions:
// 第一个参数是上下文对象 自定义名 context
// context 相当于组件中的 this.$实例
// 第二个是传参
异步方法(context, params)
setTimeout(function()
context.commit("addCount", params);
, 1000);
,
1. 原始形式
绑定点击事件
<button @click="事件名"> 按键名 </button>
在 methods
调用
methods:
事件名()
// dispatch 是调用 actions 里面方法的固定写法
this.$实例.dispatch("方法名", 100)
2. 辅助函数 mapActions
先引入,再在 methods
中用延展运算符导入 方法
import mapActions from 'vuex'
export default
methods:
...mapActions(['方法名'])
使用
这里 方法名 就是实例里面导入进来的
<button @click="方法名(1000)"> 按键名 </button>
四、 getters
类似于 vue 中的计算属性
例如在 satte
中定义了一个 list
数组筛选大于 5 的数
state:
list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
定义 getters
getters:
// filterList 自定义的名字
filterList:state => state.list.filter(item => item > 5)
然后渲染数据
原始形式
<div> $实例.getters.filterList </div>
辅助函数
先引入,再在 计算属性 中用延展运算符导入 方法
import mapGetters from 'vuex'
export default
computed:
...mapGetters(['filterList'])
<div> filterList </div>
五、 模块化 modules
modules:
// 放置子模块的属性
user:
state:
token: '12345'
,
mutations: ,
actions: ,
getters: ,
,
setting:
state:
name: '远近渔'
,
mutations: ,
actions: ,
getters: ,
渲染
直接 子模块.属性
<div> $实例.state.user.token </div>
<div> $实例.state.setting.name </div>
另外一种方式用 根节点 的 getters
快捷方式一下
getters:
token: state => state.user.token
name: state => state.setting.name
然后引入
import mapGetters from 'vuex'
export default
computed:
...mapGetters(['token', 'name'])
<div> token </div>
<div> name </div>
模块化中的命名空间
子模块的内部的 mutations
actions
getters
是注册在 全局命名空间 的
可以直接全局调用
modules:
// 放置子模块的属性
user:
state:
token: '12345'
,
mutations:
updataToken(state)
state.token = '67890'
<button @click="quanju"> 全局调用 </button>
export default
methods:
quanju()
this.$实例.commit('updataToken')
如果想要让内部模块具有高封闭性,可以采用 namespaced
来设置
modules:
user:
// 这里设置 namespaced
namespaced: true,
state:
token: '12345'
,
mutations:
updataToken(state)
state.token = '67890'
调用方法 1
采用路径形式
加子模块名
<button @click="quanju"> 全局调用 </button>
export default
methods:
quanju()
// 这里加子模块名
this.$实例.commit('user/updataToken')
调用方法 2
<button @click="quanju"> 全局调用 </button>
import mapMutations from 'vuex'
export default
methods:
...mapMutations(['user/updataToken']),
quanju()
// 中括号形式取到方法,小括号进行调用
this['user/updataToken']()
调用方法 3
createNamespacedHelpers
创建基于某个命名空间的辅助函数
<button @click="updataToken"> user模块调用 </button>
import createNamespacedHelpers from 'vuex'
// 这个 mapMutations 是基于 user 模块的
// 调用方法2 的 mapMutations 是全局的
const mapMutations = createNamespacedHelpers('user')
export default
methods:
...mapMutations(['updataToken']),
以上是关于Vuex 的使用的主要内容,如果未能解决你的问题,请参考以下文章
当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)
R语言plotly可视化:使用PCA算法进行数据降维使用plotly可视化载荷(loading)并使用标签表征每个载荷对应的原始特征(isualize loadings using shapes)