前端开发中的状态管理与网络请求封装

本文将对比 Vuex 和 Pinia 在状态管理中的使用,并介绍如何封装 Axios 进行网络请求。此外,我们还将讨论动态路由、404 页面跳转以及面包屑导航的实现。

话不多说,正文开始~~~

一、状态管理:Vuex 与 Pinia 对比

1. Vuex

Vuex 是 Vue.js 官方推荐的状态管理库,适用于 Vue2 和 Vue3。它的核心概念包括:

  • State:存储应用的状态数据。
  • Getters:从 State 中派生出一些状态,类似于计算属性。
  • Mutations:同步修改 State 的方法。
  • Actions:异步操作,通常用于提交 Mutations。
  • Modules:将 Store 分割成模块,便于管理大型应用的状态。

2. Pinia

Pinia 是 Vue3 推荐的状态管理库,相较于 Vuex,它更加轻量且易于使用。Pinia 的核心特点包括:

  • 更简单的 API:Pinia 的 API 更加简洁,去除了 Vuex 中的 Mutations,直接使用 Actions 进行同步和异步操作。
  • 更好的 TypeScript 支持:Pinia 天生支持 TypeScript,提供了更好的类型推断和代码提示。
  • 模块化:Pinia 自动支持模块化,无需手动划分模块。

3. 使用 Pinia 实现跨组件状态管理

以下是一个简单的 Pinia 示例:

  1. 安装 Pinia

    npm install pinia
    
  2. 创建 Store
    src/stores 目录下创建 userStore.js

    import { defineStore } from 'pinia';export const useUserStore = defineStore('user', {state: () => ({userInfo: null,isLoggedIn: false,}),actions: {login(userInfo) {this.userInfo = userInfo;this.isLoggedIn = true;},logout() {this.userInfo = null;this.isLoggedIn = false;},},
    });
    
  3. 在组件中使用 Store

    <script setup>
    import { useUserStore } from '@/stores/userStore';const userStore = useUserStore();const handleLogin = () => {userStore.login({ name: 'John Doe' });
    };const handleLogout = () => {userStore.logout();
    };
    </script><template><div><p v-if="userStore.isLoggedIn">Welcome, {{ userStore.userInfo.name }}</p><button @click="handleLogin">Login</button><button @click="handleLogout">Logout</button></div>
    </template>
    

二、封装 Axios 进行网络请求

在实际项目中,我们通常会对 Axios 进行封装,以便统一处理请求和响应。以下是一个简单的 Axios 封装示例:

  1. 安装 Axios

    npm install axios
    
  2. 创建 Axios 实例
    src/utils 目录下创建 request.js

    import axios from 'axios';const instance = axios.create({baseURL: process.env.VITE_API_BASE_URL,timeout: 10000,
    });instance.interceptors.request.use((config) => {const token = localStorage.getItem('token');if (token) {config.headers.Authorization = `Bearer ${token}`;}return config;},(error) => {return Promise.reject(error);}
    );instance.interceptors.response.use((response) => {return response.data;},(error) => {return Promise.reject(error);}
    );export default instance;
    
  3. 在组件中使用封装后的 Axios

    import request from '@/utils/request';const fetchUserData = async () => {try {const response = await request.get('/api/user');console.log(response);} catch (error) {console.error(error);}
    };
    

三、登录鉴权与动态路由

在后台管理系统中,登录鉴权和动态路由是常见的需求。以下是实现这些功能的步骤:

1. 动态路由

  • 动态添加路由:根据用户的权限动态加载路由,使用 addRoute 方法动态添加路由。
  • 404 页面跳转:如果没有匹配的路由,跳转到 404 页面。

2. 面包屑导航

面包屑导航可以帮助用户了解当前页面的位置。可以通过路由的 meta 信息动态生成面包屑。

