vuex基本使用

 

创建一个 store

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count += 1
    }
  },
  actions: {},
  modules: {}
})
store.js

 

获取state值

1. 在标签中直接调用

<div>count: {{ $store.state.count }}</div>

 

2.通过计算属性

<div>count: {{ count }}</div>

computed: {
  count() {
    return this.$store.state.count;
  }
},

 

3.当一个组件需要多个状态的时候,可以借助 mapState 辅助函数来实现

// 在单独构建的版本中辅助函数为 Vuex.mapState
import { mapState } from 'vuex'

export default {
  // ...
  computed: mapState({
    // 箭头函数可使代码更简练
    count: state => state.count,

    // 传字符串参数 'count' 等同于 `state => state.count`
    countAlias: 'count',

    // 为了能够使用 `this` 获取局部状态,必须使用常规函数
    countPlusLocalState (state) {
      return state.count + this.localCount
    }
  })
}

 

4. 当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组。

computed: mapState([
  // 映射 this.count 为 store.state.count
  'count'
])

 

5. 通过 对象展开运算符 实现

computed: {
    ...mapState(["count"])
},

 

 

Getters

getters可以当作是 store 的计算属性,就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。

 

store中state内容

state: {
    todos: [{
        id: 1,
        text: '...',
        done: true
      },
      {
        id: 2,
        text: '...',
        done: false
      }
    ]
},

 

1. Getter 接受 state 作为其第一个参数

getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
   } },
// 属性访问 store.getters.doneTodos // -> [{ id: 1, text: '...', done: true }]

 

2.Getter 也可以接受 getters 作为第二个参数:

getters: {
    doneTodos: state => {
      return state.todos.filter(todo => todo.done)
    },
    doneTodosCount: (state, getters) => {
      return getters.doneTodos.length
   } },
this.$store.getters.doneTodosCount; // 1, 通过属性访问

 

3.通过方法访问

也可以通过让 getter 返回一个函数,来实现给 getter 传参。

getters: {
  // ...
  getTodoById: (state) => (id) => {
    return state.todos.find(todo => todo.id === id)
  }
}

store.getters.getTodoById(2)     // -> { id: 2, text: '...', done: false }

注意,getter 在通过方法访问时,每次都会去进行调用,而不会缓存结果。

 

4. mapGetters 辅助函数访问

computed: {
    // 使用对象展开运算符将 getter 混入 computed 对象中
    ...mapGetters([
      'doneTodosCount',
      'anotherGetter',
    ])
}    

// 如果你想将一个 getter 属性另取一个名字,使用对象形式:
computed: {
    ...mapGetters({
      // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
      doneCount: "doneTodosCount"
    })
 },

 

posted @ 2021-07-26 14:44  我若亦如风  阅读(62)  评论(0编辑  收藏  举报