vuex配置和使用(vue3配置)

个人理解可能会有所偏差

1、基础使用

首先在创建项目时可以选择vuex和一些其他的配置,如果选择那么他会自动创建store文件夹生成默认格式,如果没有选择可以使用指令:

npm install vuex@next --save

然后手动创建即可

import { createStore } from 'vuex';const store = createStore({state() {return {count: 0,index:'测试文字'};},mutations: {increment(state) {state.count++;},},actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment');}, 1000);},},getters: {count: (state) => state.count,},
});export default store;

创建完毕之后在main.js中注册即可

使用方法

简单例子

<template><div><p>Count变量: {{ count }}</p><p>Double Count: {{ doubleCount }}</p><button @click="tong_bu">同步加1</button><button @click="yi_bu">异步加1</button></div>
</template><script setup>
import { ref,computed } from 'vue';
import { useStore } from 'vuex';
const store = useStore();
// 访问状态
const count = computed(() => store.state.count);
// 提交 mutation
const tong_bu = () =>{store.commit('increment');
console.log(1);
}
// 分发 action
function yi_bu() {store.dispatch('incrementAsync');console.log(1);
}
// 访问 getter
const doubleCount = computed(() => store.getters.doubleCount);
</script>

那么以上就是简单的使用方法


那么新的问题来了。(注:这段没什么用可以跳过可以直接看5拓展补充)

场景:我们登录成功后应该使用本地存储还是vuex呢?是一个问题,我们可以一块结合使用,因为我们在访问下一页或者页面刷新时令牌可能会丢失,所以我们需要一起结合使用。

2、使用 Vuex

  • 访问控制和响应式更新:Vuex 提供了一种集中管理和访问控制应用状态的方式,包括用户的登录状态和账号信息。使用 Vuex 可以轻松地在多个组件之间共享登录状态,且状态的更新会自动反映到依赖这些状态的组件中。
  • 非持久化:Vuex 的状态默认是非持久化的;当页面刷新或关闭时,存储在 Vuex 中的状态会丢失。这意味着如果用户刷新了页面,你可能需要从本地存储重新加载用户的登录状态和账号信息到 Vuex。

3、使用本地存储

  • 持久化localStoragesessionStorage 提供了简单的 API 来持久化数据在用户的浏览器中。使用本地存储可以在用户会话间保留登录状态和账号信息,即使页面被刷新或关闭后也能保留这些信息。
  • 安全考虑:存储敏感信息(如令牌、密码等)时需要小心。虽然本地存储提供了持久化能力,但它易于被跨站脚本(XSS)攻击读取。因此,敏感信息应该谨慎存储,避免直接存储用户的密码,仅存储身份验证令牌,并使用 HTTPS 来保护传输过程。

4、结合使用 Vuex 和本地存储

一个常见的做法是结合使用 Vuex 和本地存储来管理登录状态和账号信息:

  1. Vuex:用于应用内部管理和访问用户的登录状态和账号信息。这使得应用能够响应状态的变化,更新 UI 并提供动态交互。

  2. 本地存储:用于在页面刷新或关闭后持久化用户的登录状态(通常是令牌)。应用启动时,从本地存储加载登录状态并初始化 Vuex 的状态。

例子:

当用户成功登录时,保存令牌到本地存储并更新 Vuex 状态:

// 登录成功后
localStorage.setItem('authToken', authToken); // 保存令牌到本地存储store.commit('setAuthToken', authToken); // 更新 Vuex 状态

在 Vuex Store 的 index.js 文件中直接初始化

对于较小的应用,你可以直接在 Vuex store 的 index.js 文件中添加这段代码,确保它在应用启动时执行。

// store/index.js
import { createStore } from 'vuex';const store = createStore({state() {return {authToken: null,};},mutations: {setAuthToken(state, authToken) {state.authToken = authToken;},},actions: {initializeStore({ commit }) {const authToken = localStorage.getItem('authToken');if (authToken) {commit('setAuthToken', authToken);}},},
});// 调用初始化 action
store.dispatch('initializeStore');export default store;

在这个例子中,我们定义了一个 initializeStore 的 action 来从 localStorage 加载 authToken 并提交 mutation 更新状态。然后,在创建 store 之后立即调用这个 action。

应用启动时,从本地存储加载令牌并初始化 Vuex:

意思是在main.js中这么写。初始化 store

const authToken = localStorage.getItem('authToken');
if (authToken) {store.commit('setAuthToken', authToken);
}

