vue学记笔记(六) Vuex

Vuex

  • 可以理解为公共仓库,它只要一刷新数据就清空。负责组件之间传值。父子,兄弟都可以

Vuex 分成几个部分

  • state (存放公共数据)

  • getters (对 state 数据二次封装,防止污染 state)

  • mutations (里面都是方法,它的作用就是修改 state 里面的数据)

  • actions (可以理解为 mutations 里面的一个合集,它能执行很多个 mutations)

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {
  //要设置的全局访问的state对象
  showFooter: true,
  changableNum: 0
  //要设置的初始属性值
}
const getters = {
  //实时监听state值的变化(最新状态)
  isShow(state) {
    //承载变化的showFooter的值
    return state.showFooter
  },
  getChangedNum() {
    //承载变化的changebleNum的值
    return state.changableNum
  }
}
const mutations = {
  show(state) {
    //自定义改变state初始值的方法,这里面的参数除了state之外还可以再传额外的参数(变量或对象);
    state.showFooter = true
  },
  hide(state) {
    //同上
    state.showFooter = false
  },
  newNum(state, sum) {
    //同上,这里面的参数除了state之外还传了需要增加的值sum
    state.changableNum += sum
  }
}
const actions = {
  hideFooter(context) {
    //自定义触发mutations里函数的方法,context与store 实例具有相同方法和属性
    context.commit('hide')
  },
  showFooter(context) {
    //同上注释
    context.commit('show')
  },
  getNewNum(context, num) {
    //同上注释,num为要变化的形参
    context.commit('newNum', num)
  }
}
const store = new Vuex.Store({
  state,
  getters,
  mutations,
  actions
})
export default store
  • 使用的时候 actions 第一个参数和 mutations 的第一个参数都可以不传

  • mapState,mapMutations 是 Vue 提供的语法糖可以直接使用

<script>
  import { mapState, mapMutations } from 'vuex'
  export default {
    computed: {
      ...mapState({
        singerId: 'singer' //改名
      })
    },
    data() {
      return {
        message: '汇总',
        showflag2: false
      }
    },
    methods: {
      ...mapMutations({
        setsinger: 'setsinger' //改名
      }),
      // 点击方法
      gotourl(id) {
        this.setsinger(id)
      }
    }
  }
</script>

Vuex 也可以分着写,然后在汇总

  • 单独的第一个 store 文件
export default {
  state: {
    orderData: ''
  },
  mutations: {
    updateOrder(state: any, orderData: any) {
      state.orderData = orderData
    }
  }
}
  • 单独的第二个 store 文件
export default {
  state: {
    modalHow: ''
  },
  mutations: {
    updateModalClose(state: any, modalClose: any) {
      state.modalClose = modalClose
    }
  }
}
  • 汇总
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import footer from './modules/kiosk_footer' // 引入第一个store对象
import cart from './modules/kiosk_cart' //引入第二个store对象
export default new Vuex.Store({
  modules: {
    footer,
    cart
  }
})

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录