尚品汇项目复盘(三)

简介: 尚品汇项目复盘(三)

接上文

以下是除了对目录内容进行分析以外 学到的新的知识点

(十)解决连续点击使用push/replace会报错

路由跳转有两种形式:声明式导航、编程式导航

–声明式导航没有这类问题的,因为vue-router底层已经处理好了

当使用编程式导航 例如

this.$router.push({name:"Search",query:{keyword:this.keyword}})

多次点击就会出现以下警告

原因:push是一个promise,promise需要传递成功和失败两个参数,我们的push中没有传递。

方法:this.$router.push({name:‘Search’,params:{keyword:“…”||undefined}},()=>{},()=>{})后面两项分别代表执行成功和失败的回调函数

但是这样写 也就只有这一个push/replace可以多次点击 治标不治本

解决方法 :重写push/replace方法

import Vue from'vue'
import VueRouter from'vue-router'
 
import routes from './routes'

// 每当点击两次搜索按钮的时候 就会报错
// 原因是因为push||replace方法
// 此时需要自己手写一个push||replace方法
let oringPush = VueRouter.prototype.push;
let oringReplace = VueRouter.prototype.replace;
// 此时重写push||replace
// 第一个参数是告诉push方法 你往哪里跳转
VueRouter.prototype.push = function(location,resolve,reject) {
  // 当resolve 和 reject 存在的时候 即第一次点击的时候
  if(resolve && reject){
    oringPush.call(this, location, resolve, reject)
  }else {
    oringPush.call(this, location, ()=>{},()=>{})
  }
}

VueRouter.prototype.replace = function(location,resolve,reject) {
  // 当resolve 和 reject 存在的时候 即第一次点击的时候
  if(resolve && reject){
    oringReplace.call(this, location, resolve, reject)
  }else {
    oringReplace.call(this, location, ()=>{},()=>{})
  }
}
//此时 push||replace方法遇到连续点击两次就不会报错了

在Router文件夹中的index.js 添加这段代码 即可彻底根治这个问题

(十一)二次封装axios

11.1 为什么要二次封装axios?

二次封装axios主要是为了用到请求拦截器和响应拦截器


拦截请求:可以在请求之前处理一些业务(比如为每个请求带上相应的参数,时间戳等)


拦截响应:可以在服务器返回数据之后处理一些事情(比如对返回的状态进行判断,token是否过期等)


通常我们的项目会越做越大,页面也会越来越多,随之而来的是接口数量的增加。api统一管理,不管接口有多少,所有的接口都可以非常清晰,容易维护。

11.2 如果二次封装axios?

// 对axios二次封装
import axios from 'axios'

const requests = axios.create({
  // 配置对象
  // 基础路径,发送请求的时候,路径当中会出现api
  baseURL:'/api',
  timeout:5000
})

11.3 如何配置请求拦截器和响应拦截器

根据上述的二次封装的axios添加请求拦截器和响应拦截器

// 添加请求拦截器
requests.interceptors.request.use((config)=>{
  // 在发送请求之前做些什么
 
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
requests.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么

  return response.data;
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error);
});

1、每个请求都带上的参数,比如token,时间戳等。

2、对返回的状态进行判断,比如token是否过期,统一判断返回码等。


(十二)nprogress进度条插件

  1. 打开一个页面时,往往会伴随一些请求,并且会在页面上方出现进度条。它的原理时,在我们发起请求的时候开启进度条,在请求成功后关闭进度条,所以只需要在request.js中进行配置。
  2. 安装nprogress
yarn add nprogress


  1. 如何使用
    在对axios进行二次封装的时候
import nprogress from 'nprogress'
// 引入进度条样式
import "nprogress/nprogress.css"

在请求和响应拦截器中添加

// 添加请求拦截器
requests.interceptors.request.use((config)=>{
  // 在发送请求之前做些什么
  //引入进度条
  nprogress.start()
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
requests.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  // 进度条结束
  nprogress.done()
  return response.data;
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error);
});

(十三) loadsh插件防抖和节流

13.1 安装loadsh

yarn add loadsh

防抖:用户操作很频繁,但是只执行一次,减少业务负担。

节流:用户操作很频繁,但是把频繁的操作变为少量的操作,使浏览器有充分时间解析代码

