经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
vue3+vite中使用vuex的具体步骤
来源:jb51  时间:2022/11/28 8:56:04  对本文有异议

前言:      

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

具体步骤:

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

  1. 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)引入

  1. import { useStore } from 'vuex'

2)具体使用

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

3)使用  mutations里面的方法

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

4)使用actions里面的方法

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

5、vuex中推出了一个插件(vuex-persistedstate),可以解决刷新数据无保存的问题, 可以把数据除了vuex以外,在本地和会话(都支持)储存下

1)安装

  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

到此这篇关于vue3+vite中使用vuex的文章就介绍到这了,更多相关vue3+vite使用vuex内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号