返回顶部
首页 > 资讯 > 前端开发 > VUE >vuex闲置状态的重置方案
  • 139
分享到

vuex闲置状态的重置方案

2024-04-02 19:04:59 139人浏览 泡泡鱼
摘要

本篇内容介绍了“Vuex闲置状态的重置方案”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言大型单页应用(

本篇内容介绍了“Vuex闲置状态的重置方案”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言

大型单页应用(后面都是指spa),我们往往会通过使用状态管理器 vuex 去解决组件间状态共享与状态传递等问题。这种应用少则几十个单页,多则上百个单页。随着路由的频繁切换,每个路由对应的 vuex 中的状态将越来越多。为了做到页面的极致优化,我们需要将那些闲置的状态重置,以减小占用的内存空间。

什么状态可以重置

vuex 强调采用集中式存储管理应用的所有组件的状态,但是我们真把所有的状态都放到 store 中去处理,你会发现开发起来非常痛苦。这里如果想很好的把控哪些数据需要放到 store 中去管理,首先要理解 vuex 是用来解决什么问题的。vuex 官网指出是为了解决 多个组件共享状态 的,那么我们就可以把多个组件的共享状态放到 store 中去管理,这里的多组件共享对于单页应用很多情况是跨路由的组件。如果 store只存储多组件共享的状态,那么我们就没必要去清理 vuex 中的状态了,因为这些状态随时会被用到。

而随着业务场景越来越复杂,很多与后台交互的逻辑也都放到了组件中,这样代码就变得很凌乱,vuex 也没有被充分利用。这时我们可以把与后台 api 交互的逻辑放到 vuex 中的action 去处理,后台返回的状态自然也就放到了 store 管理。这样处理后,组件就只负责对数据进行渲染,逻辑非常清晰。而此时,组件对应的 store 中的状态随着路由的切换将会越来越多,而这些状态就需要我们手动的去清理了。

很多方案都有取舍,如果将与后台 api 交互的数据放到组件中,就没必要去清理了,但是代码逻辑将变得比较乱。另外诸如 vuex 的插件vue-devtools 将无法监控到每次请求数据的变化...

什么时候去重置状态

我们想要的效果是在路由切换的时候,把上一个路由对应的 vuex 中的状态重置掉,但是路由和vuex 并没有一一对应的关系,如果要做到这种效果,那么我们需要维护一个路由与vuex 模块的对应关系,这样会很繁琐。不如当路由改变时去重置 vuex 中的所有状态。

vuex 中闲置状态如何清理

下面将结合我的GitHub实例 去说明,这个实例创建了一个单页应用,我们通过切换路由的时候将闲置的状态清除。

改造路由对应组件的 module 状态

实例中采用拆分 store 为多个 module 的方式,将路由对应的组件状态放到对应的 module 中,多组件共享的状态放到顶级的 store 中管理。大致如下:

// store/index.js
import page1 from "./modules/page1.js";
import page2 from "./modules/page2.js";
import page3 from "./modules/page3.js";
import page4 from "./modules/page4.js";
import page5 from "./modules/page5.js";

export default new Vuex.Store({
  state,
  getters,
  actions,
  mutations,
  modules: { // 每个路由对应的 module
    page1,
    page2,
    page3,
    page4,
    page5
  },
  plugins: __DEV__ ? [createLogger()] : [],
  strict: __DEV__ ? true : false
});

路由 page1 对应的 module 的 state 形如:

// store/modules/page1.js
const state = {
   // 列表数据
   page1Data: [],
   // 标题数据
   page1Title: ''
}

这些数据是通过调用后端 api 返回并复制的数据,如果我们在路由改变的时候重置这些数据,那么需要将初始化数据提取出来,并且暴露一个需要重置的标识方法 initState() ,代表路由改变的时候需要重置,当然这个方法名称是个约定,你也可以定义为其他名称。改造后为:

// store/modules/page1.js
// 放置你要重置的数据
const initState = {
  page1Data: [],
}

// state
const state = {
  // 参数解构
  ...initState,

  // 路由改变不想重置的数据
  page1Title: '',
  initState(){
    return initState
  }
}

全局 module 配置

定义全局 mutation 事件类型

// store/types.js
export const RESET_STATES = 'resetStates'

定义全局 mutation

// store/mutation.js

import * as types from './types'

// 检测所有的 state 并把 `initState()` 中的属性重置
function resetState(state, moduleState) {

  const mState = state[moduleState];

  if (mState.initState && typeof mState.initState === 'function') {

    const initState = mState.initState();

    for (const key in initState) {

      mState[key] = initState[key];
    }
  }

}

export default {

  [types.RESET_STATES](state, payload) {

    for (const moduleState in state) {

      resetState(state, moduleState);
    }
  },

}

定义全局 action

// store/action.js
import * as types from './types'

export default {
  // rest state action
  resetStates:function (context, payLoad) {

    context.commit(types.RESET_STATES, payLoad);
  }
}

路由切换触发重置方法

至此一切准备就绪,只需要在路由改变时触发重置的方法即可,在入口 vue 文件中处理

// components/app.vue
<script>
  import {mapState, mapActions} from "vuex"
  export default{

    methods: {

      ...mapActions({
        resetStates: "resetStates"
      })
    },

    watch: {

      $route(to, from) {
        // 路由改变发起重置
        this.resetStates();
      }
    }
  }
</script>

如果你的 chrome 浏览器安装了vuejs-devtools 在路由切换的时候就能够很清晰的看到上一个路由数据的的重置过程。

“vuex闲置状态的重置方案”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: vuex闲置状态的重置方案

本文链接: https://lsjlt.com/news/80035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vuex闲置状态的重置方案
    本篇内容介绍了“vuex闲置状态的重置方案”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言大型单页应用(...
    99+
    2024-04-02
  • Windows Server 2008关闭闲置状态的IDE通道
      正常情况下,我们在启动Windows Server 2008系统的时候,该操作系统会自动将安装在对应主机中的所有硬件全部加载成功,这个加载过程会往往会拖累系统的正常启动速度,同时也会消耗不少宝贵的系统资源;其实,安装...
    99+
    2023-05-24
    通道 状态 关闭 IDE 系统 Windows Server 我们 使用 界面 闲置
  • 如何优化vuex的状态管理方案
    这篇文章主要为大家展示了“如何优化vuex的状态管理方案”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何优化vuex的状态管理方案”这篇文章吧。在 vuejs...
    99+
    2024-04-02
  • vuex状态管理数据状态查询与更改的方法
    本篇内容介绍了“vuex状态管理数据状态查询与更改的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!状态管理数据状态查询与更改1.main...
    99+
    2023-06-30
  • VUE TypeScript与Vuex:开箱即用的状态管理解决方案
    Vue TypeScript 概览 Vue TypeScript 是一个基于 TypeScript 的 Vue.js 框架。它允许您使用 TypeScript 来构建 Vue.js 应用程序,从而可以利用 TypeScript 提供的强...
    99+
    2024-02-08
    Vue TypeScript Vuex 状态管理 前端框架 JavaScript
  • Vuex状态管理的方法是什么
    这篇文章主要介绍“Vuex状态管理的方法是什么”,在日常操作中,相信很多人在Vuex状态管理的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vuex状态管理的方法是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-03
  • Vue 重置data的数据为初始状态操作
    在某些情况下,需要重新使用data中的数据,但是data中的数据已经被各种表单、变量等赋值,那么怎么重置data的值呢? 1. 逐个赋值 ... data() { return...
    99+
    2024-04-02
  • iOS 两种方式设置状态栏
    ios9.0以前设置状态栏字体颜色 ///白色  [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; ///黑色  [[UIA...
    99+
    2023-10-08
    ios cocoa macos
  • linux怎么重置系统到刚安装状态
    在Linux系统中,可以使用以下几种方法来重置系统到刚安装状态:1. 重新安装系统:最简单的方法是重新安装Linux系统。你可以使用...
    99+
    2023-09-27
    linux
  • 浅析集中式状态管理Vuex的使用方法
    如何使用集中式状态管理的Vuex?下面本篇文章就带大家了解一下vuex,简单聊聊vuex的使用方法,希望对大家有所帮助!1.vuex是什么一个专门在Vue中实现集中式状态管理的一个Vue插件,可以对vue应用中多个组件的共享状态进行集中式的...
    99+
    2023-05-14
    VueX
  • nuxt踩坑之Vuex状态树的模块方式怎么用
    这篇文章主要介绍了nuxt踩坑之Vuex状态树的模块方式怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vuex状态树-模块方式官方文档...
    99+
    2024-04-02
  • packet.go:123:关闭错误的空闲连接:连接被对等方重置
    在进行网络编程时,我们经常会遇到一些错误,其中包括“packet.go:123:关闭错误的空闲连接:连接被对等方重置”的错误信息。这种错误通常表示连接方意外关闭了连接,导致当前连接无效...
    99+
    2024-02-10
    网络编程
  • 如何设置阿里云服务器备案状态显示
    在使用阿里云服务器的过程中,了解和掌握服务器的备案状态对于保障服务器安全、确保业务运行稳定具有重要意义。本篇文章将详细介绍如何设置阿里云服务器的备案状态显示。 一、服务器备案服务器备案,也称为域名备案,是指网站的所有者或运营者在接入互联网网...
    99+
    2023-11-16
    阿里 如何设置 状态
  • 详解CentOS重启后resolv.conf被重置的解决方案
    近期在修改一台CHyBiUcmentOS服务器的dns时发现只要重启服务器DNS就会被强制还原,解决方案如下: 1、首先在网卡设置中修改NM_CONTROLLED的值: 修改文件/etc/sysconfig/networ...
    99+
    2022-06-04
    resolv.conf重启 resolvconf 服务重启
  • 查看HARD的配置及运行状态
    查看HARD的配置及运行状态HADR连接状态:当备用数据库的HADR启动时,它首先进入本地同步更新状态。并根据本地日志路径配置参数及日志归档方法的设置检索本地系统中的日志文件并重放。当本地日志文件重放完毕,...
    99+
    2024-04-02
  • jquery中怎么设置button的disable状态
    jquery中怎么设置button的disable状态  ,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。$("#btn&q...
    99+
    2024-04-02
  • vue项目keepAlive配合vuex动态设置路由缓存方式
    目录需求效果图解决方案1.App.vue文件2.main.js文件3.store/modules/common.js文件4.utils/utils.js文件5.store/index...
    99+
    2024-04-02
  • SpringBoot静态资源css,js,img配置方案
    一、概述springboot 默认静态资源访问的路径为:/static 或 /public 或 /resources 或 /META-INF/resources 这样的地址都必须定义在src/main/resources目录文件中,这样可以...
    99+
    2023-05-31
    spring boot 静态
  • 怎么利用Resetter将Ubuntu系发行版重置为初始状态
    这篇文章主要介绍了怎么利用Resetter将Ubuntu系发行版重置为初始状态,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。这个 Resetter 工具可以将 Ubuntu、...
    99+
    2023-06-16
  • dedecms 伪静态重写设置修改方法
    1. 首先栏目和文章最好设置成动态浏览. 这样才不会生成静态html文件. Dede教程-598080707.NET 2. 设置重写规则. 在系统目录下加一个 .htaccess文件. 内容为 这里需要注意的是:linu...
    99+
    2022-06-12
    伪静态
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作