尚品汇项目复盘(三)

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

接上文

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

(十)解决连续点击使用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是每多少秒触发一次


目录
相关文章
|
1月前
|
JSON JavaScript 前端开发
尚品汇项目复盘(四)
尚品汇项目复盘(四)
23 2
|
1月前
|
资源调度 API
尚品汇项目复盘(二)
尚品汇项目复盘(二)
24 0
|
1月前
|
资源调度 JavaScript 程序员
尚品汇项目复盘(一)
尚品汇项目复盘(一)
33 0
|
4月前
|
测试技术 程序员 项目管理
甲方怒喷半小时:一次项目上线失败的深刻教训
小米分享了一次项目上线失败的经历,起因是运营提出一个看似简单的白名单功能。问题包括:没有需求原型导致理解偏差,新成员对项目不熟悉,测试流程不全面,以及人员变动大。解决方案涉及需求确认会、原型图设计、交接制度、团队培训和全流程测试等。这次失败提供了关于需求分析、项目管理及团队协作的教训。
50 2
|
算法 搜索推荐 安全
来自一线技术人的经验分享|如何写出让人眼前一亮的述职报告
本文作者从亲身经验阐述了一线技术人为什么述职、怎么述职以及述职的重要性。每年述职都是一大关,作者把自己的一些经验教训通过文字分享给大家,希望能帮助到更多的人。
37069 14
来自一线技术人的经验分享|如何写出让人眼前一亮的述职报告
|
4月前
|
新能源 图形学
两千字——零基础开始打化工设计大赛——附搜集到的小白资料站、一次项目复盘
两千字——零基础开始打化工设计大赛——附搜集到的小白资料站、一次项目复盘
73 0
|
4月前
|
存储 人工智能
近期复盘 | 想多了都是问题,想开了都是答案
近期复盘 | 想多了都是问题,想开了都是答案
|
消息中间件 NoSQL Java
四面蚂蚁金服,定级阿里P7,这份面试经验心得分享给你
在金九银十即将到来之际,大部分人也都准备好了这在两个月里谋得一份自己心仪的工作,奈何今年的2023有些特殊,肺炎肆虐,对我们的工作和生活都造成了极大的影响。那么,是不是这样,我们就不工作,不学习了呢?实际上,正是因为现在正值传染病毒传播期间,所以我们宅在家里好好学习是再好不过的。对于Java程序员来说,利用这两三个月的时间,好好学习,着手准备起来,等到疫情好转,开始面试时,也不至于胆怯。 本人也是准备了大半年,最终如愿以偿拿到阿里offer!
1322 0
|
数据采集 存储 运维
桂老师谈数据:做好五大准备,主数据项目顺利启航
我经常发现主数据项目实施过程中出现的一些问题,这些问题在一定程度上成为主数据是否成功实施,或者实施效果好坏的严重障碍
桂老师谈数据:做好五大准备,主数据项目顺利启航
|
数据安全/隐私保护
日报周报是“毒瘤”还是“良药”?
为什么有的企业在渐渐取消日报周报等汇报性工作,例如:阿里巴巴在去年就开始把取消周报纳入计划中;而有的企业则是热衷于汇报的“怀抱”中,用日报周报“鞭策”企业的前进。日报周报到底是企业发展的“毒瘤”还是“良药”?下面我们一起来探讨一下。
日报周报是“毒瘤”还是“良药”?