我的项目是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. 如果读完这几百 Python 的书籍,能成编程大佬吗? #Python 入门 #编程 #编程学习 #知识分享

  2. 修改文件的所有者失败(chown: changing ownership of `uploads': Operation not permitted)

    在项目开发的时候,经常需要将文件上传到指定的目录下. 例如这次用thinkphp5的时候,需要在public目录下建立uploads目录用于存放上传的资源. 首先在命令窗口下输入: 1 mkdir u ...

  3. Python 潮流周刊#73:让我们对 PyPI 温柔一点,好吗?(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  4. 防火墙NAT配置与DHCP下发

    该实验如果有做的不足的地方请见谅 实验目标: 按要求划分区域,公司内部办公区为trust,服务器区为dmz,外部网络为untrust. PC1和PC2为公司内部办公区,需要从防火墙中的DHCP服务获取 ...

  5. NDT论文翻译

    The Normal Distributions Transform: A New Approach to Laser Scan Matching 正态分布变换:激光扫描匹配的新方法 摘要:匹配 2D ...

  6. 串(C语言实现)

    文章目录 1.串的数据类型定义 数据对象 1.1 数据关系 1.2 基本操作 2.串的存储结构 2.1 串的顺序存储 2.2 串的链式存储 3.串的模式匹配算法 3.1BF 算法 3.2KMP 算法 ...

  7. QT生成固定长度的随机字符串

    最近项目中有一个需要使用QT生成固定长度随机字符串的需求,需求也很简单,就是生成一个n位的仅包含0-9以及大写字母的字符串,因为这也是第一次使用QT自身的随机数,这里就做一下简单记录. 废话不多说,直 ...

  8. 实证化讨论OpenAI的ChatGPT的政治倾向性

  9. 关闭 Chrome 浏览器 更新错误 弹窗

    1 Chrome使用一段时间后,右上角总会弹出弹窗,并且影响鼠标聚焦,如下图: 2 解决方式: 右键点击 桌面Chrome图表,然后点击属性,按照下图操作: 在 快捷方式--目标 后输入:  --di ...

  10. FA分析树

    \(CFG\) 的分析树 例如语句 \[(1)E \rightarrow E +E \\ (2)E \rightarrow E *E\\ (3)E \rightarrow -E\\ (4)E \rig ...