我的项目是vue3+element-plus

我是个菜鸡,我不懂前端。想做一个tags的导航标签页。但是点击标签页之后页面仍然是会重新请求。感觉这不就跟没做一样吗?

遂百度GPT,第一种方式采用的就是存储到session里。搞了大半天,突然觉得这样好捞,遂采用vuex。虽然两者理论上区别不大,但是说起来vuex有B格

查看了一些教程,因为我是刚做前端,一边百度一边写代码,我是不懂vuex的,虽然看着好像也不复杂……我承认我笨B……

开整~~~~

首先,npm安装vuex。这个肯定是小白也知道。

npm i vuex

然后就是创建一个vuex的store。网上有说什么仓库的叫法,就是数据存储的仓库呗~

我这里其实就遇到一个坑的,一开始我不会用,以为是在A页面创建store,然后其他页面就能访问数据了,或者就是单页面引入,巴拉巴拉之类的。

主要一开始看到他的写法是这样的

import { createStore } from 'vuex'

因此我是认为。这东西是写在.vue页面的,就像我前面说的,不就是存页面的数据吗?  漏漏漏~~大漏特漏~~~

这里说下我搞懂后的理解。所谓的store仓库是必须在main.js去挂载的(如果我说的不对,那说明我还是理解的不透彻了)。这样才能全局去访问。至于页面的数据怎么往里面存嘛~~~一步一步来,先看我main.js的挂载

//vuex
import { createStore } from 'vuex'
//每个页面的store信息
import homePage from './config/vuex/homePage'
import homePanelPage from './config/vuex/homePanelPage'
import messageBoardPage from './config/vuex/messageBoardPage'
//存储信息
const store = createStore({
modules: {
homeStore: homePage,
homePanelStore: homePanelPage,
messageBoardStore:messageBoardPage
}
});
var app = createApp(App)
app.use(store)

首先是使用createStore去创建一个store,也就是所谓的仓库,其次我导入的那三个xxxPage文件。是我针对于单独的页面去设计的……怎么形容呢,就是每个页面要存储访问的键值对吧,key—value。别慌,等下看代码就知道了。 不过还是可以先去看官网的注释,看看这些属性都是干嘛的。

modeles,官网的解释是,如果都放在一起,程序变得复杂时,就会臃肿,因此可以分割成模块。so,homeStore就是home页面的store,messageBoardPage就是messageBoard页面的store,这应该很好理解吧?

现在, 开始看import messageBoardPage from './config/vuex/messageBoardPage' 导入的这个页面的内容

const state = {
echartDatas: null, // 存储图表数据
sitestats: null, // 存储统计数据
}; const mutations = {
upEchartDatas(state, echartDatas) {
state.echartDatas = echartDatas;
},
upSitestats(state, sitestats) {
state.sitestats = sitestats;
},
}; export default {
namespaced: true, // 启用命名空间
state,
mutations,
};
简单解释下
state存的就是数据源,我是理解为键值对,通过key去访问value。等下怎么访问的我会写,别急~~~ 这样你应该很清楚的知晓state是干嘛的了吧?官网或者其他博客解释的挺专业的,听不懂。你就理解成数据源,键值对就行,完全够用!
mutations,可以理解为事件。我觉得理解成方法集合比较好理解。可以看到代码里有两个方法upEchartDatas和upSitestats。通过名字可以看到是用来修改的,up是update的简写。然后有两个参数,state和echartdatas。
这个state是当前这个"页面"的state(数据源集合)。这个echartdatas是我自己起的名字,这个代表新的数据,方法的内容就是新数据替换老数据的结果。简单不?
再补充一点。官网形容mutations 是说    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。嘶。反正我第一眼看着懵逼的很。吃了没文化的亏啊…那我现在的理解就是,修改vuex里store的数据时,只能调用mutations 里的方法。当然,这里的说法叫提交,少废话看代码怎么使用的。
<script setup type="text/javascript">
// vuex
import { useStore } from "vuex";
const store = useStore(); onMounted(() => { if (store.state.homeStore.echartDatas == null) {
//获取图表数据
axios.get("BBS_SiteStats/GetEchartLine", null, null, (res) => {
var data = JSON.parse(res.data);
Object.assign(echartDatas, data);
});
} else {
Object.assign(echartDatas, store.state.homeStore.echartDatas);
} //获取统计信息
if (store.state.homeStore.sitestats == null) {
axios.get("BBS_SiteStats/GetSiteStats", null, null, (res) => {
var data = JSON.parse(res.data);
Object.assign(sitestats, data);
});
} else {
Object.assign(sitestats, store.state.homeStore.sitestats);
}
});
</script>

