当前位置:   article > 正文

Vuex中state,getters,mutations的使用方法以及辅助函数的原理_vuex的mutations获取getees

vuex的mutations获取getees

Vuex是是一个程序里面的状态管理模式,它是集中式存储所有组件的状态的小仓库,并且保持我们存储的状态以一种可以预测的方式发生变化。

state中存放的是全局变量,定义如下

  1. state: {//存放全局变量
  2. myName:'冯昕',
  3. myAge:23,
  4. myJob:"我是小米前端工程师"
  5. },

想要在组件中使用state中的值也是非常简单的,官方推荐我们写在computed属性中,这样代码比较美观,你也可以通过this.$store.state.myName来直接访问属性的值

  1. <template>
  2. <div class>
  3. <div>名字:{{ myName }}</div>
  4. <div>年龄:{{ myAge }}</div>
  5. <div>工作:{{ myJob }}</div>
  6. </div>
  7. </template>
  8. <script>
  9. // 辅助函数: mapState, 可以把 数组快速转换成 计算属性中的方法
  10. import { mapState } from 'vuex'
  11. export default {
  12. computed: {
  13. // ...: 对象的展开语法, 去掉对象的 {} 包围
  14. ...mapState(['myName', 'myAge', 'myJob']),
  15. },
  16. mounted() {
  17. //此时得到的是一个对象,里面包含了我们定义的数据
  18. console.log(this.$store.state)
  19. },
  20. }
  21. </script>

getters修饰state中的值

  1. getters: {//修饰state中的值
  2. changeName(state){
  3. return `${state.myName}爱吃鸡屁股`
  4. }
  5. },

在组件中的使用方法

  1. <template>
  2. <div class>
  3. <div>名字:{{ myName }}</div>
  4. <div>年龄:{{ myAge }}</div>
  5. <div>工作:{{ myJob }}</div>
  6. <div>经过getters处理之后的名字:{{ newName }}</div>
  7. </div>
  8. </template>
  9. <script>
  10. // 辅助函数: mapState, 可以把 数组快速转换成 计算属性中的方法
  11. import { mapGetters, mapState } from 'vuex'
  12. export default {
  13. computed: {
  14. ...mapState(['myName', 'myAge', 'myJob']),
  15. //...mapGetters(['changeName']),
  16. //可以直接使用也可以通过对象的方式来重新命名
  17. ...mapGetters({ newName: 'changeName' }),
  18. },
  19. mounted() {
  20. //也可以通过this.$store.getters.changeName来获取
  21. console.log(this.$store.getters.changeName)
  22. },
  23. }
  24. </script>

  mutations修改state中的值,

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. export default new Vuex.Store({
  5. state: {//存放全局变量
  6. myName:'冯昕',
  7. myAge:23,
  8. myJob:"我是小米前端工程师"
  9. },
  10. getters: {//修饰state中的值
  11. changeName(state){
  12. return `${state.myName}爱吃鸡屁股`
  13. state.myName = 'taocheng'
  14. }
  15. },
  16. mutations: {//修改state中的值
  17. //定义一个方法
  18. //第二个参数num是传递的值
  19. setAge(state,num){
  20. state.myAge += num
  21. }
  22. },
  23. actions: {
  24. },
  25. modules: {
  26. }
  27. })

在组件中的使用方法,这是带参数修改的的mutations方法,此外还有不带参数的

  1. <template>
  2. <div class>
  3. <div>名字:{{ myName }}</div>
  4. <div>
  5. 年龄:{{ myAge }}
  6. <button @click="changeMyAge(1)">通过mutations修改年龄</button>
  7. </div>
  8. <div>工作:{{ myJob }}</div>
  9. <div>经过getters处理之后的名字:{{ newName }}</div>
  10. </div>
  11. </template>
  12. <script>export default {
  13. methods: {
  14. changeMyAge(n) {//n就是@click事件中传递的参数
  15. this.$store.commit('setAge', n)
  16. },
  17. },
  18. }
  19. </script>

不带参数的mutations如下

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. export default new Vuex.Store({
  5. state: {//存放全局变量
  6. myName:'冯昕',
  7. myAge:23,
  8. myJob:"我是小米前端工程师"
  9. },
  10. getters: {//修饰state中的值
  11. changeName(state){
  12. return `${state.myName}爱吃鸡屁股`
  13. state.myName = 'taocheng'
  14. }
  15. },
  16. mutations: {//修改state中的值
  17. setName(state){
  18. state.myName = 'fx'
  19. }
  20. },
  21. actions: {
  22. },
  23. modules: {
  24. }
  25. })

在组件中同样可以通过computed计算属性来进行解构,然后直接使用就可以

<div>{{ setName }}</div>
  1. computed: {
  2. ...mapMutations(['setName']),
  3. },

最后是辅助函数的原理

  1. <script>
  2. // 把数组遍历之后, 转换成 对象类型:
  3. function mapState(arr) {
  4. var obj = {}
  5. arr.forEach(value => {
  6. obj[value] = function () {
  7. return this.$store.state[value]
  8. }
  9. })
  10. return obj
  11. }
  12. var res = mapState(['num', 'gname', 'price'])
  13. console.log(res)
  14. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/256922
推荐阅读
相关标签
  

闽ICP备14008679号