TypeScript-axios模块进行封装的操作与一些想法

   2023-02-09 学习力0
核心提示:所谓封装与模块化,对我这种初学者来说,个人理解就是解耦,比如说,当我们前端一个项目使用了现在流行的模块,但是没有对其进行封装处理,包括一些相同的代码逻辑,把他们分散在各个组件当中,这样一来整个项目对于这个模块的耦合度太高.如果将来这个模块突然停止维

所谓封装与模块化,对我这种初学者来说,个人理解就是解耦,比如说,当我们前端一个项目使用了现在流行的模块,但是没有对其进行封装处理,包括一些相同的代码逻辑,把他们分散在各个组件当中,这样一来整个项目对于这个模块的耦合度太高.如果将来这个模块突然停止维护,或者有更好的模块将其替代,我们想要更换模块时就显得异常困难.

通过对axios封装的学习.我想把它记录在博客中,也算是学习过后加深理解

虽然代码只针对于axios,但是其中的思想却是最重要的,看得懂代码只是第一步,了解其背后的意图才是主要目的.

我的项目是基于vue3和TypeScript的,因此逻辑部分将使用ts实现.当然,这只是为了演示而进行的简单的封装

 

--------------------------下面是具体的操作步骤-------------------------------

 

---------------------第一步,编写核心的代码逻辑-------------------------------

首先我们在项目中新建一个request.ts的文件,用来导入axios,编写核心的逻辑(请求方法,返回内容的操作等)

 

import type { AxiosInstance, AxiosRequestConfig } from 'axios'
import axios from 'axios'

class KXRequest {
  instance: AxiosInstance

  constructor(config: AxiosRequestConfig) {
    this.instance = axios.create(config)
  }

  kxRequest(config: AxiosRequestConfig): void {
    this.instance.request(config).then((res) => {
      console.log(res)
    })
  }
}

export default KXRequest

使用class来使整个代码的封装性更强,

查看源码,发现axios.create(config)中的create方法需要传入一个类型为AxiosRequestConfig的参数,所以config的类型为AxiosRequestConfig

axios.create(config)执行后创建出来一个实例,这个实例的类型是AxiosInstance,为方便对返回值进行操作,新建一个instance变量,来储存axios.create(config)返回的结果,

所以instance的类型时AxiosStance类型的,

使用构造器的目的也是为了新建对象时对其中的instance进行初始化,并且要求使用这个类新建对象时传入的是AxiosRequestConfig类型的参数

然后使用instance进行下面的request操作

 

下面来分析request这个方法

 kxRequest(config: AxiosRequestConfig): void {
    this.instance.request(config).then((res) => {
      console.log(res)
    })
  }

这里的request是我们自定义了一个名为request的方法,(嗯,区分一下instance的request),这里就先考虑他没有返回值

instance因为是AxiosStance类型,该类型有request方法,该方法会返回一个promise对象(这都是源码中的内容,使用WebStorm可以按住CTRL键查看)

下面贴一段源码

request<T = any, R = AxiosResponse<T>> (config: AxiosRequestConfig): Promise<R>;

而instan的request方法又需要传入一个AxiosRequestConfig的config作为参数,所以我们在编写kxRequest方法时需要将config也传进来,然后进行相对应的操作即可,

第一步讲解完成,当然,再次申明,这只是简单的实现,重要的是思想

 

---------------------第二步,为封装的方法设立一个统一的出口-------------------------------


import KXRequest from './request'
import { BASE_URL, TIME_OUT } from './request/config'

const kxRequest = new KXRequest({
  baseURL: BASE_URL,
  timeout: TIME_OUT,
  headers: [],
})

export default kxRequest

这里new的KXRequest中的参数就是其实就是config,这段代码相当于是对第一段代码的代理,进行初始化操作

---------------------最后一步,在项目中使用-------------------------------


先来代码,
import { createApp } from 'vue'
import App from './App.vue'
import kxRequest from './service/index'

const app = createApp(App)
app.mount('#app')

