Vuex的5个属性

一,Vuex简介

1.Vuex是什么?
Vuex是Vue.js的状态管理库,通过中心化的状态管理使得组件间的数据共享更加容易。
理解:核心就是 store(仓库),仓库是用来干什么的?你就当它用来储存东西的。
Vuex包含五个核心属性:state、getters、mutations、actions、modules。

1.我们什么时候应该用到Vuex呢?
a.小应用不建议使用Vuex,因为小项目使用 Vuex 可能会比较繁琐冗余;
b.中大型单页应用,因为要考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择;

二,Vuex五个核心属性
1:state
state:定义了应用程序的状态,就是我们要管理的数据。
存放应用程序的状态(数据),所有组件共享。它是Vue实例的data属性的替代品,但通过它存储和管理的状态,可以在整个应用程序中实现全局共享,即不同的组件可以通过定义的getter和setter访问同一状态数据。

const store = new Vuex.Store({
//存储和管理
  state: {
    count: 0
  }
})

getter和setter方法的作用很好理解,封装数据,对私有属性进行封装,只是暴露出public方法来访问。
封装的作用就是保护,保护属性本身不被篡改。比如有些属性只是可读但不可写,那么只提供它的getter方法就好,意思就是某些属性只能单一方向的被访问,getter和setter就是提供这样的接口,对于public的属性,可以直接使用类名来访问,自身的“安全性”就降低了。

2:getters
getters:主要用于对state进行逻辑上的组合和应用,**类似于Vue组件中的计算属性。**对state数据进行计算(会被缓存)

const store = new Vuex.Store({
  state: {
    count: 0
  },
  //类似于计算属性
  getters: {
    doubleCount(state) {
      return state.count * 2
    }
  }
})

3:mutations
mutations:用于修改state中的数据是唯一可以修改state的地方。mutations接收state作为第一个参数,接收payload作为第二个参数。
用于修改State中的状态,只能同步执行。Mutation必须是同步函数,因为它们不能处理异步行为,异步行为应该放在Action中处理。

mutations属性中的每个方法中有两个参数,分比为state和payload;state其实就是vuex中的state属性,payload叫做mutations的载荷,其实就是传过来的值。一般payload传的是一个对象,这样可以包含多个字段并且记录的mutation 会更易读。

const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    doubleCount(state) {
      return state.count * 2
    }
  },
  //修改和更新state中的数据
  mutations: {
    increment(state) {
      state.count++
    },
    add(state, payload) {
      state.count += payload
    }
  }
})

4:actions
actions:用于异步操作和提交mutations在actions中可以进行任何异步操作最后再提交到mutations中同步修改stateactions接收context作为第一个参数其中包含了state、getters和commit等属性
可以包含任意异步操作(例如从服务器获取数据),可以用Mutation通过提交(commit)来修改State。

dispatch:含有异步操作;而commit只是同步操作,都是提交 mutation,因为只能在mutation中才能够改变state中的值,然而mutation中只能进行同步操作,从而actions就出现了,actions允许异步和同步操作,但是对于actions的操作其实就是提交mutation来完成;

const store = new Vuex.Store({
  state: {
    count: 0
  },
  getters: {
    doubleCount(state) {
      return state.count * 2
    }
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  //异步操作,最后再提交到mutations中同步修改state
  actions: {
    incrementAsync(context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  }
})

以下是一些常用的 context 属性和方法:
context.state:用于访问和获取 Vuex 的 state 对象。
context.commit:用于触发 mutations 中的方法来修改 state。
context.dispatch:用于触发其他 actions 中的方法。
context.getters:用于访问 Vuex 的 getters。
context.rootState:用于访问根级别的 state。
context.rootGetters:用于访问根级别的getters。
context.rootCommit:用于触发根级别的 mutations。
context.rootDispatch:用于触发根级别的 actions。
这些属性和方法可以通过 context对象来访问,根据需要进行使用。请注意,context 对象是一个包含了上述属性和方法的对象,并不是 Vuex 的实例本身。

5:modules
modules:模块化管理store(仓库),每个模块拥有自己的 state、mutation、action、getter以便提高应用程序的可维护性
将State、Getter、Mutation、Action模块化,便于组件化和模块化开发。

const store = new Vuex.Store({
//用于将store分割成模块,以便提高应用程序的可维护性
  modules: {
    cart: {
      **state**: {
        items: []
      },
      **getters**: {
    	doubleCount(state) {
      	return state.count * 2
    }
  },
      **mutations**: {
        addItem(state, item) {
          state.items.push(item)
        }
      },
      **actions**: {
        addAsyncItem(context, item) {
          setTimeout(() => {
            context.commit('addItem', item)
          }, 1000)
        }
      }
    }
  }
})

三,Vuex使用方法
第一步:npm i vuex --save/-S
第二步: 创建store.js
第三步:挂载使用 Vue.use(vuex)
第四步:const store = new Vuex.Store({…配置项})
第五步:导出 export default store
第六步:导入main.js 在根据实例配置 store 选项指向 store 实例对象
具体如下

1.安装

npm install vuex

2.创建store.js

// 初始化一个vuex的实例(数据仓库) 导出即可
import Vuex from 'vuex'
import Vue from 'vue'
 
// 使用安装
Vue.use(Vuex)
 
// 初始化(创建 Store 的实例对象)
const store = new Vuex.Store({
  // 配置(state|mutations|actions)
})
 //向外共享 Store 的实例对象
export default store

3.把store对象挂载到Vue实例中

import store from '@/store'
new Vue({
  // 把store对象挂载到vue实例对象中,这样就可以在所有的组件中获取store中的数据了
  store,
  render: h => h(App),
}).$mount('#app')

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vuex中,有五个属性可以使用。这些属性分别是`mapState`、`mapGetters`、`mapMutations`、`mapActions`和`modules`。 `mapState`属性的作用是将Vuex的state映射为计算属性。你可以通过`mapState`来获取Vuex中的状态数据,而不需要在组件中直接访问`this.$store.state`。 `mapGetters`属性的作用是将Vuex的getters映射为计算属性。通过`mapGetters`,你可以在组件中轻松地获取Vuex中定义的getters方法,而不需要手动调用`this.$store.getters`。 `mapMutations`属性的作用是将Vuex的mutations映射为组件的方法。通过`mapMutations`,你可以在组件中直接调用mutations,而不需要手动调用`this.$store.commit`来触发mutations的执行。 `mapActions`属性的作用是将Vuex的actions映射为组件的方法。通过`mapActions`,你可以在组件中直接调用actions,而不需要手动调用`this.$store.dispatch`来触发actions的执行。 最后,`modules`属性用于划分Vuex的模块。你可以将Vuex的state、mutations、getters和actions等按照不同的模块进行划分,以便更好地组织和管理代码。每个模块都可以有自己的state、mutations、getters和actions,并且可以通过`modules`属性将它们组合在一起。 总结起来,通过使用`mapState`、`mapGetters`、`mapMutations`和`mapActions`属性,以及划分模块使用`modules`属性,你可以更方便地在Vue组件中使用Vuex的状态、计算属性、变更方法和异步操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vuex五个属性及使用方法。](https://blog.csdn.net/hudabao888666/article/details/129087599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值