vuex的使用

computed的响应式依赖(缓存)

  1. computed的每一个计算属性都会被缓存起来,只要计算属性所依赖的属性发生变化,计算属性就会重新执行,视图也会更新。下面代码中,计算属性fullName,它依赖了firstName和lastName这两个属性,只要它们其中一个属性变化,fullName就会重新执行。
    2.computed计算属性会被缓存,在下面代码中使用了两次fullName,但在控制台只输出了一次 “这是fullName”。

mapState作用:可以辅助获得多个state的值

vuex中state中的数据在使用的时候,一般都是在computed中定义的,以为在data中定义的话是一次性的,不会随着vuex中数据变化而变化,虽然可以通过watch监听,但是很麻烦,如下:

//在计算属性中
computed:{
	...mapState([
		//必须带引号
		'menuStatus'
	])
}

computed: {
    ...mapState({
      userInfo: state => state.user.userInfo,
      avatar: state => state.user.avatar
    }),
    ...mapGetters([
      'company'
    ])

  },

Vuex文件 src/store/index.js

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export const store = new Vuex.Store({
  // state专门用来保存 共享的状态值
  state: {
    // 保存登录状态
    login: false
  },
  // mutations: 专门书写方法,用来更新 state 中的值
  mutations: {
    // 登录
    doLogin(state) {
      state.login = true;
    },
    // 退出
    doLogout(state) {
      state.login = false;
    }
  }
});

组件JS部分 : src/components/Header.vue

<script>
// 使用vux的 mapState需要引入
import { mapState } from "vuex";

export default {
  // 官方推荐: 给组件起个名字, 便于报错时的提示
  name: "Header",
  // 引入vuex 的 store 中的state值, 必须在计算属性中书写!
  computed: {
    // mapState辅助函数, 可以快速引入store中的值
    // 此处的login代表,  store文件中的 state 中的 login, 登录状态
    ...mapState(["login"])
  },
  methods: {
    logout() {
      this.$store.commit("doLogout");
    }
  }
};
</script>

mapGetters

引入

   import { mapGetters  } from "vuex";

如果一个变量或对象需要在多个页面和组件中使用,那么,可以使用mapGetters。

computed: {
               ...mapGetters(["freeShipping"])
          } ,
  computed: mapGetters(["userInfo","freeShipping"]),

3,页面变量取用

{{freeShipping.value}}
//state的作用是存储公共数据
//state是响应式的,如果修改了属性,那么在相对应,组件视图上的值也会改变
//在store里定义格式
new Vuex.store({
  state: {
   属性名: 属性值 
  }
})

//在组件中使用格式
this.$store.state.属性名

//在模板中可省略this
{{$store.state.属性名}}

//在组件中使用map辅助函数:
computed: { 
  ...mapState(['属性名']), 
  ...mapState({'新名字': '属性名'})
}

Vuex- Action的 { commit }

没有解构的

actions: {
    increment (context) {
      context.commit('increment')
    }
  }

ES2015参数解构 (opens new window)的简化代码

actions: {
  increment ({ commit }) {
    commit('increment')
  }
}

在vue组件中get

import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters(['number']),
}mounted () {
this.$store.dispatch('setNumber',10).then(() => {
console.log(this.number)
})
}
}

Vue中this. s t o r e . d i s p a t c h ( ) 与 t h i s . store.dispatch() 与 this. store.dispatch()this.store.commit()

this.$store.commit()
commit: 同步操作
this.$store.commit('方法名',)【存储】

this.$store.state.方法名【取值】
this.$store.dispatch()
dispatch: 异步操作

this.$store.dispatch('方法名',)【存储】

this.$store.getters.方法名【取值】

action的用法
action的用法
根据 vuex 的 this.$store.dispatch() 返回值 处理逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值