kxRequest.kxRequest({
  url: '/home/multidata',
  method: 'GET',
})

我删除了不相关的代码.

首先导入将第二步导出的kxRequest在main.ts中导入

接着调用kxRequest的request方法即可.此时调用的kxRequest方法实际是第一步中的kxRequest,因为导入的第二步的代码实际是创建了第一步的实例

 

这样便完成了一个简单的封装,当然我会在未来的时间继续在下方更新更多操作

 
标签: JavaScript vue3
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • oogle的“ JavaScript杀手” Dart 与JavaScript的比较
    oogle的“ JavaScript杀手” Dart 与JavaScript
    JavaScript通常被称为浏览器脚本语言,但它也已扩展到许多服务器端和移动应用程序开发环境。JS已经存在了将近20年,可以肯定地说它确实是一种成熟且稳定的编程语言。在Facebook发布React和React Native框架之后,JS变得越来越流行。JavaScript具有自己的软件
    03-08
  • Delphi XE6 通过JavaScript API调用百度地图
    Delphi XE6 通过JavaScript API调用百度地图
    参考昨天的内容,有朋友还是问如何调用百度地图,也是,谁让咱都在国内呢,没办法,你懂的。 首先去申请个Key,然后看一下百度JavaScript的第一个例子:http://developer.baidu.com/map/jsdemo.htm下一步,就是把例子中的代码,移动TWebBrower中。 unit Unit
    02-09
  • JavaScript面向对象轻松入门之抽象(demo by ES5
    抽象的概念  狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象。  这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这样一个对象:属性可以归纳出“毛色”、
    02-09
  • TypeScript:微软的 JavaScript 替代
    每个人心目中似乎都有一个JavaScript替代,Google甚至有两个。现在,微软也透露了它的JavaScript替代。 C#之父Anders Hejlsberg等人正在创造新语言TypeScript,微软已经在 Apache 2.0许可证下在自家的开源托管网站上发布了一个预览版本,公布了语言规格。 Typ
    02-09
  • JavaScript、TypeScript、ES6三者之间的联系和
    ES6是什么ECMAScript 6.0(以下简称ES6)是JavaScript语言(现在是遵循ES5标准)的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。ES6的新特性ES6中的let命令,声明变量,用法
    02-09
  • JavaScript和TypeScript中的void的具体使用
    如果你来自传统的强类型语言,可能会很熟悉 void 的概念:一种类型,告诉你函数和方法在调用时不返回任何内容。void 作为运算符存在于 JavaScript 中,而作为基本类型存在于 TypeScript 中。在这两个世界中,void 的工作机制与大多数人习惯的有点不同。JavaSc
    02-09
  • [译] TypeScript入门指南(JavaScript的超集)
    [译] TypeScript入门指南(JavaScript的超集)
    你是否听过 TypeScript?TypeScript 是 JavaScript 的超集,TypeScript结合了类型检查和静态分析,显式接口。TypeScript是微软的开源项目,它是由C#之父Anders Hejlsberg发起的。 为什么会有 TypeScript?JavaScript 只是一个脚本语言,并非真正设计用于开发
    02-09
  • 从 JavaScript 到 TypeScript
    从 JavaScript 到 TypeScriptTypeScript 并不是一个完全新的语言, 它是 JavaScript 的超集,为 JavaScript 的生态增加了类型机制,并最终将代码编译为纯粹的 JavaScript 代码。TypeScript 简介TypeScript 由 Microsoft(算上 Angular 2 的话加上 Google)开发和
    02-09
  • 简单理解JavaScript,TypeScript和JSX
    JavaScript:基本概念:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于浏览器客户端的脚本语言。组成部分ECMAScript,描述了该语言的语法和基本对象。文
    02-09
  • JavaScript面向对象轻松入门之封装(demo by ES5
      本章默认大家已经看过作者的前一篇文章 《JavaScript面向对象轻松入门之抽象》为什么要封装?  封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对象只能通过特定的接口访问,这也是面向接口编程思想的一部分。  封装是面向
    02-09
点击排行