• Vuex基础使用存取值+异步请求


    一.Vuex简介

    vuex是什么?

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

    什么情况使用 Vuex?

    Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。

    如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。

    vuex使用场景:

    • 当一个组件需要多次派发事件时。例如购物车数量加减。
    • 跨组件共享数据、跨页面共享数据。例如订单状态更新。
    • 需要持久化的数据。例如登录后用户的信息。
    • 当您需要开发中大型应用,适合复杂的多模块多页面的数据交互,考虑如何更好地在组件外部管理状态时

    vuex 的五个核心概念

    • State 定义状态(变量)

    • Getter 获取状态(变量的值)

    • Mutation 修改状态(修改变量的值)

    • Action 触发 mutation 函数,从而修改状态

    • Module 当状态很多时,把状态分开来管理

    二、Vuex使用

    2.1 Vuex安装

    注意: node.js运行环境

    1、node.js版本10输入下指令进行安装

    npm install vuex 

    2、node.js版本18请执行下指令 

    npm i -S vuex@3.6.2 

     下载执行命令:

     安装完成出现以下配置说明成功

    创建store(仓库)模块

    三、使用Vuex获取、修改值案例


    在项目中创建store目录

    state.js:

    1. export default{
    2.   eduName:'ar.小白',
    3.   aname:'',
    4.   bname:''
    5. }


    mutations.js:

    1. export default {
    2.   setEduName: (state, payload) => {
    3.    
    4.     state.eduName = payload.eduName;
    5.   }
    6. }


    getters.js:

    1. export default {
    2.   getEduName: (state) => {
    3.     return state.eduname;
    4.   }
    5. }


    actions.js 先不写代码。

    index.js:

    1. import Vue from 'vue'
    2. import Vuex from 'vuex'
    3. import state from './state'
    4. import getters from './getters'
    5. import actions from './actions'
    6. import mutations from './mutations'
    7. Vue.use(Vuex)
    8. const store = new Vuex.Store({
    9.      state,
    10.      getters,
    11.      actions,
    12.      mutations
    13.  })
    14.  
    15.  export default store


    3.2 引用


    在src中的main.js进行引用,如下:

    1. import store from './store'
    2.  
    3. /* eslint-disable no-new */
    4. new Vue({
    5.   el: '#app',
    6.   router,
    7.   store,
    8.   data(){
    9.     return{
    10.       Bus:new Vue()
    11.     }
    12.   },
    13.   components: { App },
    14.   template: ''
    15. })
    3.1 创建两个菜单组件

    page1:

    1. <template>
    2. <div>
    3. <h1>page1</h1>
    4. <p>请输入您要修改的值</p>
    5. <input type="text" v-model="msg">
    6. <button @click="changed">修改参数值</button>
    7. <button @click="getData">获取参数值</button>
    8. </div>
    9. </template>
    10. <script>
    11. export default {
    12. data () {
    13. return {
    14. msg: 'page1'
    15. }
    16. },
    17. methods:{
    18. changed(){
    19. this.$store.commit('setName',{Name:this.msg})
    20. },
    21. getData(){
    22. let name = this.$store.getters.getName;
    23. alert(name);
    24. }
    25. }
    26. }
    27. </script>
    28. <style>
    29. </style>

    page2:

    1. <template>
    2. <div>
    3. <h1>page2</h1>
    4. {{change}}
    5. </div>
    6. </template>
    7. <script>
    8. export default {
    9. data () {
    10. return {
    11. msg: 'page2'
    12. }
    13. },
    14. computed:{
    15. change(){
    16. return this.$store.getters.getName;
    17. }
    18. }
    19. }
    20. </script>
    21. <style>
    22. </style>

    到项目中src的router的index.js文件中配置路径,如下:

    1. import page1 from '@/Views/vuex/page1'
    2. import page2 from '@/Views/vuex/page2'
    1. {
    2.         path: '/vuex/page1',
    3.         name: 'page1',
    4.         component: page1
    5.       },
    6.       {
    7.         path: '/vuex/page2',
    8.         name: 'page2',
    9.         component: page2
    10.       }

    模拟菜单数据

    1. <!-- 模拟数据 -->
    2. <el-submenu key="key_999" index="index_999">
    3. <template slot="title">
    4. <span slot="title">Vuex管理</span>
    5. </template>
    6. <el-menu-item key="key_99901" index="/vuex/page1">
    7. <span>page1</span>
    8. </el-menu-item>
    9. <el-menu-item key="key_99902" index="/vuex/page2">
    10. <span>page2</span>
    11. </el-menu-item>
    12. </el-submenu>
    13. </el-menu>

    效果展示:

    四.Vuex的同步异步

    解释:

    同步操作:
    同步操作是指立即执行并修改应用程序状态的操作。在 Vuex 中,这通常通过 mutations 来实现。Mutations 是用于修改状态的函数,它们必须是同步的,这意味着它们不应该包含异步代码。当你需要在应用程序中执行一些立即生效的状态变更时,同步操作是非常有用的。

    异步操作:
    异步操作是指可能需要一些时间来执行的操作,例如数据获取、网络请求、或其他需要等待的任务。在 Vuex 中,这通常通过 actions 来处理。Actions 是用于分发异步任务的函数,它们可以包含异步代码,例如异步 API 调用,然后在异步操作完成后提交 mutations 来修改状态。

    异步操作适用于需要等待的任务,因为它们不会阻塞应用程序的其他操作,使得应用可以继续响应用户的输入。你可以在异步操作中使用异步 JavaScript 特性,如 Promises 或 async/await,来管理异步代码。

    4.1 异步改变值


    1、src/store/actions.js

    1. export default {
    2.   setNameSync: (context, payload) => {
    3.     //context指的是vuex的上下文
    4.     setTimeout(function() {
    5.       context.commit('setName', payload)
    6.     }, 3500)
    7.   }
    8. };


     2、在page1.vue组件添加异步事件

    1. <button @click="Asynchronization">异步改变参数值</button>
    2.  
    3.     Asynchronization() {
    4.         this.$store.dispatch('setNameSync', {
    5.           name: this.msg
    6.         })
    7.       }

    效果图:


     

  • 相关阅读:
    企业如何通过CRM获得竞争力?
    面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?
    2023年亚太杯APMCM数学建模大赛ABC题辅导及组队
    基于SVM+Webdriver的智能NBA常规赛与季后赛结果预测系统——机器学习算法应用(含python、ipynb工程源码)+所有数据集(四)
    邱锡鹏神经网络怎么样,邱锡鹏神经网络答案
    Pygame入门
    【APP源码】基于Typecho博客程序开发的博客社区资讯APP源码
    F. Quests Codeforces Round #835 (Div. 4)(二分答案)
    python代码中激活Anaconda虚拟环境并执行
    计算机网络复习06——应用层
  • 原文地址:https://blog.csdn.net/liaozhixiangjava/article/details/133779994