Vuex的简介以及入门案例

简介: Vuex的简介以及入门案例

一.Vuex的简介

Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态的一致性。Vuex能够帮助我们更好地组织和管理Vue.js应用中的状态。

在Vue.js中,组件之间的通信可以通过props和events来实现,但是当应用较大且组件较多时,这种方式会变得复杂和冗余。Vuex提供了一个全局的状态管理机制,将应用中的状态存储在一个单一的、可预测的状态树中(即store),并可以在任何组件中访问和修改这些状态

Vuex的核心概念包括:state(存储应用的状态)、mutations(修改状态的方法)、actions(处理异步操作)、getters(获取派生状态)。通过定义这些概念,我们可以清晰地管理应用的状态和数据流动。

使用Vuex能够带来以下好处:

  1. 单一状态树:所有的应用状态都集中到一个store中,方便管理和维护。
  2. 状态可预测:通过mutations来修改状态,使得状态的变化变得可追踪和可调试。
  3. 组件通信更简单:不需要通过props和events来传递数据,直接从store中获取和修改状态。
  4. 支持插件扩展:可以使用插件来扩展Vuex的功能,例如调试工具、持久化存储等。

图像理解

传统传值的图像理解

二.Vuex的入门案例

1.下载Vuex相关的插件

npm install vuex -S

 

2.Vuex中的存值和取值

2.1前期准备工作

2.2搭建Vue界面
<template>
  <div>
     <h1>第一个界面</h1>
     {{msg}}
  </div>
</template>
<script>
  export  default{
       data() {
         return{
           msg:'默认值'
         }
       }
  }
</script>
<style>
</style>
<template>
  <div>
     <h1>第二个界面</h1>
     {{msg}}
  </div>
</template>
<script>
  export  default{
       data() {
         return{
           msg:'默认值'
         }
       }
  }
</script>
<style>
</style>
搭建架子
import page1 from '@/views/vuex/page1'
import page2 from '@/views/vuex/page2'
 {
          path: '/vuex/page1',
          name: 'page1',
          component: page1
        },
        {
          path: '/vuex/page2',
          name: 'page2',
          component: page2
        }

2.3构建Vuex的包用于存储和Vuex相关的文件

3.构建Store包用于数据的存储和取值

3.1在state.js中定义变量

//  定义变量
export  default {
    eduName:'刘兵的爱情故事'
}

3.2在mutations.js中设置值

//设置值
export  default {
    setEeduName:(state,payload)=>{
       state.eduName=payload.eduName;
    }
}

 state 就是 state.js文件导出的参数
 payload vue 传递的参数

3.3在getter.js中取值

// /取值
export  default {
    getEeduName:(state)=>{
     return state.eduName;
    }
}

3.4整合资源

 

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import actions from './actions'
import mutations from './mutations'
Vue.use(Vuex)
const store = new Vuex.Store({
  state,
  getters,
  actions,
  mutations
 })
 export default store

4.在定义的Vue组件中实现实例

<template>
  <div style="padding: 70px;">
    <h1>第一个界面</h1>
    <p>改变值</p>
    器输入你的搞笑故事<input v-model="msg">
    <button @click="fun1">获取值</button>
    <button @click="fun2">改变值</button>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        msg: '默认值'
      }
    },
    methods: {
      fun1() {
        let eduNames = this.$store.state.eduName;
        alert(eduNames);
      },
      fun2() {
        this.$store.commit('setEeduName', {
          eduNames:this.msg;
        })
      }
    }
  }
</script>
<style>
</style>
<template>
  <div>
    <h1>第二个界面</h1>
    {{eduName}}
  </div>
</template>
<script>
  export default {
    data() {
      return {
        msg: '默认值'
      }
    },
    computed: {
      eduName() {
        return this.$store.getters.getEeduName    ;
      }
    }
  }
</script>
<style>
</style>

效果展示

三.Vuex的请求

数据请求可以是异步和同步的。异步请求通常用于获取来自后端API的数据,而同步请求则可以用于更新应用程序的状态。

1.异步请求

异步请求在Vuex中通常通过actions来处理。Actions提供了一种处理异步操作的方式,它会接收一个context对象作为参数,包含了state、commit、dispatch等属性,可以使用这些属性来获取state,触发mutations和执行另外的actions。在action中发起异步请求时,可以使用Promise或async/await来处理异步操作。当请求成功后,action会触发对应的mutation来修改store中的数据。

