首页 > 其他分享 >Vue3 使用Vuex与Vuex-persistedstate

Vue3 使用Vuex与Vuex-persistedstate

时间:2023-08-28 13:45:16浏览次数:56  
标签:mutations state 模块 Vue3 persistedstate Vuex store

Vuex与vuex-persistedstate

Vuex是什么?

Vuex是一个用于Vue.js应用程序的状态管理模式。它使得在应用程序中的所有组件之间共享和访问状态变得非常简单。Vuex将应用程序的状态存储在一个单一的存储库中,并且提供了一组用于更改状态的API。这使得状态管理变得更加可预测和易于调试。

Vuex的几个重要属性

在Vuex中,有几个重要的属性,如下所示:

  1. state:状态对象。它是Vuex存储库中的单一数据源,保存了应用程序的状态。它类似于Vue组件中的data对象,但可以被所有组件访问和修改。

  2. getters:计算属性。它类似于Vue组件中的计算属性,可以从state派生出一些状态,以供组件使用。Getters也可以接受其他getters作为参数。

  3. mutations:更改状态的方法。它是唯一允许修改state的方法。它们是同步的,必须是纯函数(不依赖于外部变量),以确保状态变化的可追溯性。

  4. actions:异步操作。它允许在mutations之前执行异步操作,以便在修改状态之前处理数据。actions可以包含任意异步操作,如API调用、异步操作或者其他mutations的提交。

export default createStore({
  state: {
  count:0,
  },
// 调mutations的方法通过commit调用,而
  mutations: {
    add(state, num) {
      state.count = state.count+num;
    },
	 sub(state, num) {
      state.count = state.count+num;
    },
	init(state, num){
	 state.count = 0;
	}
  },
  / 和mutations不同,不用传state,可以通过上下文context,
  //这个context 可以获取整个代码文件中的属性和方法
  //调用actions的要用dispatch调用
  actions: {
   add(context,num){
   context.commit("add",num)
   }
  },
  //计算属性
  getters: {
     getCount(state){
	 return state.count
	 }
  }
})

在组件中使用

<template>
<div>
<h3>{{$store.getters.getCount}}</h3>
</div>
</template>

import { useStore } from 'vuex' // 引入useStore 方法
export default {
const store = useStore()  // 该方法用于返回store 实例
}
//调用mutations中的方法
store.commit("add",1)
//调用actions中的方法
store.dispatch("add",2)

modules

  1. modules:模块化Vuex存储。当一个应用程序变得非常大并且具有复杂的状态时,可以使用modules将其拆分为更小的、更易于管理的模块。每个模块都可以具有自己的state、getters、mutations和actions,可以嵌套到多个级别。
    默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的,这样使得多个模块能够对同一 mutation 或 action作出响应。如果希望你的模块具有更高的封装度和复用性,此时就用到了命名空间这个概念,
    启用命名空间后,该模块中的所有 action、mutation 和 getter 都会自动带上模块的命名空间前缀。这样可以避免不同模块中的命名冲突,同时也使得代码更加清晰
    可以在单个模块中通过添加namespaced:true的方式使其成为带命名空间的模块。
export default {
  namespaced: true, // 为每个模块添加一个前缀名,保证模块命明不冲突 
  state: {
  count:0,
  },
  mutations: {
  },
  actions: {

  },
  getters: {
  }
}

通过 store/index.js 中进行引入

import { createStore } from 'vuex'
import user from './modules/user.js'
import test from './modules/test.js'
export default createStore({
  modules: {
    user,
    test
  }
})



组件中使用

//需要在模块名前加上命名空间前缀
store.commit('test/add', 1)
//如果没有启用命名空间,则不需要加上前缀
store.commit('add', 1)

Vuex-persistedstate 是什么?

Vuex-persistedstate是一个Vue.js插件,它可以将Vuex存储在浏览器的本地存储中,以便在刷新页面后保留应用程序的状态。它使用了一些现代浏览器提供的本地存储API,如localStorage或sessionStorage,以实现这一目标。

安装Vuex-persistedstate

npm install vuex-persistedstate --save

使用Vuex-persistedstate

