美文网首页Vue3
Vue3基础之Vuex使用和持久化存储

Vue3基础之Vuex使用和持久化存储

作者: 翟小乙 | 来源:发表于2023-06-27 17:25 被阅读0次

简述

我们本章节主要是通过两种方式使用Vuex,第一种是简单使用,适用于简单业务不特别依赖与vuex。第二种是模块化,适用于复杂的业务处理,按模块化区分。持久化存储,因部分关键数据在页面刷新后还需要保存,所以需要持久化存储。
Vue3使用vuex,其实和Vue2使用一样。

Vue2使用Vuex之Vue使用vuex进行项目模块化,两种调用方式

安装

  • 安装vuex
npm install vuex -s
  • 安装vue-persistedstate
npm i vuex-persistedstate -s

目录

一. 基本使用
二. 模块化使用
三. 持久化存储

一.基本使用

  1. 项目结构


    4.png
  2. Main.js配置
import { createApp } from 'vue' 
import App from './App.vue'
import store from './stores/index'

const app = createApp(App);
 
app.use(store); // 挂载Vuex
app.mount('#app'); 
  1. Vuex的index.js
import {createStore} from 'vuex'
 const store = new createStore({
    state: { 
        acount:'账号是123456'
    }, 
    getters:{
        getAcount(state){
           return state.acount
        }
    },
    actions: {
        actAcount(state,msg){
            state.commit('setAcount',msg)
        }
    },
    mutations: {
       setAcount(state,msg){
        state.acount = msg
       }
    }, 
})
export default store
  1. 使用vuex
  • 使用computed,实现数据双向绑定,否则数据不会变化
  • vue3中使用,主要是拿到useStore 既可调用了。
<template>
 <div> 
    <div class="div1">
        vue3使用vuex
         <div>获取 state内数据: {{acount}}</div>
         <div>获取 getters内数据: {{getAcount}}</div>
         <button @click="clickActions"> 调用actions内函数:设置acount</button>
         <button @click="clickMutations"> 调用mutations内函数:设置acount</button>
    </div> 
 </div>
</template>
<script setup>
import {computed} from 'vue'
import { useStore } from 'vuex';
 const store = new useStore();
 const acount =  computed(()=>{
      return store.state.acount
 })
 const getAcount =computed(()=>{return store.getters.getAcount}) 
 const clickActions = ()=>{
    store.dispatch('actAcount','11111111111111')
 }
 const clickMutations = ()=>{
    store.commit('setAcount','22222222222222222')
 }

 console.log(store);
</script>

二.模块化使用

  1. 项目结构


    5.png
  2. Main.js配置

import { createApp } from 'vue' 
import App from './App.vue'
import store from './stores/index'

const app = createApp(App);
 
app.use(store); // 挂载Vuex
app.mount('#app'); 
  1. Vuex的index.js

import {createStore} from 'vuex'

import userInfo from './modules/user/info.js'

 const store = new createStore({ 
    modules: {
        //数据模块化
        userInfo: userInfo
    }
})
export default store
  1. modules下面的user模块
const state = {
  name: '简书'
}

const getters = {
    getName(state){
        return state.name
    }
}