使用store需要使用vuex中的useStore。然后用store.state就行了。因为我是采用的模块化的方式,所以store.state.homeStore这个homeStore就是刚才配置的home页面的‘数据仓库’了,然后继续.来获取某一值。比如我贴的代码里的store.state.homeStore.sitestats。这里我是在onMounted页面加载完成后就去判断值是否等于null。因为我们默认设置的实话,值全都是null,只有在访问页面时,才会提交进去数据。我这里的话,如果仓库有值就赋值,没值就请求接口。至于提交到store‘仓库’的代码,我写法watch中。监听!因为vue的数据都是动态绑定的,因此更改的时候都会获取到新的数据。别慌,提交(更新)数据源的代码在这里!

const sitestats = reactive({});
watch(
sitestats,
(newvalue) => {
store.commit("homeStore/upSitestats", newvalue);
},
{ deep: true }
);
很简单store.commit("homeStore/upSitestats", newvalue);commit,可不就是提交嘛?第一个参数是你mutations里的方法,因为模块化了,所以我都代码里要加上是哪一个页面的数据,例如这个
"homeStore/upSitestats"。而newvalue则是监听到的修改之后的新的值,直接这样就修改咯~你要问怎么修改的,那你去看看mutations里的upSitestats方法呀~~~
 { deep: true }好像是,怎么解释呢。因为实际效果我并不确认,结合官网的说法就是,如果你的数据源是数组这种,它可以监听到你的子项是不是也修改了。差不多这意思吧,反正写上去吧,也不影响

还有一个点就是,刷新页面数据就没了,所以一开始我说,和session区别不大,但是听着有B格。当然了,可能是我只会了基础,所以大家一起来学习呀!!!

Vue3使用Vuex 教程(这才是真正的小白教程!)的更多相关文章

  1. git与github建立仓库连接步骤(纯小白教程)

    一.先对git 进行用户设置 首先你得在网上下载git软件并且安装,一路默认安装就好了,然后就可以开始本地仓库的建立了.打开你安装好的git, 在开始菜单里面找到git文件夹里面的git bash端 ...

  2. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  3. cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)

    链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...

  4. 制作Windows10政府版的小白教程

    制作Windows10政府版的小白教程 https://03k.org/make10entg.html 首先,宿主系统要比操作的系统新,因为低版本dism操作不了: 当然也可以单独下载ADK,提取最新 ...

  5. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(8)-Charles如何进行断点调试

    1.简介 Charles和Fiddler一样也有个强大的功能,可以修改发送到服务器的数据包,但是修改前需要拦截,即设置断点.设置断点后,开始拦截接下来所有网页,直到取消断点.这个功能可以在数据包发送之 ...

  6. VUE3 之 动画与过渡的实现 - 这个系列的教程通俗易懂,适合新手

    1. 概述 光环效应告诉我们: 当一个人在某一方面取得了巨大的成功,人们就会给他贴上正面的标签,这个人从此就被"优秀"的光环所笼罩,他做的一切,人们都认为是正确的. 例如:越是名气 ...

  7. 搭建个人wordpress博客(小白教程)

    新浪sae平台现在是有个免费个人空间使用,现在,教您如何使用该平台搭建属于自己的个人网站,本教程以wordpress程序安装包搭建个人网站. 申请新浪云账号 如果我们使用SAE新浪云计算平台作为服务器 ...

  8. MYSQL安装--小白教程

    这个是mysql的安装过程,其实mysql的安装也很简单,但是我安装了一下午!!一下午!!原因就是,我把mysql的官网都翻遍了,都没找到64bit的.msi安装包,后来才想到好像64bit的电脑可以 ...

  9. win7下安装linux(centos6.5)双系统详细小白教程

    在正式介绍linux安装教程之前,先声明一下本人也是刚开始接触linux,所以教程只以成功安装linux为目标,里面的具体步骤我都是参考网上的教程自己操作实现的,至于为什么要这么做就不多做解释,大家想 ...

  10. 超详细Hexo+Github博客搭建小白教程

    原文链接:超详细Hexo+Github博客搭建小白教程 去年9月的时候开始搭建了第一个自己的独立博客,到现在也稍微像模像样了.很多小伙伴应该也想过搭建一个自己的博客,网上也有一堆详细教程.我在此稍稍总 ...

