vuex
是用来保存组件之间的共享数据,如果组件之间有要共享的数据,可以直接挂载到vuex
中,而不必通过props
和emit
来进行传值
安装
npm i vuex -s
在 main.js 引入并使用
import vuex from "vuex"; vue.use(vuex);
|
创建
const store =new Vuex.Store( { state : { count : 0 }, mutations : { fn(state) { state.count++; } }, getters: { orderFn(state) { return 'count的值为:'+state.count } })
|
state
其中state
类似于vue
中的data
,用来存放共享数据的
在组件中通过$store.state.count
/ this.$store.state.count
来进行访问
<p>当前数量为;{{$store.state.count}}</p>
|
mutations-1
mutations
类似于vue
中的methods
,用来专门操作state
中的数据的(如果要操作state
中的数据的话,尽量在mutations
中使用,而不是在各组件的methods
中使用)
如果组件想要使用mutations
中的方法的话,需要通过$store.commit('方法名')
/ this.$store.commit('方法名')
来进行调用
<button @click="$store.commit('jianNum')">---</button> <button @click="jian">---</button>
|
methods: { jian() { this.$store.commit('jianNum') } }
|
mutations-2
如果方法有参数的话:(在mutations
的方法中,最多只支持 2 个参数:1 是state
、2 是自定义参数[如果想要使用多个参数,可以把 2 定义为arr
或obj
])
mutations: { jianNum(state,num) { state.count-=num } } methods: { jian() { this.$store.commit('jianNum',5) } }
|
<button @click="$store.commit('addNum',3)">+++</button>
|
getters
getters
只负责对外提供数据,不负责修改数据,如果要修改数据,请用mutations
,getters
类似于vue
中的filter
,没有修改state
中的值,只不过是对其进行了加工包装,其次和computed
类似,当state
中的值发生改变时,也会立即触发getters
的重新求值
getters: { orderFn(state) { return 'count的值为:'+state.count }
|
<p>{{$store.geeters.orderFn}}</p>
|