以下是一个简单的实现示例:

  1. 动态路由与 404 页面

    import { createRouter, createWebHistory } from 'vue-router';const routes = [{path: '/',component: () => import('@/views/Home.vue'),},{path: '/login',component: () => import('@/views/Login.vue'),},{path: '/:pathMatch(.*)*',component: () => import('@/views/NotFound.vue'),},
    ];const router = createRouter({history: createWebHistory(),routes,
    });router.beforeEach((to, from, next) => {const isLoggedIn = localStorage.getItem('token');if (to.path !== '/login' && !isLoggedIn) {next('/login');} else {next();}
    });export default router;
    ```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bb1e899be70845dc9c1a98246113d393.webp#pic_center)
  2. 面包屑导航

    <script setup>
    import { useRoute } from 'vue-router';const route = useRoute();
    const breadcrumbs = computed(() => {return route.matched.map((record) => ({text: record.meta.breadcrumb,path: record.path,}));
    });
    </script><template><div><nav><span v-for="(crumb, index) in breadcrumbs" :key="index"><router-link :to="crumb.path">{{ crumb.text }}</router-link><span v-if="index < breadcrumbs.length - 1"> / </span></span></nav></div>
    </template>
    

四、HTTP 与 HTTPS

  • 1. HTTP
    HTTP(HyperText Transfer Protocol)是用于传输超文本的应用层协议。它是明文传输的,容易被中间人攻击。

  • 2. HTTPS
    HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,通过 SSL/TLS 加密传输数据,防止数据被窃取或篡改。

3. 使用 HTTPS

  • 获取 SSL 证书:可以从证书颁发机构(CA)获取 SSL 证书,或者使用 Let’s Encrypt 免费获取。
  • 配置服务器:在服务器上配置 SSL 证书,启用 HTTPS。
  • 前端配置:确保前端请求的 API 地址使用 HTTPS。

五、总结

通过对比 Vuex 和 Pinia,我们可以看到 Pinia 在 Vue3 中更加简洁和高效。封装 Axios 可以帮助我们统一处理网络请求,提高代码的可维护性。

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

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

相关文章

Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比

一、Cloud Foundry 使用Scaling an Application Using App Autoscaler插件&#xff0c;基于资源使用情况触发简单扩缩容 CPU、内存、Http带宽、延时等 监控这些资源的使用情况决定扩缩容策略&#xff1a;实例是增加还是减少 Instance Limits 限制实例数量范围&#xff0c;定义…

ComfyUI 矩阵测试指南:用三种方法,速优项目效果

在ComfyUI中&#xff0c;矩阵测试也叫xyz图表测试&#xff0c;作用是通过控制变量的方式来对Lora模型以及各种参数开展测试&#xff0c;并进行有效区分。其中测试方法有很多种&#xff0c;可以通过借助插件也可以自行搭建工作流实现&#xff0c;下面介绍3种方式&#xff1a; 1…

什么宠物最好养?

在忙碌的生活中&#xff0c;想要拥有一份陪伴&#xff0c;却又担心没时间打理&#xff1f;别怕&#xff0c;今天就来给大家揭秘&#xff0c;什么宠物最好养&#xff0c;让你轻松开启养宠生活&#xff0c;即使再忙也能享受毛孩子带来的快乐&#xff01; 一、仓鼠&#xff1a;萌…

mfc操作json示例

首先下载cJSON,加入项目; 构建工程,如果出现, fatal error C1010: unexpected end of file while looking for precompiled head 在cJSON.c文件的头部加入#include "stdafx.h"; 看情况,可能是加到.h或者是.cpp文件的头部,它如果有包含头文件, #include &…

将IDLE里面python环境pyqt5配置的vscode

首先安装pyqt5全套&#xff1a;pip install pyqt5-tools 打开Vscode&#xff1a; 安装第三方扩展&#xff1a;PYQT Integration 成功配置designer.exe的路径【个人安装pyqt5的执行路径】&#xff0c;便可直接打开UI文件&#xff0c;进行编辑。 配置pyuic,如果下图填写方法使用…

郑州大学2022级大三期末复习总结(数据库,传感器,嵌入式,人工智能,移动终端开发,计算机英语)

本人是郑州大学2022级的一名大三学生&#xff0c;上学期期末苦于没有复习资料硬学了三周&#xff0c;所以想着将脑海里还残留着的各个课程的知识点&#xff0c;考点记录下来。这些资料不能保证你考高分&#xff0c;只能给你提供一些复习的方向和可能高频的知识点。 有些地方的…

基于ESP32+VUE+JAVA+Ngnix的一个小型固件编译系统

一、前提 开发ESP32固件时&#xff0c;使用本地环境输出固件时&#xff0c;存在多个开发多种开发平台的问题。会导致最终输出的固件不统一。更可能因为本地的开发环境差异导致固件无法追溯。 基于上述原因&#xff0c;开发了一个小型的固件编译系统。将该系统部署在一台ubutn…

Spring自定义BeanPostProcessor实现bean的代理Java动态代理知识

上文&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145241149 中大致了解了spring aop的代理的实现&#xff0c;其实就是有个BeanPostProcessor代理了bean对象。顺便复习下java代理相关知识 目录 自定义BeanPostProcessor实现aopJava动态代理知识动态代理的几…

KubeSphere部署安装,接入KubeKey安装的k8s集群

KubeSphere安装接入KubeKey安装的k8s集群 文章目录 KubeSphere安装接入KubeKey安装的k8s集群 一.NFS安装配置1.服务器安装NFS服务2.下载并部署 NFS Subdir External Provisioner1).下载部署文件2).创建 NameSpace3).创建 RBAC 资源4).配置 deployment.yaml5).部署 Storage Clas…

redis性能优化参考——筑梦之路

基准性能测试 redis响应延迟耗时多长判定为慢&#xff1f; 比如机器硬件配置比较差&#xff0c;响应延迟10毫秒&#xff0c;就认为是慢&#xff0c;机器硬件配置比较高&#xff0c;响应延迟0.5毫秒&#xff0c;就认为是慢。这个没有固定的标准&#xff0c;只有了解了你的 Red…

财务RPA就是财务机器人吗?有什么作用

近年来&#xff0c;财务RPA&#xff08;机器人流程自动化&#xff09;逐渐成为财务领域的热门话题。很多人初次听到“财务RPA”时&#xff0c;可能会疑惑&#xff1a;财务RPA是不是财务机器人&#xff1f;它到底能做什么&#xff1f;带着这些问题&#xff0c;我们一起来探讨财务…

RabbitMQ---事务及消息分发

&#xff08;一&#xff09;事务 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;所以RabbitMQ也支持事务机制&#xff0c;他的事务允许开发者确保消息的发送和接收时原子性的&#xff0c;要么全部成功&#xff0c;要么全部失败 我们设置事务有三步…

Django简介与虚拟环境安装Django

目录 1.Django简介 1.1 Django 的核心特点 1.2 Django 的核心组件 1.3 Django 的应用场景 1.4 总结 2.基础环境建立 2.1 创建虚拟环境 2.1.1 使用 virtualenv 创建虚拟环境 2.1.2 使用 venv 创建虚拟环境 2.2 激活虚拟环境 2.2.1 在 Windows 上 2.2.2 在 macOS 或 …

计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

vue+高德API搭建前端3D交通页面

1. 模板部分 (<template>) <template><div class"content"><div><div id"container"></div></div></div> </template> 功能&#xff1a;定义了组件的HTML结构。分析&#xff1a; div.content 是最…

第十三章:数据库技术

文章目录&#xff1a; 一&#xff1a;基础 1.概念 2.特点 3.常见数据库品牌 4.数据库应⽤系统 4.1 C/S 4.2 B/S 5.数据模型的分类 6.名词解析 7.关系运算 二&#xff1a;Access 1.基础 2.操作 2.1 建立表 2.2 维护表 2.3 创建查询 2.4 创建窗体 2.5 创建报表…

《汽车维护与修理》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维护与修理》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维护与修理》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国汽车维修行业协会 …

31、【OS】【Nuttx】OSTest分析(1):stdio测试(一)

背景 接上篇wiki 30、【OS】【Nuttx】构建脚本优化&#xff0c;引入待构建项目参数 最小系统分析完后&#xff0c;下一个能够更全面了解Nuttx的Demo&#xff0c;当然选择OSTest&#xff0c;里面有大量关于OS的测试用例&#xff0c;方便对Nuttx的整体功能有个把握。 stdio_tes…

Ubuntu 24.04 LTS 安装 Docker Desktop

Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版&#xff08;1h速通&#xff09; Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…

Elasticsearch 和arkime 安装

安装一定要注意版本号&#xff0c;不然使用不了 这里Ubuntu使用ubuntu-20.04.6-desktop-amd64.iso elasticsearch这里使用Elasticsearch 7.17.5 | Elastic arkime这里使用wget https://s3.amazonaws.com/files.molo.ch/builds/ubuntu-20.04/arkime_3.4.2-1_amd64.deb 大家想…