赞
踩
Vuex是是一个程序里面的状态管理模式,它是集中式存储所有组件的状态的小仓库,并且保持我们存储的状态以一种可以预测的方式发生变化。
state中存放的是全局变量,定义如下
- state: {//存放全局变量
- myName:'冯昕',
- myAge:23,
- myJob:"我是小米前端工程师"
- },
想要在组件中使用state中的值也是非常简单的,官方推荐我们写在computed属性中,这样代码比较美观,你也可以通过this.$store.state.myName来直接访问属性的值
- <template>
- <div class>
- <div>名字:{{ myName }}</div>
- <div>年龄:{{ myAge }}</div>
- <div>工作:{{ myJob }}</div>
- </div>
- </template>
-
- <script>
- // 辅助函数: mapState, 可以把 数组快速转换成 计算属性中的方法
- import { mapState } from 'vuex'
- export default {
- computed: {
- // ...: 对象的展开语法, 去掉对象的 {} 包围
- ...mapState(['myName', 'myAge', 'myJob']),
- },
- mounted() {
- //此时得到的是一个对象,里面包含了我们定义的数据
- console.log(this.$store.state)
- },
- }
- </script>

getters修饰state中的值
- getters: {//修饰state中的值
- changeName(state){
- return `${state.myName}爱吃鸡屁股`
- }
- },
在组件中的使用方法
- <template>
- <div class>
- <div>名字:{{ myName }}</div>
- <div>年龄:{{ myAge }}</div>
- <div>工作:{{ myJob }}</div>
- <div>经过getters处理之后的名字:{{ newName }}</div>
- </div>
- </template>
-
- <script>
- // 辅助函数: mapState, 可以把 数组快速转换成 计算属性中的方法
- import { mapGetters, mapState } from 'vuex'
- export default {
- computed: {
- ...mapState(['myName', 'myAge', 'myJob']),
- //...mapGetters(['changeName']),
- //可以直接使用也可以通过对象的方式来重新命名
- ...mapGetters({ newName: 'changeName' }),
- },
- mounted() {
- //也可以通过this.$store.getters.changeName来获取
- console.log(this.$store.getters.changeName)
- },
- }
- </script>

mutations修改state中的值,
- import Vue from 'vue'
- import Vuex from 'vuex'
-
- Vue.use(Vuex)
-
- export default new Vuex.Store({
- state: {//存放全局变量
- myName:'冯昕',
- myAge:23,
- myJob:"我是小米前端工程师"
- },
- getters: {//修饰state中的值
- changeName(state){
- return `${state.myName}爱吃鸡屁股`
- state.myName = 'taocheng'
- }
- },
- mutations: {//修改state中的值
- //定义一个方法
- //第二个参数num是传递的值
- setAge(state,num){
- state.myAge += num
- }
- },
- actions: {
- },
- modules: {
- }
- })

在组件中的使用方法,这是带参数修改的的mutations方法,此外还有不带参数的
- <template>
- <div class>
- <div>名字:{{ myName }}</div>
- <div>
- 年龄:{{ myAge }}
- <button @click="changeMyAge(1)">通过mutations修改年龄</button>
- </div>
- <div>工作:{{ myJob }}</div>
- <div>经过getters处理之后的名字:{{ newName }}</div>
- </div>
- </template>
-
- <script>export default {
- methods: {
- changeMyAge(n) {//n就是@click事件中传递的参数
- this.$store.commit('setAge', n)
- },
- },
- }
- </script>

不带参数的mutations如下
- import Vue from 'vue'
- import Vuex from 'vuex'
-
- Vue.use(Vuex)
-
- export default new Vuex.Store({
- state: {//存放全局变量
- myName:'冯昕',
- myAge:23,
- myJob:"我是小米前端工程师"
- },
- getters: {//修饰state中的值
- changeName(state){
- return `${state.myName}爱吃鸡屁股`
- state.myName = 'taocheng'
- }
- },
- mutations: {//修改state中的值
- setName(state){
- state.myName = 'fx'
- }
- },
- actions: {
- },
- modules: {
- }
- })

在组件中同样可以通过computed计算属性来进行解构,然后直接使用就可以
<div>{{ setName }}</div>
- computed: {
- ...mapMutations(['setName']),
- },
- <script>
- // 把数组遍历之后, 转换成 对象类型:
- function mapState(arr) {
- var obj = {}
-
- arr.forEach(value => {
- obj[value] = function () {
- return this.$store.state[value]
- }
- })
- return obj
- }
-
- var res = mapState(['num', 'gname', 'price'])
- console.log(res)
- </script>

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。