一文彻底搞懂vuex

野性酷女 2023-01-02 02:18 382阅读 0赞

1. 什么是vuex?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它由五部分组成:
分别是:state,actions,mutations,getters,modules
在这里插入图片描述

2. vuex由五部分组成

  • state: 数据
  • actions:可以包含异步操作
  • mutations: 唯一可以修改state数据的场所
  • getters: 类似于vue组件中的计算属性,对state数据进行计算(会被缓存)
  • modules:模块化管理store(仓库),每个模块拥有自己的 state、mutation、action、getter

3. 如何使用

store—>index.js

  1. import vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(vuex);
  4. const state= ()=>{ token:''}
  5. const actions = {
  6. set_token({ commit},val){
  7. commit("to_token",val)
  8. }
  9. }
  10. const mutations = {
  11. to_token(state,val){
  12. state.token=val;
  13. }
  14. }
  15. const getters = { }
  16. let store = new Vuex.store({
  17. state,
  18. actions,
  19. mutations,
  20. getters
  21. })
  22. module.export=store;

home.vue

  1. <template>
  2. <div>
  3. { { $store.state.token}}
  4. </div>
  5. </template>
  6. <script>
  7. export default={
  8. name: 'Home',
  9. data() {
  10. return {
  11. tel: '',
  12. }
  13. },
  14. created(){
  15. //调用acionts中的方法
  16. this.$store.dispatch('set_token',12345);
  17. //调用mutations中的方法
  18. this.$store.commit('to_token',123456)
  19. }
  20. }
  21. <script>

4. 高级用法——- 数据持久化

问题:存储在vuex中的状态,刷新页面,会丢失。
为了解决刷新页面数据丢失,才有了数据持久化。

最简单的做法就是利用插件 vuex-persistedState
1. 安装
cnpm install vuex-persistedState -S
备注:

-S--save的简写,意为:把插件安装到dependencies(生产环境依赖)中
-D--save-dev的简写,意为:把插件安装到devDependencies(开发环境依赖)中

2. 使用

  1. import createPersistedState from 'vuex-persistedstate'
  2. const store = new Vuex.Store({
  3. state,
  4. mutations,
  5. actions,
  6. getters,
  7. plugins: [createPersistedState({
  8. storage: sessionStorage,
  9. key: "token"
  10. })]//会自动保存创建的状态。刷新还在
  11. })

参数:

storage:存储方式。(sessionStorage,localStarage) key:定义本地存储中的key

5. 高级语法—— 模块化管理数据 (modules)

1. 什么时候需要用到模块管理vuex数据。

项目庞大,数据信息量特别大的时候,我们可以考虑分模块形式管理数据,比如user模块管理用户信息数据,cart模块管理购物车数据,shop模块管理商品信息数据。

  1. import vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(vuex);
  4. const state= ()=>{ token:''}
  5. const actions = {
  6. set_token({ commit},val){
  7. commit("to_token",val)
  8. }
  9. }
  10. const mutations = {
  11. to_token(state,val){
  12. state.token=val;
  13. }
  14. }
  15. const getters = { }
  16. //user模块
  17. let user = {
  18. namespaced: true, //一定要开始命名空间。
  19. state: { userid: 1234 },
  20. actions: {
  21. },
  22. mutations: {
  23. SET_USERID(state, val) {
  24. state.userid = val;
  25. }
  26. },
  27. getters: {
  28. }
  29. }
  30. //购物车数据的模块
  31. let cart = {
  32. namespaced: true,
  33. state: { userid: 567 },
  34. actions: {
  35. },
  36. mutations: {
  37. },
  38. getters: {
  39. }
  40. }
  41. const store = new Vuex.Store({
  42. state,
  43. mutations,
  44. actions,
  45. getters,
  46. modules: {
  47. user,
  48. cart
  49. },
  50. plugins: [createPersistedState({
  51. storage: sessionStorage,
  52. key: "token"
  53. })]//会自动保存创建的状态。刷新还在
  54. })
  55. export default store

home.vue如何使用

  1. 获取user模块的`userid`
  2. this.$store.state.user.userid
  3. this.$store.commit("SET_USERID",12345)

6. 高级用法——- 辅助函数(语法糖)

1. 有那几个辅助函数(4大金刚)
mapState,mapActions,mapMutations,mapGetters

  1. 辅助函数可以把vuex中的数据和方法映射到vue组件中。达到简化操作的目的

3. 如何使用

home.vue

  1. <template>
  2. <div id="">
  3. { { token }}
  4. { { token - x }}
  5. </div>
  6. </template>
  7. <script>
  8. import { mapActions, mapGetters, mapMutations, mapState } from 'vuex'
  9. import { createNamespacedHelpers} from 'vuex'
  10. const { mapState:mapStateUser,mapActions:mapActionUser,mapMutations:mapMutaionuser} = createNamespacedHelpers('user')
  11. const { mapState:mapStateCart,mapActions:mapActionCart,mapMutations:mapMutaionCart} = createNamespacedHelpers('cart')
  12. export default {
  13. name: '',
  14. data() {
  15. return { }
  16. },
  17. computed: {
  18. ...mapState({
  19. token: 'token'
  20. }),
  21. ...mapGetters(['token-x']),
  22. ...mapSateUser(['userid']),
  23. ...mapStateCart({ cartid:'userid'})
  24. },
  25. //生命周期 - 创建完成(访问当前this实例)
  26. created() {
  27. this.setToken('123456')
  28. },
  29. //生命周期 - 挂载完成(访问DOM元素)
  30. mounted() { },
  31. methods: {
  32. ...mapActions({
  33. setToken: 'setToken'
  34. }),
  35. ...mapMutations(['SET_TOKEN']),
  36. ...mapMutaionUser({
  37. setId:"setToken"
  38. })
  39. }
  40. }
  41. </script>

发表评论

表情:
评论列表 (有 0 条评论,382人围观)

还没有评论,来说两句吧...

相关阅读

    相关 彻底引用类型

    引用类型的值(对象)是引用类型的一个实例。引用类型有时也称对象定义,因为它们描述的是一类对象所具有的属性和方法。 对象是某个特定引用类型的实例,新对象是使用new操作符后跟一