• 【Vue】之Vuex的入门使用,取值,修改值,同异步请求处理---保姆级别教学


    一,Vuex入门

    1.1 什么是Vuex

            Vuex是一个专门为Vue.js应用程序开发的状态管理库。它用于管理应用程序中的共享状态,它采用集中式存储管理应用的所有组件的状态使得状态的管理变得简单和可预测

    官方解释Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。可以想象为一个“前端数据库”(数据仓库), 让其在各个页面上实现数据的共享包括状态,并且可操作

    1.2 Vuex的核心概念

    1. State(状态):使用单一状态树来存储应用程序的所有状态。该状态树是响应式的,当状态发生变化时,组件会自动更新。

    2. Getter(获取器):用于从状态中派生出新的状态。通过计算属性或方法,在获取器中可以对状态进行处理,从而得到新的值。

    3. Mutation(突变):用于修改状态的唯一方式。每个突变都是一个纯函数,接受当前的状态和一些可选的额外参数作为输入。在突变中,可以对状态进行同步修改。

    4. Action(动作):类似于突变,但是不直接修改状态。动作提交突变来改变状态。动作可以包含异步操作、以及对突变的多次提交。

    5. Module(模块):将应用程序的状态拆分成多个模块,每个模块拥有自己的状态、获取器、突变和动作。通过模块化的方式,可以更好地组织和管理状态。

    1.3 Vuex优点

    ①集中化管理状态,方便状态的跟踪和调试

    ②组件之间共享状态,减少了组件间的通信复杂度

    ③提供了一套规范和约束,使得状态的变化可追踪和可预测

    ④支持插件扩展,可以通过插件增加额外的功能

    二,Vuex的使用

    2.1 vuex使用步骤

    2.1.1 安装

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

         npm install vuex -S  

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

           npm i -S vuex@3.6.2

    注意:spa项目工作区间使用cmd终端命令窗口执行

    2.2.2 创建store模块

     每一个Vuex应用的核心就是store(仓库),store基本上就是一个容器,它包含着你的应用中大部分的状态 (state)

    store模块所需要的js文件:

     index.js

     state.js :共同维护的一个状态,state里面可以是很多个全局状态

      actions.js :数据的异步操作

      mutations.js :获取数据并渲染

       getters.js  :获取数据并渲染

    结构:

    2.2.3 在store/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. export default store

    2.2.4 main.js中导入并使用store实例

    import store from './store'

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

    3.1 创建两个组件

    如下 pageone与pagetwo组件

    3.2  配置路由

    src/router/index.js

    1. import pageone from '@/views/vuex/pageone'
    2. import pagetwo from '@/views/vuex/pagetwo'

    3.3 模拟菜单数据

    1. <el-submenu key="key_999" index="index_999">
    2. <template slot="title">
    3. <span slot="title">Vuex管理span>
    4. template>
    5. <el-menu-item key="key_99901" index="/vuex/pageone">
    6. <span>pageonespan>
    7. el-menu-item>
    8. <el-menu-item key="key_99902" index="/vuex/pagetwo">
    9. <span>pagetwospan>
    10. el-menu-item>
    11. el-submenu>

    3.4 vuex核心操作

    ①在state.js中定义全局参数

    state.js:

    1. export default{
    2. eduName:'我不是打工人'
    3. }

    ②在mutations.js中改变值

    mutations.js:

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

    ③在getters.js中获取参数值

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

    3.5 效果

    扩展:在别的页面上同样可以获取到state的值

    pagetwo.vue组件编写:

    1. computed:{
    2. eduName(){
    3. return this.$store.state.eduName
    4. }
    5. }

    三,Vuex异步请求处理

    3.1 异步改变值

    actions.js:异步改变state的值

    1. export default{
    2. setEduNameAsync:(context,payload)=>{
    3. setTimeout(function(){
    4. context.commit('setEduName',payload);
    5. },5000);
    6. }
    7. }

    在刚刚的Vue组件中新增一个按钮和点击事件

    1. fun3(){
    2. this.$store.dispatch('setEduNameAsync',{eduName:this.msg})
    3. }

    效果展示:

    3.2 异步发送Ajax到后端

    后端代码:

    1. package com.zking.ssm.controller;
    2. import com.zking.ssm.util.JsonResponseBody;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import org.springframework.web.bind.annotation.RestController;
    5. import javax.servlet.http.HttpServletRequest;
    6. import java.text.SimpleDateFormat;
    7. import java.util.Date;
    8. @RestController
    9. @RequestMapping("/vuex")
    10. public class VuexController {
    11. @RequestMapping("/queryVuex")
    12. public JsonResponseBody queryVuex(HttpServletRequest request) {
    13. String resturantName = request.getParameter("resturantName");
    14. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    15. String date = sdf.format(new Date());
    16. try {
    17. System.out.println("模拟异步情况,睡眠6秒,不能超过10秒,axios超时时间设置的是10秒!");
    18. Thread.sleep(6000);
    19. System.out.println("睡醒了,继续...");
    20. } catch (Exception e) {
    21. e.printStackTrace();
    22. }
    23. return new JsonResponseBody<>(resturantName + "-" + date,true,0,null);
    24. }
    25. }

    在api文件夹下的action.js设置后台请求的地址的封装(URL)

    'VUEX_AJAX': '/vuex/queryVuex', // 异常Ajax请求后端

    actions.js:异步发送ajax到后端

    1. setEduNameAjAX:(context, payload) => {
    2. let _this=payload._this;
    3. let url = _this.axios.urls.VUEX_AJAX;
    4. let params = {
    5. resturantName: payload.eduName
    6. }
    7. _this.axios.post(url, params).then(r => {
    8. console.log(r)
    9. }).catch(r => {
    10. });
    11. }

    在Vue组件中新增一个按钮和点击事件

    1. fun4(){
    2. this.$store.dispatch('setEduNameAjAX',{eduName:this.msg, _this:this})
    3. }

    效果展示:

  • 相关阅读:
    正确理解 lowbit
    github提示Permission denied (publickey),如何才能解决
    手机实时预览vscode写的html页面
    JEPG Encoder IP verilog设计及实现
    Postgresql 13 安装
    .NET 缓存类
    无线城市WiFi解决方案【完整Word】
    telegrom bot 发送消息
    windbg调试分析dump工具,使用windbg分析Qt崩溃原因
    详解 Java 19 中的记录类型的模式匹配
  • 原文地址:https://blog.csdn.net/m0_73192864/article/details/133743970