前端实用笔记:ajax进度, 封装弹窗组件,自定义ref,极致防抖,解构和具名导入

86 阅读1分钟

1.ajax进度控制上传和下载:

`export default request(option={}){

const {url,method = "GET",onProgress,data = null} = options;

return new Promise((resolve)=>{

const xhr = new XMLHttpRequest();

xhr.addEventListener('readystatechange',()=>{
  if(xhr.readyState === xhr.DONE){
    resolve(xhr.responseText)
  }
})
xhr.addEventListener('progress',(e)=>{
  onProgress&&
  onProgress({
    loaded:e.loaded,//当前加载数据
    total:e.total,//全部数据
  })
})
 xhr.upload.addEventListener('progress',(e)=>{
  onProgress&&
  onProgress({
    loaded:e.loaded,//当前加载数据
    total:e.total,//全部数据
  })
})
xhr.open(method,url);
xhr.send(data)

}) }`

使用fetch比较好:

2.封装弹窗组件:

3.自定义ref,极致防抖:

使用customRef设置set延时:

4.解构和具名导入: const {b} = objb,

import {a} from './a.js' 后者可能会导致数据异常,会自动调用。

快速检测代码质量:

eslint:

"rules":{ "complexity":["eror",10] }

表示代码复杂度最大为10,圈复杂度。

6.js的数据类型: 原始:number,string,bolean,symbol,bigint,undefine,null 对象:obj

7。原型: js'语言实现面向对象,实现手段,通过原型就可以知晓某个对象丛属什么类型。避免丢失。 原型是函数的,叫做prototype。对象可以通过_proto_属性获取prototype对象,从而知道原型。这个过程叫做原型链。

8.promise;

主要是为了提出一个异步的解决方案,实现不同场景的异步。链式调用使得回调可监控。

9.vue的响应式: 为了实现数据和函数的联动,数据变化后,联动函数自动运行。数据和组件render函数关联,实现数据变化自动渲染更新。还有computed,watch等等。

10.判断传入函数是否是async:

`function isAsyncFunction(func){

return func[Symbol.toStringTag] === 'Asyncfunction';

}`