• vue3+vite中使用vuex


    前言:

          在vue3+vite创建的项目中使用vuex,要注意的是vite有部分写法和之前的webpack是不同的,比如,他不支持 require,想把vue2的项目直接升级到vue3的时候,需要改很多地方,如果非要使用vite也可以,记得改相关的内容。

    具体步骤:

    1、安装vuex( vue3建议 4.0+ )

    pnpm i vuex -S

    2、main.js中配置

    1. import store from '@/store'
    2. // hx-app的全局配置
    3. const app = createApp(App)
    4. app.use(store)

    3、新建相关的文件夹与文件,这里配置多个不同vuex内部的js,使用vuex的modules来放不同的页面,文件,然后统一使用一个getters.js

     index.js  核心文件,这里使用了import.meta.glob,而不是require

    1. import getters from './getters'
    2. import { createStore } from 'vuex'
    3. const modulesFiles = import.meta.glob('./modules/*.js',{ eager: true }); // 异步方式
    4. let modules = {}
    5. for (const [key, value] of Object.entries(modulesFiles)) {
    6. var moduleName = key.replace(/^\.\/(.*)\.\w+$/, '$1');
    7. const name = moduleName.split('/')[1]
    8. modules[name] = value.default
    9. }
    10. const store = createStore({
    11. modules,
    12. getters
    13. })
    14. export default store

    getters.js 内部根据不同的页面来发送不同的state数据

    1. const getters = {
    2. sidebar: state => state.app.sidebar,
    3. token: state => state.user.token,
    4. }
    5. export default getters

    app.js   可以定义不同的变量,然后统一   export default

    1. const state = {
    2. sidebar: '123'
    3. }
    4. const mutations = {
    5. TOGGLE_SIDEBAR: state => {
    6. state.sidebar = '2222'
    7. },
    8. const actions = {
    9. toggleSideBar({ commit }) {
    10. commit('TOGGLE_SIDEBAR')
    11. }
    12. }
    13. export default {
    14. namespaced: true,// 为每个模块添加一个前缀名,保证模块命明不冲突
    15. state,
    16. mutations,
    17. actions
    18. }

    user.js  也可以直接返回一个对象,写法都可以

    1. export default {
    2. state: {
    3. token: '123'
    4. },
    5. mutations: {
    6. SET_TOKEN: (state, token) => {
    7. state.token = token
    8. },
    9. },
    10. actions: {
    11. }
    12. }

    4、具体页面使用

    1)引入

    import { useStore } from 'vuex'

    2)具体使用

    1. setup(){
    2. const store = useStore()
    3. }

    3)使用  mutations里面的方法

    store.commit("app/TOGGLE_SIDEBAR", 1)

    4)使用actions里面的方法

    store.dispatch("app/asyncAddStoreCount", 2)

    5、vuex中推出了一个插件(vuex-persistedstate),可以解决刷新数据无保存的问题,

    可以把数据除了vuex以外,在本地和会话(都支持)储存下

    1)安装

    pnpm i vuex-persistedstate -S

    2)store/index.js

    1. import createPersistedstate from 'vuex-persistedstate' //第一步导入
    2. import { createStore } from 'vuex'
    3. const store = createStore({
    4. modules,
    5. getters,
    6. //第二步是加这段代码,默认是存到了localStorage中
    7. plugins: [
    8. createPersistedstate({
    9. key: 'vuex-local', //存储持久状态的键。(默认:vuex)
    10. paths: ['user'], //部分持续状态的任何路径的数组。如果不加,默认所有。
    11. // storage: window.sessionStorage //默认存储到localStorage,想要存储到sessionStorage
    12. })
    13. ]
    14. })

    API

    createPersistedState([options])使用给定的选项创建插件的新实例。可以提供以下选项来配置您的特定需求的插件:

    • key :存储持久状态的键。(默认:vuex)
    • paths :部分持续状态的任何路径的数组。如果没有路径给出,完整的状态是持久的。(默认:[])
    • reducer :一个函数,将被调用来基于给定的路径持久化的状态。默认包含这些值。
    • subscriber :一个被调用来设置突变订阅的函数。默认为store => handler => store.subscribe(handler)
    • storage :而不是(或与)getState和setState。默认为localStorage。
    • getState :将被调用以重新水化先前持久状态的函数。默认使用storage。
    • setState :将被调用来保持给定状态的函数。默认使用storage。
    • filter :将被调用来过滤将setState最终触发存储的任何突变的函数。默认为() => true
  • 相关阅读:
    YOLO v4详解
    Java哈希表和哈希冲突
    nginx指定prefix路径启动
    Pisa-Proxy 之 SQL 解析实践
    Flask框架配置Celery-[2]:将前端上传的文件,通过异步任务保存,异步处理上传的文件
    SpringBoot-容器功能
    JQuery AJAX 通过一般处理程序 取列表
    AOP实现方式-P20,21,22
    【论文翻译】S4: a High-sparsity, High-performance AI Accelerator
    从功能测试到掌握自动化,四个月时间我是如何从点工进入互联网大厂
  • 原文地址:https://blog.csdn.net/qq_41619796/article/details/128019551