2.同步请求

同步请求通常使用mutation来处理。Mutations提供了一种同步更新应用状态的方式,它接收一个state对象作为第一个参数,以及一个payload作为第二个参数,payload包含需要更新的数据。在mutation中,直接修改state的数据即可,同步更新应用状态。

需要注意的是,在Vuex中,要遵循单一状态树的原则,每个mutation或action都应该只更新一个状态。同时,应该尽量把state的状态变化集中到mutation中,避免在组件中直接修改状态,以减少应用错误和难以维护的问题。

总结

  • 异步请求通常由actions来处理,通过触发对应的mutation来修改store中的数据。
  • 同步请求通常由mutation来处理,直接修改store中的数据。
  • 遵循单一状态树原则,每个mutation或action应该只更新一个状态。

3.异步请求实例

3.1定义action.js设置值

//设置值
export default {
  setEeduNameAsync: (context, payload) => {
    // context vuex中的上下文
    setTimeout(function() {
      context.commit('setEeduName', payload);
    }, 15000);
  },
  setEeduNameAjax: (context, payload) => {
    let _this=payload._this;
    let url=_this.axios.urls.VUEX_AJAX;
    let params={
      resturantName:payload.eduName
    }
    _this.axios.post(url, params).then(r => {
      console.log(r)
    }).catch(e => {
    })
  }
}

3.2在page1.vue设置点击事件和事件实现

<button @click="fun3">改变值(异步请求)</button>
    <button @click="fun4">改变值(异步请求后台数据)</button>
//异步请求
      fun3() {
        this.$store.dispatch('setEeduNameAsync', {
          eduName: this.msg
        })
      },
 fun4(){
       this.$store.dispatch('setEeduNameAjax', {
         eduName: this.msg,
         _this:this
       })
      }

效果展示

相关文章
|
自然语言处理 IDE 开发工具
通义灵码编程智能体上线,支持Qwen3模型
通义灵码最全使用指南,一键收藏。
127918 31
通义灵码编程智能体上线,支持Qwen3模型
|
11月前
|
存储 JavaScript 前端开发
深入理解 Vuex:Vue.js 状态管理的利器
【10月更文挑战第11天】 深入理解 Vuex:Vue.js 状态管理的利器
172 2
|
11月前
|
存储 移动开发 JavaScript
vuex的工作流程,模块化使用案例分享,及状态持久化
vuex的工作流程,模块化使用案例分享,及状态持久化
222 0
|
机器学习/深度学习 算法 PyTorch
深度强化学习在自动扩展云资源中的应用
【8月更文第19天】随着云计算的普及,企业越来越依赖于云服务来处理大量数据和运行复杂的应用程序。为了应对不断变化的工作负载,云提供商通常会采用自动扩展机制来动态调整资源分配。然而,这种自动扩展需要考虑成本和性能之间的平衡。传统的基于规则或阈值的自动扩展策略往往难以适应高度动态的工作负载变化。而深度强化学习(DRL)提供了一种灵活且强大的方法来优化资源分配策略,以达到最佳的成本效益比。
214 0
|
移动开发 前端开发 JavaScript
"跨界大战!React Native、Weex、Flutter:三大混合开发王者正面交锋,揭秘谁才是你移动应用开发的终极利器?"
【8月更文挑战第12天】随着移动应用开发的需求日益增长,高效构建跨平台应用成为关键。React Native、Weex与Flutter作为主流混合开发框架各具特色。React Native依托Facebook的强大支持,以接近原生的性能和丰富的组件库著称;Weex由阿里巴巴开发,性能优越尤其在大数据处理上表现突出;Flutter则凭借Google的支持及独特的Dart语言和Skia渲染引擎,提供出色的定制能力和开发效率。选择时需考量项目特性、团队技能及生态系统的成熟度。希望本文对比能助你做出最佳决策。
371 1
|
11月前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
326 3
|
小程序 搜索推荐 算法
微信小程序外卖管理的设计与实现(论文+源码)_kaic
微信小程序外卖管理的设计与实现(论文+源码)_kaic
|
负载均衡 Java 微服务
深入理解Spring Cloud中的服务发现与注册
深入理解Spring Cloud中的服务发现与注册
|
Java API 网络架构
【Spring Boot】详解restful api
【Spring Boot】详解restful api
269 0
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。