首页 > 其他分享 >vuex状态管理器

vuex状态管理器

时间:2022-12-01 14:57:29浏览次数:43  
标签:状态 Vue 管理器 Vuex state import vuex store

vuex核心概念

// vuex中一共有五个状态 State  Getter  Mutation   Action   Module  
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
  },
  getters: {
  },
  // 里面定义方法,操作state方发
  mutations: {
  },
  // 操作异步操作mutation
  actions: {
  },
  modules: {
  }
})

State

提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,相似与data

在vuex中state中定义数据,可以在任何组件中进行调用

import Vue from 'vue'
import Vuex from 'vuex'
 
Vue.use(Vuex)
 
export default new Vuex.Store({
  //数据,相当于data
  state: {
    name:"张三",
    age:12,
    count:0
  },
})

调用方式

  • 方式一

在标签中直接 调用如:

<p>{{$store.state.name}}</p>
<p>{{$store.state.age}}</p>
  • 方式二
// this.$store.state.全局数据名称如
<script>
export default{  
  data(){
      return{
        name:'',
        age:this.$store.state.age
      }
    },    
  methods:{
      giveName(){
        thsi.name = this.$store.state.name
      }
    }
}
</script>
  • 方式三

从vuex中按需导入mapstate函数如:

<script>
import { mapState } from "vuex";
export default{  
  data(){
      return{
      }
    },
  computed: {
    ...mapState([name, age])
  }
}
</script>

Mutation

// 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    name: '张三',
    age: 12,
    count: 0
  },
  getters: {
  },
  // 里面定义方法,操作state方发
  mutations: {
    addCount(state, num) {
      state.count =+ state.count+num
    },
    reduceCount(state) {
      state.count--
    }
  },
  // 操作异步操作mutation
  actions: {
  },
  modules: {
  }
})
  • 组件的使用方法
// 方法一
<script>
export default{  
  data(){
      return{
      }
    },    
  methods:{
      onAddCount(){
         this.$store.commit('addCount', 4)
      },
      onReduce () {
        this.$store.commit('reduceCount')
      }
    }
}
</script>

// 方法二
<script>
export default{  
  data(){
      return{
      }
    },    
  methods:{
      ...mapMutations(['addCount','reduceCount'])
      onAddCount(){
         this.addCount(4)
      },
      onReduce () {
        this.reduceCount()
      }
    }
}
</script>

Action

Action和Mutation相似,Mutation 不能进行异步操作,若要进行异步操作,就得使用Action
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    name: '张三',
    age: 12,
    count: 0
  },
  getters: {
  },
  // 里面定义方法,操作state方发
  mutations: {
    addCount(state, num) {
      state.count =+ state.count+num
    },
    reduceCount(state) {
      state.count--
    }
  },
  // 操作异步操作mutation
  actions: {
    asyncAdd (context) {
      setTimeout(() => {
        context.commit('reduceCount')
      }, 1000);
    }
  },
  modules: {
  }
})

/*
* 调用方式
*/

// 方式一
this.$store.dispatch("asynAdd")   

// 方式二

methods:{
   ...mapActions(['asyncAdd '])
   onReduce () {
    this.asyncAdd()
  }
}

Module

mutation主要用于分割

在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对象,store对象也将对变得非常大,难于管理。

Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:

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

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
  },
  getters: {
  },
  // 里面定义方法,操作state方发
  mutations: {
  },
  // 操作异步操作mutation
  actions: {
  },
  modules: {
    userinfo: {
       state: {
        name: '李四'
       },
       getters: {},
       modules: {}
     },
    header: {
       state: {},
       getters: {},
       modules: {}
     },
  }
})
  • 获取方式
this.$store.state.userinfo.name

getter

  • getter是对于Store中的数据进行加工处理形成新的数据
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    counter: 2
  },
  getters: {
    powerCounter(state) {
      return state.counter * state.counter
    },
  },
  // 里面定义方法,操作state方发
  mutations: {
  },
  // 操作异步操作mutation
  actions: {
  },
  modules: {}
})
  • 调用方式
// 方法一

<p>{{$store.getters.powerCounter()}}</p>

// 方法二

<script>
import { mapGetters } from "vuex";
export default{  
  data(){
      return{
      }
    }, 
    computed: {
      ...mapGetters(['powerCounter'])
    },  
  methods:{
      onAddCount(){
         this.powerCounter()
      },
    }
}
</script>

标签:状态,Vue,管理器,Vuex,state,import,vuex,store
From: https://www.cnblogs.com/Alangc612/p/16940956.html

相关文章

  • Python高级-with与“上下文管理器”-笔记
    如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有“with”关键字的语句,它通常用在什么场景呢?今对于系统资源如文件、数据库连接、socket而言,应用程序打开这......
  • 获取当前网络状态(是否可用) ,nullpoint处理
    /** *获取当前网络状态(是否可用) */ publicstaticbooleanisNetworkAvailable(){   ConnectivityManagerconnManager=(Con......
  • Flink-使用flink处理函数以及状态编程实现TopN案例
    7.5应用案例-TopN7.5.1使用ProcessAllWindowFunction场景例如,需要统计最近10秒内最热门的两个url链接,并且每5秒思路使用全窗口函数ProcessAllWindowFunction开......
  • java线程(三)线程的6种状态
    NEW:线程刚刚创建,还没有执行start启动RUNNABLE:可运行状态,由线程调度器可以安排执行包括READY和RUNNING两种细分状态WAITING:等待被唤醒TIMEDWAITING:......
  • 如何在NetSuite中使用状态步骤条 Share how to use Step Bar in NetSuite build-in UI
    背景及应用场景我们在使用NetSuite中的状态字段时(无论是系统的状态字段还是自定义的字段),经常会遇到状态之间的步骤性,有的流程对状态步骤有特定的需求(比如满足什么条件才......
  • Systemd 服务管理器
    项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,变成守护进程的第一步,就是把它改成"后台任务"(backgroundjob)。传统上我们是用以下的方法来做:&只要在命令的尾部加......
  • C#中的进程检测退出事件和座位状态改变事件深入浅出谈谈EventHandler的使用
    关于进程之前我在启动我的师生对讲的exe的时候,都是直接调用Process类的静态函数Process.Start(System.StringAppPath,System.StringArguments)来直接启动一个exe,这样当......
  • Gitee代码管理器的简便使用
    第一步:在Gitee上新建个仓库第二步:复制http路径第三步:在我的电脑上找到想要把文件上传仓库的路径第四步:在文件路径上输入cmd命令第五步:gitclonehttp地址    ......
  • 如何监测mysql主从节点同步状态是否正常
    WGCLOUD是一款运维监测平台,它有一个模块自定义监控项,可以执行一些我们自定义的指令或脚本,非常灵活实用本文我们尝试使用此功能来监测我们的mysql从节点是否在正常工作,如果如......
  • (十六)状态模式
    1概述状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的......