13.2使用方法

import throttle from "lodash/throttle";
//防抖
getList:debounce(function() {
  this.getUserList()
},2000),

/节流
getList:throttle(function() {
  this.getUserList()
},2000),

其中getList 是你要加防抖/节流的函数名字 2000是每多少秒触发一次


目录
相关文章
|
JavaScript 前端开发 编译器
Nodejs 第二十三章(Markdown 转 html)
Nodejs 第二十三章(Markdown 转 html)
720 0
|
3月前
|
存储 安全 Ubuntu
一个人=一支团队!OpenClaw 多Agent 架构阿里云/本地搭建+大模型API配置+安全协作及常见问题解答
2026年,OpenClaw的多Agent架构成为提升效率的核心玩法——单个Agent包揽所有任务的模式,早已因“记忆负担重、Token消耗高、响应不精准”被淘汰。通过创建分工明确的Agent团队,让每个角色专注特定领域(如开发、测试、文档、运营),实现“独立工作空间+专属模型+精准路由”的协同模式,既能降低Token开销,又能提升任务处理质量,这正是OpenClaw高阶用户的核心秘诀。
1542 4
|
存储 SQL JSON
信创迁移适配实战-MySQL到达梦数据库DM8的数据迁移
信创迁移适配实战-MySQL到达梦数据库DM8的数据迁移
7928 0
信创迁移适配实战-MySQL到达梦数据库DM8的数据迁移
|
JSON 人工智能 前端开发
用markdown语法制作一个好看的网址导航页面(markdown-web-nav)
这是一篇关于创建网址导航页面的工具分享文章。作者介绍了从手动编写HTML代码到开发可视化工具 *markdown-web-nav* 的历程,旨在简化网址管理与导航页面生成的过程。该工具支持新增、编辑和删除网址数据,通过导入/导出JSON文件、实时预览Markdown效果以及一键复制等功能,让用户轻松制作美观的网站导航页面。文章还提供了详细的操作步骤及常见问题解答,如还原数据、获取网站图标链接等,适合不同技术水平的用户使用。
770 28
|
编解码 小程序
微信小程序11177版本开启控制台方法
微信小程序11177版本开启控制台方法
|
数据采集 JavaScript 搜索推荐
我们一起聊聊如何对Vue项目进行搜索引擎优化
【9月更文挑战第4天】Vue 项目的搜索引擎优化(SEO)较为复杂,因其内容默认由 JavaScript 渲染,部分搜索引擎难以索引。为提升 SEO 效果,可采用服务器端渲染(SSR)或预渲染,使用 Nuxt.js 或 Vue Server Renderer 实现 SSR,或利用 Prerender SPA Plugin 预渲染静态 HTML。此外,动态管理 Meta 标签、优化静态内容与 Sitemap、懒加载、图片优化、提升页面速度、设置正确的路由模式、使用结构化数据及构建良好外链均有益于 SEO。
745 11
|
JSON JavaScript 前端开发
震惊!JS如何悄无声息追踪你的每一步?揭秘页面访问与关闭的超级上报大法,让数据说话,优化体验不再难!
【8月更文挑战第4天】在Web开发中,跟踪用户行为对提升体验与留存至关重要。本文以在线学习平台为例,介绍如何用JavaScript监听页面访问及关闭,并上报数据。通过`window.onload`监测页面加载,记录用户访问;利用`navigator.sendBeacon`在用户离开时发送少量数据至服务器,无需担心请求失败。需注意隐私合规、性能影响及浏览器兼容性。此技术有助于深入理解用户行为,为产品迭代提供依据。
607 8
|
IDE Go 开发工具
8-13|Cannot run program "C:\Users\Administrator\AppData\Local\Temp\GoLand\___8go_build__go.exe" (in
8-13|Cannot run program "C:\Users\Administrator\AppData\Local\Temp\GoLand\___8go_build__go.exe" (in
|
自然语言处理 开发者 Python
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的 HTML 内容。Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强。
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的 HTML 内容。Markdown 的语法简洁明了、学习容易,而且功能比纯文本更强。
|
JSON JavaScript 前端开发
TypeScript(十六)配置相关(tsconfig配置)
TypeScript(十六)配置相关(tsconfig配置)
949 1