一、vuex的使用流程
二、 Vuex和单纯的全局对象有什么区别?
1.Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
2.不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
三、为什么 Vuex 的 mutation 中不能做异步操作?
Vuex中所有的状态更新的唯一途径都是mutation,异步操作通过 Action 来提交 mutation实现,这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
每个mutation执行完成后都会对应到一个新的状态变更,这样devtools就可以打个快照存下来,然后就可以实现 time-travel 了。如果mutation支持异步操作,就没有办法知道状态是何时更新的,无法很好的进行状态的追踪,给调试带来困难。
四、vuex的几大部分
state 提供唯一公共数据源,状态,组件访问state中数据的方法:
1.this.$store.state.全局数据名称
2.import { mapState } from 'vuex'
computed: {
...mapState(['count'])
}
getter 可以认为是store的计算属性,组件访问getter的方法:
1.this.$store.getters.名称
2.import {mapGetters } from 'vuex'
computed:{
...mapGetters(['filterPrice'])
}
mutation 更改vuex中状态的唯一方法是提交mutation:
1.先在store中 定义mutation
2.触发mutation
方法:
1.this.$store.commit('increment')
2.import { mapMutations } from 'vuex'
methods: {
...mapMutations(['add', 'addN'])
}
action 提交的是mutation,而不是直接改变状态:
1.先在store中定义action
2.分发action(action通过store.dispatch触发),方法如下:
1.store.dispatch('increment')
2.import { mapActions } from 'vuex'
methods:{
...mapActions(['asyncChange'])
}
3.action传递参数
module 每个模块拥有自己的state getter mutation action 甚至是module