https://vuex.vuejs.org/zh/installation.html   官网
npm install vuex -S                安装  

下面写了几个例子。

取值、修改store值、加和减、 actions里请求数据

取值方法推荐下面这种

 computed: {
    ...mapState(['name', 'age', 'count', 'data'])
  },

页面代码:

<template>
  <div class="home">
    <!-- 第一种 -->
    <!-- {{name}}   -->
    <!-- 第二种 -->
    <!-- {{name}}--{{aname}} -- {{stateFn}} -->
    <!-- 第三种常用 -->
    {{name}}--{{age}}
    <button @click="editName">修改name值</button>
    <h1>{{count}}</h1>
    <button @click="onAdd">+</button>
    <button @click="onLow">-</button>
    <button @click="onGetData">请求数据</button>
    <p>{{data}}</p>  
  </div>
</template>

<script>
import { mapState, mapActions } from 'vuex'

export default {
  created () {
  },

  //第一种拿值方法
  // computed: {
  //   name () {
  //     return this.$store.state.name
  //   }
  // }

  // 第二种写法 使用 mapState 对象方法
  // computed: mapState({
  //   // 对象方式, 有三种拿值方法
  // name: state => state.name,

  // aname: 'name',  //一般取别名的时候用

  // stateFn (state) { return state.name + state.age } //这里尽量不要用箭头函数, 使用普通函数,有this
  // })

  //第三种拿值方法  mapState 数组方法   ***常用
  computed: {
    ...mapState(['name', 'age', 'count', 'data'])
  },

  methods: {
    ...mapActions(['FETCH_GET_DATA']),

    editName () {
      // commit 触发 mutations
      this.$store.commit('EDIT_NAME')
    },

    onAdd () {
      // commit 触发 mutations
      this.$store.commit('FETCH_COUNT', true)
    },

    onLow () {
      //这里让他减到1就停止,这个停止逻辑一定要再这里写,不能再mutations写 
      if( this.count === 1 )  return
      // commit 触发 mutations
      this.$store.commit('FETCH_COUNT', false)
    },

    onGetData () {
      // this.$store.dispatch('FETCH_GET_DATA')  //第一种写法
      this['FETCH_GET_DATA']()                   //第二种写法  上面...mapActions(['FETCH_GET_DATA']) 
    }
  }
}

/**
 * computed 拿state值
*/
</script>

  

store里代码

import Vue from 'vue'
import Vuex from 'vuex'
import Axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    name: '铁柱',
    age: 100,
    count: 1,
    data: []
  },

  // state 只能在这改变, 相当于react 的 reducer
  // 只能改同步的代码,不能改异步的。
  mutations: {
    // 修改name
    'EDIT_NAME' (state) {
      state.name = '小白'
    },
    // 加 减
    'FETCH_COUNT' (state, option) {
      state.count = option ?  ++state.count : --state.count
    },
    //修改data
    'FETCH_EDIT_DATA' (state, option) {
      state.data = option
    },
  },
  //写异步代码的 Action 提交的是 mutation,而不是直接变更状态。
  actions: {
    'FETCH_GET_DATA' ({ commit }) {
      // console.log(context) 是一个对象 里面有dispatch,commit,state 等 平常可以解构出来
      Axios.get('https://blogs.zdldove.top/Home/Apis/listWithPage')
        .then( res => {
          // FETCH_DATA是mutations里 方法名
          commit('FETCH_EDIT_DATA', res.data.result)
        })
    }
  },
  modules: {
  }
})

  

 

posted on 2020-05-21 16:11  姓叶,名铁柱  阅读(138)  评论(0编辑  收藏  举报