随机推荐

  1. 盘点.NET支持的 处理器架构

    在一个会议上,中国招投标协会的技术负责人居然当着很多领导的面说.NET不能在国产服务器上运行,可以说这个技术负责人非蠢即坏.国产服务器的处理器架构主要包括x86.ARM.LoongArch.risc- ...

  2. cxv文件合并

    1.新建bat脚本 @echo off setlocal enabledelayedexpansion copy *.csv new.csv echo @@@@@@@@@@@@@合并成功!@@@@@@ ...

  3. Ubuntu 22.04 解决和 Windows 共享蓝牙设备的问题

    我有一个 Airpods,连接到 WIndows 可以正常工作,但连接到 ubuntu 后会无法连接,只能删除设备选择重联,但是这又会导致 Windows 不能连接到耳机,只能也删除重新连接,费神费力 ...

  4. 什么是 Nodejs

    这集来聊什么是 Nodejs ,看看 Node.js 是为了解决什么样的痛点而生的,为啥说它是一个 JS 的运行环境,以及 npm 是什么,为何能引发了 Web 开发的革命. Node.js 的诞生 ...

  5. EXCEL获取拼音首字母

    Excel 2016 按组合键ALT+F11调出VB窗口--插入--模块(复制代码到新模块中,复制完后始可关闭VB窗口) 复制以下代码到模块中 Function getpychar(char) tmp ...

  6. Nuxt.js 应用中的 build:error 事件钩子详解

    title: Nuxt.js 应用中的 build:error 事件钩子详解 date: 2024/11/7 updated: 2024/11/7 author: cmdragon excerpt: ...

  7. ARC133D Range XOR

    ARC133D Range XOR 题目链接:[ARC133D] Range XOR 非常好数位 dp. 思路 根据异或的前缀和,我们可以把式子化成这样. \[\sum_{i=l}^r\sum_{j= ...

  8. MySQL原理简介—5.存储模型和数据读写机制

    大纲 1.为什么不能直接更新磁盘上的数据 2.为什么要引入数据页的概念 3.一行数据在磁盘上是如何存储的 4.一行数据中的NULL值是如何处理的 5.一行数据的数据头存储的是什么 6.一行数据的真实数 ...

  9. 用于自然语言处理的循环神经网络RNN

    前一篇:<人工智能模型学习到的知识是怎样的一种存在?> 序言:在人工智能领域,卷积神经网络(CNN)备受瞩目,但神经网络的种类远不止于此.实际上,不同类型的神经网络各有其独特的应用场景.在 ...

  10. Java 技术,IBM 风格: 类共享

    共享类特性帮助减少内存占用并改进启动性能 Java 5.0 平台的 IBM 实现中新的共享类特性提供了一种完全透明和动态的方法,可以共享已经装载的所有类,而不会对共享类数据的 JVM 施加限制.这个特 ...