• 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
  • 相关阅读:
    ES状态查询相关API
    金融反欺诈常用特征处理方法
    android studio SQLite数据库的简单使用
    Java New对象分配内存流程
    C++——IO流
    鼎捷前端开发校招岗技术面面经(已过)
    【面试经典150 | 数学】回文数
    又双叒有兄弟因为 YYYY-MM-dd 被叫去加班了...
    python之numpy
    sqlserver问题
  • 原文地址:https://blog.csdn.net/qq_41619796/article/details/128019551