Vue3

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

2023-06-27  本文已影响0人  翟小乙

简述

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

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

安装

npm install vuex -s
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
<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. 配置参数
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. 示例

通过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
上一篇下一篇

猜你喜欢

热点阅读