Vue.js-vuex 详解

Vuex是一个专为Vue.js应用开发的状态管理模式,用于集中管理组件间的共享状态。它包括State、View、Actions和Mutations,支持单界面和多界面状态管理。Mutation是更新状态的唯一方式,Action则用于异步操作。Vuex还引入了Getters用于获取变异后的状态,以及Module模块化管理,便于大型应用的状态组织。
摘要由CSDN通过智能技术生成

1.1 Vuex是做什么的?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。

它采用 集中式存储管理 应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

状态管理到底是什么?

可以简单的将其看成把需要多个组件共享的变量全部存储在一个对象里面。然后,将这个对象放在顶层的Vue实例中,让其他组件可以使用。

Vuex就是为了提供这样一个在多个组件间共享状态的插件。

管理什么状态呢?

如果你做过大型开放,一定遇到过多个状态,在多个界面间的共享问题。比如用户的登录状态、用户名称、头像、地理位置信息等等。比如商品的收藏、购物车中的物品等等。
这些状态信息,我们都可以放在统一的地方,对它进行保存和管理,而且它们还是响应式的。

1.2 单界面的状态管理

State:不用多说,就是我们的状态。(可以当做就是data中的属性)
View:视图层,可以针对State的变化,显示不同的信息。
Actions:这里的Actions主要是用户的各种操作:点击、输入等等,会导致状态的改变。

代码示例

counter需要某种方式被记录下来,也就是我们的State。

counter目前的值需要被显示在界面中,也就是View部分。

界面发生某些操作时(这里是用户的点击,也可以是用户的input),需要去更新状态,也就是我们的Actions

<template>
  <div class="test">
    <div>当前计数:{
  {counter}}</div>
    <button @click="counter+=1">+1</button>
    <button @click="counter-=1">-1</button>
  </div>
</template>

<script>
export default {
    
  name: "hello",
  data(){
    
    return {
    
      counter:0
    }
  }
}
</script>

<style scoped>

</style>

1.3 多界面状态管理

创建项目vue init webpack vuetest


进入项目终端执行cnpm install vuex --save 命令,安装vuex插件。

全局单例模式(大管家)

现在要做的就是将共享的状态抽取出来,交给我们的大管家,统一进行管理。
之后,每个试图,按照规定好的规定,进行访问和修改等操作。这就是Vuex背后的基本思想。

代码示例

先创建一个文件夹store,并且在其中创建一个index.js文件

index.js

// 导入vue
import Vue from 'vue'
import Vuex from 'vuex'

// 安装插件
Vue.use(Vuex)

// 创建对象
const store = new Vuex.Store({
   
  // 放置状态相关的信息
  state:{
   
    counter: 1000
  },
  // 方法
  mutations:{
   
    increment(state){
   
      state.counter++
    },
    decrement(state){
   
      state.counter--
    }
  }
})

// 导出store
export default store

挂载到Vue实例中,导入store对象,并且放在new Vue中。
这样,在其他Vue组件中,就可以通过this.$store的方式,获取到这个store对象了。

main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import store from "./store";

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
   
  el: '#app',
  router,
  store,
  render: h => h(App)
})

HelloVuex.vue

<template>
  <div>
    <h3>{
  {$store.state.counter}}</h3>
  </div>
</template>

<script>
export default {
    
  name: "HelloVuex"
}
</script>

<style scoped>
</style>

APP.vue

通过提交mutation的方式,而非直接改变store.state.count。

Vuex可以更明确的追踪状态的变化,所以不要直接改变store.state.count的值。

<template>
  <div id="app">
    <h3>====APP组件====</h3>
    <h3>{
  {$store.state.counter}}</h3>
    <button @click="addition">+</button>
    <button @click="subtraction">-</button>

    <h3>++++HelloVuex组件++++</h3>
    <HelloVuex/>
  </div>
</template>

<script>
import HelloVuex from "./components/HelloVuex";
export default {
    
  name: 'App',
  // 注册组件
  components:{
    
    HelloVuex
  },
  data(){
    
    return{
    
      message: 'hello Vue.js!!!'
    }
  },
  methods:{
    
    addition(){
    
      this.$store.commit(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue.js是一个流行的JavaScript框架,它允许您构建动态Web应用程序。Vuex是一个专为Vue.js应用程序开发的状态管理模式。它允许您在应用程序中管理和维护状态,例如用户信息、购物车、主题等。Vuex将状态存储在一个集中的存储库中,称为store。Vuex的核心概念包括state、mutations、actions和getters。 - state:存储应用程序级别的状态,可以通过store.state访问。 - mutations:用于更改状态的函数,必须是同步函数。可以通过store.commit方法调用。 - actions:用于处理异步操作的函数,可以包含任意异步操作。可以通过store.dispatch方法调用。 - getters:用于从store中获取状态的函数,可以通过store.getters访问。 下面是一个简单的示例,演示如何在Vue.js应用程序中使用Vuex: 1.安装Vuex ```shell npm install vuex --save ``` 2.创建store ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { incrementAsync ({ commit }) { setTimeout(() => { commit('increment') }, 1000) } }, getters: { getCount: state => { return state.count } } }) export default store ``` 3.在Vue组件中使用store ```javascript <template> <div> <p>Count: {{ count }}</p> <button @click="increment">Increment</button> <button @click="incrementAsync">Increment Async</button> </div> </template> <script> import { mapGetters, mapActions } from 'vuex' export default { computed: { ...mapGetters([ 'getCount' ]) }, methods: { ...mapActions([ 'increment', 'incrementAsync' ]) } } </script> ``` 在上面的示例中,我们创建了一个名为count的状态,并定义了一个名为increment的mutation和一个名为incrementAsync的action。我们还定义了一个名为getCount的getter,用于从store中获取count状态。在Vue组件中,我们使用mapGetters和mapActions帮助程序将getter和action映射到组件中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值