const mutations = {
  setName (state, data) {
    state.name = data
   }
}
const actions = {
   setActionName ({ commit },data) { 
    commit('setName',data)
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}
  1. 使用vuex
<template>
 <div> 
    <div class="div1">
        vue3使用vuex
         <div>获取 state内数据: {{acount}}</div>
         <div>获取 getters内数据: {{getAcount}}</div>
         <button @click="clickActions"> 调用actions内函数:设置acount</button>
         <button @click="clickMutations"> 调用mutations内函数:设置acount</button>
    </div> 
 </div>
</template>
<script setup>
import {computed} from 'vue'
import { useStore } from 'vuex';
 const store = new useStore();
 const acount =  computed(()=>{
      return store.state.userInfo
 })
 const getAcount =computed(()=>{return store.getters['userInfo/getName']}) 
 const clickActions = ()=>{
    store.dispatch('userInfo/setActionName','这是简书actions')
 }
 const clickMutations = ()=>{
    store.commit('userInfo/setName','这是简书mutations')
 }

 console.log(store);
</script>

三. 持久化存储vuex-persistedstate

1. 配置参数
  • createPersistedState([options])使用给定的选项创建插件的新实例。可以提供以下选项来配置您的特定需求的插件:
  • key :存储持久状态的键。(默认:vuex)
  • paths :部分持续状态的任何路径的数组。如果没有路径给出,完整的状态是持久的。(默认:[])
  • reducer :一个函数,将被调用来基于给定的路径持久化的状态。默认包含这些值。
  • subscriber :一个被调用来设置突变订阅的函数。默认为store => handler => store.subscribe(handler)
  • storage :而不是(或与)getState和setState。默认为localStorage。
  • getState :将被调用以重新水化先前持久状态的函数。默认使用storage。
  • setState :将被调用来保持给定状态的函数。默认使用storage。
  • filter :将被调用来过滤将setState最终触发存储的任何突变的函数。默认为() => true
2. vuex引用
import createPersistedState from "vuex-persistedstate";  
  • 使用一:存储整个模块

将userInfo 存储到sessionStorage里面,key指定为zyjInfo

const zyjInfo =  createPersistedState({
       key:'zyj',
       storage: window.sessionStorage,//window.localStorage
       paths: ['userInfo']
   })
  • 使用二:存储指定模块内指定参数

将userInfo 中的name参数,存储到localStorage里面,key指定为zyjName

   const userInfoName =  createPersistedState({
        key:'zyjName',
        storage: window.localStorage,//window.sessionStorage
        paths: ['userInfo.name']
    })
3. 示例
  • store 实例增加配置如下

通过vuex 的plugins引用各个插件


import {createStore} from 'vuex'
import createPersistedState from "vuex-persistedstate";  
import userInfo from './modules/user/info.js'
   // 存储整个模块
    const zyjInfo =  createPersistedState({
        key:'zyj',
        storage: window.sessionStorage,//window.localStorage
        paths: ['userInfo']
    })
   // 存储模块内的age参数
    const userInfoAge =  createPersistedState({
        key:'zyjAge',
        storage: window.sessionStorage,//window.localStorage
        paths: ['userInfo.age']
    })
   // 存储模块内的name参数
    const userInfoName =  createPersistedState({
        key:'zyjName',
        storage: window.sessionStorage,//window.localStorage
        paths: ['userInfo.name']
    })
 const store = new createStore({
    modules: {
        //数据模块化
        userInfo: userInfo
    },
  // 将各个插件引用
    plugins:[userInfoAge,userInfoName,zyjInfo]
})
export default store

相关文章

  • vuex-along

    vuex-along - 持久化存储 state 的 vuex 扩展 安装 使用 配置

  • #搭建Vue+TypeScript项目(三)

    vuex的使用 使用vuex-persistedstate持久化存储,你不想一刷新页面,vuex就消失吧,不想就用...

  • VueJs对比ReactJs

    VueJs的用法: 状态管理 Vuex实现状态管理,针对数据的持久化存储的需求可以使用vuex-persisted...

  • prometheus+influxdb+grafana

    使用influxdb 作为prometheus持久化存储和使用mysql 作为grafana 持久化存储的安装方法...

  • Vuex + localStorage 实现用户登录

    使用过 Vuex 的都知道, 存储在 Vuex 中的数据不能持久化, 刷新页面之后数据就会丢失, 这对于用户登录需...

  • vuex持久化存储

    在开发过程中你会发现一旦你刷新了页面vuex就会被重置,刷新浏览器的话会导致js重新加载,Vuex的Store全部...

  • vuex数据持久化存储不生效的坑

    利用vuex-persistedstate对vuex中的数据进行持久化存储到sessionstorage中,但是一...

  • Vuex持久化存储之vuex-persist

    问题背景: Vuex 解决了多视图之间的数据共享问题。但是运用过程中又带来了一个新的问题是,Vuex 的状态存储并...

  • Vuex数据状态持久化:vuex-persistedstate、

    vuex-persistedstate 安装 使用 需要持久化的数据 vuex-persist 它就是为 Vuex...

  • pinia与vuex对比

    Vue3 中使用 Vuex的话需要使用Vuex4,并且存在很大缺陷,所以在 Componsition API诞生之...

网友评论

    本文标题:Vue3基础之Vuex使用和持久化存储

    本文链接:https://www.haomeiwen.com/subject/iytnydtx.html