import { createStore } from 'vuex'
import user from './modules/user.js'
import test from './modules/test.js'
//等等.......
import createPersistedState from 'vuex-persistedstate'//在 Vuex 的 store 中引入 vuex-persistedstate
export default createStore({
  modules: {
    user,
    test,
  },
    plugins: [
    // 数据持久化
    createPersistedstate({
	// 存储方式:localStorage、sessionStorage、cookies
       storage: window.sessionStorage
	   //key值
      key: 'keyName',
	  //需要持久化存储模块的状态
      paths: ['user']
    })]
})

标签:mutations,state,模块,Vue3,persistedstate,Vuex,store
From: https://www.cnblogs.com/wxxf/p/17561005.html

相关文章

  • vue3同一页面内重复引用同一操作dom的组件产生的问题
    [2023年8月28日12:39:40]vue3同一页面内标签<component>重复引用同一组件,且该组件内使用css选择器进行dom操作导致页面内相同组件发生变化的问题解决记录组件内进行dom操作,需要通过js方法进行选择器的元素获取,但当vue3全部渲染完毕后,页面内有多个id为test9的相同元素,元素选择将......
  • vue3中使用provide/inject
    父组件<template><hello-world/><button@click="changeMessage">按钮</button></template><scriptsetuplang="ts">importHelloWorldfrom"./components/HelloWorld.vue";import{provide,ref......
  • vue3探索——组件通信之v-model父子组件数据同步
    背景再很多场景中,我们可能想在子组件中修改父组件的数据,但事实上,vue不推荐我们这么做,因为数据的修改不容易溯源。Vue2写法在vue2中,我们使用.sync修饰符+自定义事件'update:xxx',来使父子组件数据同步。//父组件<template><div><h2>我是父组件,我有{{money}}¥......
  • 小白整理了VUEX
    在小白开发的项目中前端使用的是Vue,虽然在日常工作中可以使用Vue进行开发工作。但是没有系统的学习过Vue,对Vue的一些特性和方法使用时常常需要查询资料解决问题,查询资料常常会占用大量时间,尤其对Vuex的使用。虽然可以通过很多Vue框架中带有的Vuex框架直接使用,但是用的越多,小白就会......
  • vue--day70---搭建vuex 环境
    [email protected](Vuex)3.store4.vc==>store5.vue2中只能使用vuex的3版本  vue3中只能使用vuex的4版本6.store/index.js//改文件用于创建vuex最为核心的storeimportVuefrom'vue'//引入vueximportVuexfrom'vuex'Vue.use(Vuex)......
  • Vue3.3 + TS4 ,自主打造媲美 ElementPlus的组件库(16章)
    点击下载:Vue3.3+TS4,自主打造媲美ElementPlus的组件库(16章)提取码:n899 Vue3.3+TS4,自主打造媲美ElementPlus的组件库课程,又名:进阶必学,2023最新,打造媲美ElementPlus的组件库随着Web应用程序的复杂性不断增加,为了提高开发效率和维护性,我们往往需要构建可复用的组件库。Vue作为......
  • vue3中组件,api的自动导入
    vue3中ref,reactive等api和自定义组件等每个页面都要引入很麻烦,偷懒是人的天性,故引入自动导入插件,以此记录:1.vue3的api自动导入使用前:<scriptsetuplang="ts">import{ref,onMounted}from'vue'constimgUrl=ref("")constcanvas=ref()onMounted(()=>......
  • 在Vue3中使用 Pinia 保姆教程
    前言Vue3是Vue3是一款非常流行的JavaScript框架,它的出现为我们开发Web应用程序提供了更加高效和便捷的方式。在Vue3中,我们可以使用Pinia来进行状态管理,这是一个非常流行的状态管理库,它可以帮助我们更好地组织和管理应用程序的状态。在本文中,我们将探讨如何使用Vue3和Pinia,并持久化......
  • vue3 监听容器滚动到底部
    在容器里面添加@scroll事件<template><div@scroll="scrolling"id="content"><pv-for="iinArray.from({length:30},(v,i)=>i)">{{i}}</p></div><divv-if="bottom"......
  • Vue3内置组件suspense用法
    1、作用在使用异步组件时,由于需要等待组件加载完成后才能显示,因此可能会出现页面空白或显示错误信息的情况。而Suspense组件的作用就是在异步组件加载完成前显示一个占位符,提高用户体验。2、用法首先子组件AsyncShow:使用了promise包裹代码<template><div><h1>{{re......