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

本文将对比 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.mzph.cn/news/893156.shtml

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

相关文章

【AI】【RAG】使用WebUI部署RAG:数据优化与设置技巧详解

RAG(Retrieval-Augmented Generation)是一种通过知识库构建的高效问答系统。然而,在使用WebUI部署和优化RAG时,数据源管理和参数设置直接决定了系统的回答质量。本文将结合具体问题和优化方法,为您详细解读如何最大化RAG的性能和准确性。 数据源相关问题及解决方案 在实际…

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化&#xff08;Lasso&#xff09;2.2 L2正则化&#xff08;Ridge&#xff09;2.3 弹性网络正则化&#xff08;Elas…

大数据面试——引入

引入 随着市场行情的变化&#xff0c;大数据领域也从当初我初入这个行业时的火爆&#xff0c;到如今趋于平静。从培训机构都开始不怎么搞大数据课程&#xff0c;就可见一斑。 但是大数据是真的不缺人了吗&#xff1f; 这倒也不是&#xff0c;只是对应的需求越来越高了。就以…

springboot学生成绩管理系统

Spring Boot学生成绩管理系统是一个基于Spring Boot框架开发的&#xff0c;旨在帮助教育机构、学校或教师高效管理学生成绩的系统。 一、系统背景与意义 在教育领域&#xff0c;学生成绩的管理是一项重要且繁琐的工作。传统的手工管理方式不仅效率低下&#xff0c;还容易出错…

Linux高级--3.3.1 C++ spdlog 开源异步日志方案

一、基本介绍 spdlog 是由 Gustav S. 在 2015 年开发的一个高性能 C 日志库。开发这个库的主要目的是为了提供一个非常快速、轻量、易于使用的日志工具&#xff0c;特别适合需要高性能、低延迟日志记录的 C 应用程序。&#xff08;由于源码现在比较难下载&#xff0c;我把压缩…

WPF 实现可视化操作数据库的程序全解析

在软件开发中&#xff0c;实现对数据库的可视化操作能极大提升开发效率和用户体验。借助 WPF&#xff08;Windows Presentation Foundation&#xff09;强大的界面开发能力&#xff0c;我们可以打造出功能丰富、交互友好的数据库操作程序。本文将详细介绍如何使用 WPF 搭建一个…

13软考高项,项目资源管理

团队章程&#xff1a;价值观&#xff0c;沟通指南&#xff0c;决策标准和过程&#xff0c;冲突处理过程&#xff0c;会议指南和团队共识&#xff01; 资源管理计划&#xff1a;识别资源&#xff0c;获取资源&#xff0c;角色&#xff0c;组织图&#xff0c;培训&#xff0c;团…

深入浅出:Go语言os包中的API使用指南

深入浅出:Go语言os包中的API使用指南 引言 Go语言以其简洁、高效和强大的生态系统著称,是现代编程中不可或缺的一部分。其中,os包作为Go标准库的一部分,提供了丰富的API来与操作系统进行交互。本文将深入探讨os包中的核心功能,并通过实际案例帮助读者更好地理解和应用这些…

Spring AI入门示例HelloWorld

本文重点介绍&#xff0c;基于Spring AI框架&#xff0c;并使用阿里百炼大模型服务平台的AI服务&#xff0c;快速搭建一个springboot工程&#xff0c;并进行简单的AI问答&#xff0c;初步验证Spring AI框架的易用性&#xff0c;以及与阿里巴巴AI框架spring-ai-alibaba-starter的…

git系列之revert回滚

1. Git 使用cherry-pick“摘樱桃” step 1&#xff1a; 本地切到远程分支&#xff0c;对齐要对齐的base分支&#xff0c;举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2&#xff1a; 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…

【C++】结构体(上)

1、结构体基本概念 结构体属于用户自定义当代数据类型&#xff0c;允许用户存储不同当代数据类型 2、结构体定义和使用 语法&#xff1a; struct 结构体名 { 结构体成员列表 }&#xff1b; 通过结构体创建变量的方式有三种&#xff1a; &#xff08;1&#xff09;struc…

Redis 缓存穿透、击穿、雪崩 的区别与解决方案

前言 Redis 是一个高性能的键值数据库&#xff0c;广泛应用于缓存、会话存储、实时数据分析等场景。然而&#xff0c;在高并发的环境下&#xff0c;Redis 缓存可能会遇到 缓存击穿、缓存穿透 和 缓存雪崩 这三大问题。这些问题不仅影响系统的稳定性和性能&#xff0c;还经常出…

技术晋升读书笔记—华为研发

读完《华为研发》第三版&#xff0c;我深感震撼&#xff0c;书中的内容不仅详实地记录了华为公司的成长历程&#xff0c;还揭示了华为成功背后的管理理念和创新思路。这本书通过真实的案例和数据&#xff0c;展示了华为如何从一个小企业发展成全球通信行业的领导者。 一、关键人…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐&#xff0c;但如何将其转换为易于分享和打印的 PDF 格式&#xff0c;是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法&#xff0c;并探讨…

Python在DevOps中的应用:自动化CI/CD管道的实现

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 在现代软件开发中&#xff0c;DevOps理念的引入极大地提升了开发与运维的协作效率&#xff0c;而持续集成&#xff08…

[Mac + Icarus Verilog + gtkwave] Mac运行Verilog及查看波形图

目录 1. MAC安装环境 1. 1 Icarus Verilog 编译 1. 2 gtkwave 查看波形 2. 安装遇到的问题 2. 1 macOS cannot verify that this app is free from malware 2. 2 gtkwave-bin is not compatible with macOS 14 or later 3. 运行示例 3. 1 源代码 3. 2 编译Verilog 3. 3 生成.v…

FRP内网穿透0.61.1新版教程

在上一篇zerotier讲述了如何实现虚拟局域网搭建&#xff0c;这篇会讲述FRP内网穿透的使用教程 那么frp与zerotier的区别是什么呢&#xff1f;&#xff08;说人话&#xff09; FRP 主要用于内网服务向外网的单向暴露。 ZeroTier 用于构建一个虚拟的私有网络&#xff0c;实现多点…

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…

通过图形界面展现基于本地知识库构建RAG应用

1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本&#xff0c;决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案&#xff1a; 百炼本地知识库方案 解决方案&#xff1a; FastAPI Gradio Llamaindex qwen-plus 主要三大…

TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!

目录 TP4056工作原理 TP4056引脚详解 TP4056驱动电路图 锂电池充放电板子绘制 编写不易&#xff0c;仅供学习&#xff0c;感谢理解。 TP4056工作原理 TP4056是专门为单节锂电池或锂聚合物电池设计的线性充电器&#xff0c;充电电流可以用外部电阻设定&#xff0c;最大充电…