这种方法结合了 Vuex 的响应式状态管理和本地存储的持久化能力,能够提供良好的用户体验,同时确保用户状态在需要的时候得到保留。

5、拓展(补充)

安装一个命令 这个方法是 持久化存储

npm install vuex-persistedstate

5.1、在store下面创建文件夹modules并在他的下面创建xxx.js(如:login.js)

目录

5.2、写入自己的方法

我这个是登录成功之后的存储


export const login = {namespaced:true,state: () => ({userInfo: {}, // 用于存储用户信息}),mutations: {// 更新用户信息setUserInfo(state, userInfo) {state.userInfo = userInfo;},},actions: {// 异步更新用户信息updateUserInfo({ commit }, userInfo) {// 假设这里是一些异步操作,如 API 调用// 完成后,使用 commit 来调用 mutationcommit('setUserInfo', userInfo);},},getters: {// 现在激活并使用 getter// loginName: state => state.userInfo.name, // 假设 userInfo 是一个对象,有一个 name 属性getUserInfo: state => state.userInfo,},};

5.3、index.js配置

引入

import { createStore } from 'vuex';
import { login } from '@/store/modules/login'
import createPersistedState from 'vuex-persistedstate';
  modules:{
login:login//登录模块},plugins:[createPersistedState({paths: ['login'], // 持久化 login 模块}),

这两句代码在getters后面写

5.4、home页面

引入下方文件

import { computed } from 'vue';
import { useStore } from 'vuex';
// vuex
const store = useStore();

当你登录成功后存储商品信息

     // 假设 res 是包含用户信息的对象store.commit('login/setUserInfo', res); // 提交 mutation 更新用户信息

打印查看

const userInfo = computed(() => store.getters['login/getUserInfo']);console.log(userInfo,'用户信息');

打印出来的数据位置应该是->ComputedRefImpl->value->target->获取到的数据data。

感谢观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/264961.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10 Redis之SB整合Redis+ 高并发问题 + 分布式锁

7. SB整合Redis Spring Boot 中可以直接使用 Jedis 实现对 Redis 的操作&#xff0c;但一般不这样用&#xff0c;而是使用 Redis操作模板 RedisTemplate 类的实例来操作 Redis。 RedisTemplate 类是一个对 Redis 进行操作的模板类。该模板类中具有很多方法&#xff0c;这些方…

git commit 后,本地远端都没有记录,消失不见

今天git commit 之后发现远端没有记录&#xff0c;本地没有最新代码记录 git commit 后&#xff0c;提交记录会消失不见的原因可能是&#xff1a; git只git commit了&#xff0c;没有push到远程分支&#xff0c;切换到其他分支时丢失。而且看不到提交记录&#xff0c;和找不到…

【AIGC】基于深度学习的图像生成与增强技术

摘要&#xff1a; 本论文探讨基于深度学习的图像生成与增强技术在图像处理和计算机视觉领域的应用。我们综合分析了主流的深度学习模型&#xff0c;特别是生成对抗网络&#xff08;GAN&#xff09;和变分自编码器&#xff08;VAE&#xff09;等&#xff0c;并就它们在实际应用中…

Maya笔记 设置工作目录

Maya会把素材场景等自动保存在工作目录里&#xff0c;我们可以自己定义工作目录 步骤1 创建workspace.mel文件 文件/设置项目 ——>选择一个文件夹&#xff0c;点击设置——>创建默认工作区 这一个后&#xff0c;可以在文件夹里看到.mel文件 步骤2 自动创建文件夹…

Qt程序设计-钟表自定义控件实例

本文讲解Qt钟表自定义控件实例。 效果如下: 创建钟表类 #ifndef TIMEPIECE_H #define TIMEPIECE_H#include <QWidget> #include <QPropertyAnimation> #include <QDebug> #include <QPainter> #include <QtMath>#include <QTimer>#incl…

Spring Boot与Netty:构建高性能的网络应用

点击下载《Spring Boot与Netty&#xff1a;构建高性能的网络应用》 1. 前言 本文将详细探讨如何在Spring Boot应用中集成Netty&#xff0c;以构建高性能的网络应用。我们将首先了解Netty的原理和优势&#xff0c;然后介绍如何在Spring Boot项目中集成Netty&#xff0c;包括详…

Linux进程 ----- 信号处理

目录 前言 一、信号的处理时机 1.1 处理时面临的情况 1.2 “合适”的时机 二、用户态与内核态 2.1 概念理论 2.2 再现 进程地址空间 2.3 信号处理过程 三、信号的捕捉 3.1 内核实现 3.2 sigaction 四、信号部分小结 前言 从信号产生到信号保存&#xff0c;中间经历…

计算机网络-后退N帧协议(弊端 滑动窗口 运行中的GBN 滑动窗口长度习题 GBN协议性能分析 )

文章目录 停等协议的弊端后退N帧协议中的滑动窗口GBN发送方必须响应的三件事GBN接受方要做的事运行中的GBN滑动窗口长度GBN协议重点总结习题1习题2GBN协议性能分析小结 停等协议的弊端 信道利用率低&#xff1a;在停等协议中&#xff0c;发送方在发送完一帧后必须等待接收方确…

高防IP简介

高防IP可以防御的有包括但不限于以下类型&#xff1a; SYN Flood、UDP Flood、ICMP Flood、IGMP Flood、ACK Flood、Ping Sweep 等攻击。高防IP专注于解决云外业务遭受大流量DDoS攻击的防护服务。支持网站和非网站类业务的DDoS、CC防护&#xff0c;用户通过配置转发规则&#x…

蓝桥杯备战刷题one(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…

项目:shell实现多级菜单脚本编写

目录 1. 提示 2. 演示效果 2.1. 一级菜单 2.2. 二级菜单 2.3. 执行操作 3. 参考代码 1. 提示 本脚本主要实现多级菜单效果&#xff0c;并没有安装LAMP、LNMP环境&#xff0c;如果要用在实际生成环境中部署LNMP、LAMP环境&#xff0c;只需要简单修改一下就可以了。 2. 演…

Mysql运维篇(五) 部署MHA--主机环境配置

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 大佬博文 https://www.cnblogs.com/gomysql/p/3675429.html MySQL 高可用&#xff08;MHA&#x…

php伪协议 [SWPUCTF 2022 新生赛]ez_ez_php(revenge)

打开题目 题目源代码如下 <?php error_reporting(0); if (isset($_GET[file])) {if ( substr($_GET["file"], 0, 3) "php" ) {echo "Nice!!!";include($_GET["file"]);} else {echo "Hacker!!";} }else {highlight_fi…

【高德地图】Android高德地图控件交互详细介绍

&#x1f4d6;第5章 与地图控件交互 ✅控件交互&#x1f9ca;缩放按钮&#x1f9ca;指南针&#x1f9ca;定位按钮&#x1f9ca;地图Logo ✅手势交互&#x1f9ca;缩放手势&#x1f9ca;滑动手势&#x1f9ca;旋转手势&#x1f9ca;倾斜手势&#x1f9ca;指定屏幕中心点的手势操…

C语言中strstr函数的使用!

strstr函数的作用是什么&#xff1f; 查找子字符串 具体直接看下面的这段代码我相信你必明白 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { char *p1 "abcdefghijklmnopqrstuvwxyz"; char* p2 "abc"; char* r…

智慧公厕让社区生活更美好

随着科技的迅猛发展&#xff0c;城市管理、城市服务均使用科技化的手段进行升级改造&#xff0c;社区生活更美好赋予全新的智慧效能&#xff0c;其中智慧公厕也成为了城市环卫设施的新宠。智慧公厕以物联网、互联网、大数据、云计算、5G通信、自动化控制等技术为核心&#xff0…

LLM (Large language model)的指标参数

1. 背景介绍 我们训练大模型的时候&#xff0c;或者我们用RAG的时候&#xff0c;不知道我们的算法&#xff0c;或者我们的提示&#xff0c;或者我们的本地知识库是否已经整理得符合要求了。又或我们需要一个指标去评估我们目前的所有围绕大模型&#xff0c;向量数据库或外挂知…

【可实战】被测系统业务架构、系统架构、技术架构、数据流、业务逻辑分析

一、为什么要学习 更深的理解业务逻辑&#xff08;公司是做什么的&#xff1f;它最重要的商务决策是什么&#xff1f;它里面的数据流是怎么做的&#xff1f;有哪些业务场景&#xff1f;考验你对这家公司、对所负责业务的熟悉程度。公司背后服务器用什么软件搭建的&#xff1f;…

高性能API云原生网关 APISIX安装与配置指南

Apache APISIX是Apache软件基金会下的顶级项目&#xff0c;由API7.ai开发并捐赠。它是一个高性能的云原生API网关&#xff0c;具有动态、实时等特点。 APISIX网关可作为所有业务的流量入口&#xff0c;为用户提供了丰富的功能&#xff0c;包括动态路由、动态上游、动态证书、A…

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…