浅谈vuex原理及使用

Vuex实现数据共享

在进行vue开发时,我们时常需要在多个独立页面之间传值或者共用一些数据,当多个页面或多个组件间进行复杂的数据传值很困难的时候,如果我们能把需要使用的公共数据放到一个存储空间去存储,然后某一个组件改变了这个公共数据其他组件也能感知到,就能提供我们的开发效率,vuex的设计理念就是如此。
在这里插入图片描述
上图所示,虚线区域就是vuex的存储区域,可以把这个区域理解为store仓库,这个仓库是由几部分组成的。
首先大家可以看到state区域:所有的公共数据都是存放在state当中,如果组件想用一个公共数据直接调用state就行。
紧接着我们来看,有时候我们需要改变state数据,但我们不能直接修改state,必须走一个流程,这个流程是这样的:
如果有一些异步操作,那么我们把异步操作放在Actions之中,或者一些复杂批量的同步操作也可以放在Actions之中。组件先去调用Actions,Actions能接着去调用Mutations,Mutations中放着的是一个一个的对state数据的修改。
当然上述流程也并非绝对,有的时候我们也可以略过Actions,让组件直接去调用Mutations修改state里面的数据。这块额外要注意的是,当组件调用Actions时,我们调用的是Dispatch方法来操作Actions,然后呢组件或者Actions去调用Mutations时,是调用Commit方法来操作Mutations,vuex内容大致就这么多,其实它就是单向数据的改变流程。
安装:npm install vuex --save

目录结构:
在这里插入图片描述
index.js:

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'

Vue.use(Vuex)

export default new Vuex.Store({
  state,
  mutations
})

State.js:

let defaultBalance = '1000'
try {
  if (localStorage.balance) {
    defaultBalance = localStorage.balance
  }
} catch (e) {}

export default {
  balance: defaultBalance
}

Mutations.js:
export default {
  changeBalance (state, balance) {
    state.balance = balance
    try {
      localStorage.balance = balance
    } catch (e) {}
  }
}

main.js中引入import store from ‘./store/index.js’,在根vue实例中传入store,
页面调用state数据:this.$store.state.balance,使用mapState可直接使用this.currentBalance调用:

<script>
  import Header from '../../components/header/header.vue'
  import { mapState, mapMutations } from 'vuex'
  export default{
    name : 'balance',
    computed: {
      ...mapState({
        currentBalance: 'balance'
      })
    },
    components:{
      Header
    },
    data () {
      return {
        addBalance: ''
      }
    },
    methods:{
      handleClickBalance () {
        this.changeBalance(this.addBalance)
      },
      ...mapMutations(['changeBalance'])
    }
  }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值