目录
本文主要介绍Vue.js中Vuex的使用,其主要的作用就是实现组件之间的数据通信。
通过Vue脚手架搭建的项目中,src目录存有store文件夹,其中的index.js引入Vuex,存放了组件所需的数据和方法等。如下图所示。
state中存储数据
- export default new Vuex.Store({
-
- state: {
- count: 10
- }
-
- })
在组件中的访问方式:
<h1>当前值:{{$store.state.count}}h1>
- import {mapState} from "vuex";
- export default {
- computed:{
- ...mapState(['count'])
- }
- }
而后直接使用即可
<h1>当前值:{{count}}h1>
获取值时进行一些操作
- export default new Vuex.Store({
- state: {
- count: 10,
- },
- getters: {
- showMsg(s) {
- return s.count * 100
- }
- }
- })
在组件中的访问方式:
<div>{{$store.getters.showMsg}}div>
- import {mapGetters} from "vuex";
- export default {
- computed:{
- ...mapGetters(['showMsg'])
- }
- }
而后直接使用即可:
<div>{{showMsg}}div>
定义方法,操纵state中的数据。注意参数传递
- <div><button @click="addOne">点击加1button>div>
- <div><button @click="addN">点击加3button>div>
- export default {
- methods:
- {
- addOne(){
- this.$store.commit('add');
- },
- addN(){
- this.$store.commit('addN',3)
- }
- }
- }
- mutations: {
- add(s) {
- s.count++
- },
- addN(s, step) {
- s.count += step
- }
- }
即可完成调用
当然,也可以利用mapMutations直接进行调用
- <div><button @click="add">点击加1button>div>
- <div><button @click="addN(3)">点击加3button>div>
- import {mapMutations} from "vuex";
- export default {
- methods:
- {
- ...mapMutations(['add','addN'])
- }
- }
进行异步操作,同上述一样,有两种写法。
此时index.js中内容如下:
- export default new Vuex.Store({
- state: {
- count: 10,
- },
- getters: {},
- mutations: {
- add(s) {
- s.count++
- },
- addN(s, step) {
- s.count += step
- }
- },
- actions: {
- waitOne(c) {
- setTimeout(() => {
- c.commit('add')
- }, 1000)
- },
- waitN(c, s) {
- setTimeout(() => {
- c.commit('addN', s)
- }, 1000)
- }
- }
- })
<div><button @click='timeout'>+1button>div>
- export default {
- methods:
- {
- timeout(){
- this.$store.dispatch('waitOne')
- }
- }
- }
<div><button @click='waitN(5)'>+Nbutton>div>
- export default {
- methods:
- {
- ...mapActions(['waitN'])
- }
- }