Vuex — 参数使用理解
最后更新于:2022-04-02 08:09:38
[TOC]
>[success] # Vuex -- 参数使用理解
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/52/44/524417c45ff43483403f9ac1a9584bdd_569x261.png)
~~~
1.'Store' -- vuex 的仓库储存这我们需要使用的参数内容在创建的时候使用:
new Vuex.Store({})
2.'state' -- 可以理解成Vue中的data,我们的一些公共数据放在这里
3.'mutations' -- 可以理解成Vue中的methods。也可以理解成java的set。简单的说
所有对'state' 中的数据更改都是通过'mutations' 中的方法操控,Vuex 不提倡直接
更改'state' 中的数据
4.'getters' -- 可以理解成Vue的computed 计算属性,或者java中的get,当我们要
获取'state' 中的方法的时候从getter中取值
5.'Action' -- 异步获取请求参数赋值,他会操控'mutations',再让'mutations'给
'state' 赋值
6.'module' --
~~~
>[danger] 全套写法
>[info] ## 简单案例 -- 只分析state
~~~
1.下面的案例只是演示如何最简单的展示'state' 中的数据 实际开发中是不会这么
用的
~~~
>[danger] ##### store文件下的state.js中内容
~~~
1.state 相当于vue中的data 我们在里面创建了一个'appName' data
~~~
~~~
const state= {
appName:'admin',
};
export default state
~~~
>[danger] ##### 在views文件夹下创建视图组件store.vue
~~~
1.由于我们在mian.js 中的vue.js 实例中使用了'store',因此在全局的组件中我们都
可以调用这个Vuex创建出来的实例,调用的时候使用vue惯有的$调用即可,下
面的案例就是展示了在'store.vue' 视图中,如何直接使用Vuex 中存的数据展示
2.下面的方式 我们不推荐,但是可以看出使用方法是'this.$store.state.存值的名称'
3.也可以发现使用的时候我们在计算属性中定一个了一个方法,作为用来接受
vuex中对应值
~~~
~~~
~~~
>[info] ## 简单案例-- 如何获取模块中的state
~~~
1.我们在创建'store' 文件夹的时候,为了做进一步的拆分,我么拆分出来一个
module 文件夹,这里面存放了一个user 模块,下面的案例展示展示了如何获取
模块中的vuex
~~~
>[danger] ##### 在stor文件下的module文件下的user.js写法
~~~
const state = {
userName: 'Wang'
};
const mutations = {
};
const actions = {
};
export default {
state,
mutations,
actions,
}
~~~
>[danger] ##### 在views文件夹下创建视图组件store.vue
~~~
1.在计算属性中 创建一个方法用来接受 vuex 中的state,掉用的时候
'this.$store.state.模块名.模块中'
~~~
~~~
~~~
>[info] ## getters -- 页面获取值
~~~
1.文章最开始说过不推荐直接使用'state' 并且将内容展示和更改,因此当我们想使
用'state' 的值的时候。我们需要使用vuex中的'getters'。'getters' 相当于vue中的计
算属性。它是一个方法监听方法内部调用的state 值发生改变,如果改变就做出对
应的操作
2.根据上面的描述可以勾勒出getters内部是一个个方法,这个方法可以使用到
state中要监听的具体值,因此写法如下:
const getters = {
// state 就是vuex 仓储中的state
// getters 有点类似vue中的计算属性来监听内部使用的state值的变化
// 根据state 对应值变化显示对应信息
appNameWithVersion:(state) =>{
return `${state.appName}v2.0`
}
};
export default getters
~~~
>[danger] ##### store文件下的getters.js中内容
~~~
const getters = {
// state 就是vuex 仓储中的state
// getters 有点类似vue中的计算属性来监听内部使用的state值的变化
// 根据state 对应值变化显示对应信息
appNameWithVersion:(state) =>{
return `${state.appName}v2.0`
}
};
export default getters
~~~
>[danger] ##### 在views文件夹下创建视图组件store.vue
~~~
1.使用步骤和'state' ,使用起来'this.$store.getters.对应的getters值'
~~~
~~~
~~~
>[info] ## mutations -- 操控值
~~~
1.当我们想改变'state' 中的值的时候可以使用'mutations ',它相当于vue的method
,也就是是可以理解我们来触发Vuex 中的'mutations '方法来改变getters值
2.每个'mutations ' 中定义的参数两个值,第一个值是Vuex中的'state' 对象,第二
个是,传递过来的参数,也是一个对象
3.如何使用,在Vuex 的'mutations ' 定义好之后,在对应的组件中的methods 方
法去触发,有点类似子传父,使用方法:
this.$store.commit('mutations 中的方法名','参数对象')
~~~
>[danger] ##### store文件下的getters.js中内容
~~~
const mutations= {
SET_APP_NAME(state,params){
state.appName = params
},
};
export default mutations
~~~
>[danger] ##### 在views文件夹下创建视图组件store.vue
~~~
~~~
>[danger] ##### 另一种用法
~~~
1.上面在 this.$store.commit('mutations 中的方法名','参数对象') 传递的是两个参
数,下面这种传递是一个对形象
~~~
~~~
const mutations= {
SET_APP_NAME(state,params){
state.appName = params.appName
},
};
export default mutations
~~~
~~~
~~~
>[info] ## 思考如果没在'state' 定义那么'mutations '怎么使用
~~~
Mutation 需遵守 Vue 的响应规则,最好提前在你的 store 中初始化好所有所需属性。
当需要在对象上添加新属性时,你应该
1.Vue.set(obj, 'newProp', 123)
2.以新对象替换老对象。例如,利用 stage-3 的对象展开运算符我们可以这样写:
state.obj = { ...state.obj, newProp: 123 }
~~~
>[danger] ##### 举个例子
~~~
1我们没有在state中定义time,但是在mutations 中应该怎么使用呢
2.注意要是没用定义的值想在组件中使用需要定义'mapState '
~~~
~~~
import vue from 'vue'
const mutations= {
SET_APP_NAME(state,params){
state.appName = params.appName
},
SET_Time(state,params){
vue.set(state,'timee','17:00')
}
};
export default mutations
~~~
~~~
~~~
';
{{appName}}
{{userName}}
{{appName}}
{{userName}}
{{appNameWithVersion}}
{{appNameWithVersion}}
{{appNameWithVersion}}
{{timee}}