Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 4(axios)

这篇具有很好参考价值的文章主要介绍了Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 4(axios)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Axios

  axios 是一个基于 Promise 的 HTTP 客户端,不仅可以与 vue.js 一起使用,还可以与其他前端框架以及后端 Node.js 一起使用。当你想从包括后端服务器在内的外部服务获取数据时,可以使用axios 中的方法很方便的获得数据内容。在本文档中,我们将介绍如何在 vue.js 版本 3 的环境中使用 axios。对于 Vue 3,它不仅解释了如何将它与 Options API 一起使用,还解释了如何将它与 Composition API 一起使用。
官方文件地址https://axios-http.com/docs/intro

第一章 Vue3项目创建 1 Vue CLI 创建vue项目
第一章 Vue3项目创建 2 使用 Webpack 5 搭建 vue项目
第一章 Vue3项目创建 3 Vite 创建 vue项目
第二章 Vue3 基础语法指令
第三章 Vue Router路由器的使用
第四章 VUE常用 UI 库 1 ( element-plus,Ant ,naiveui,ArcoDesign)
第四章 VUE常用 UI 库 2 ( ailwind 后台框架)
第五章 Vue 组件应用 1( Props )
第五章 Vue 组件应用 2 ( Emit )
第五章 Vue 组件应用 3( Slots )
第五章 Vue 组件应用 4 ( provide 和 inject )
第五章 Vue 组件应用 5 (Vue 插件)
第六章 Pinia,Vuex与axios,VueUse 1(Pinia)
第六章 Pinia,Vuex与axios,VueUse 2(Vuex)
第六章 Pinia,Vuex与axios,VueUse 3(VueUse)
第六章 Pinia,Vuex与axios,VueUse 4(axios)
第七章 TypeScript 上
第七章 TypeScript 中
第七章 TypeScript 下 创建Trello 任务管理器
第八章 ESLint 与 测试 ( ESLint )
第八章 ESLint 与 测试 ( Jest )
第八章 ESLint 与 测试 (TypeScript 中Jest与检测环境集成)

1 axios 设置

  我们的目标是学习如何将 axios 与 vue.js 一起使用,使用 cdn模式是最快和最简单的方法。在原生的HTML中使用axios 的方法获得数据。在浏览器访问它并显示一个远程访问获得数据列表内容。如果你不知道 axios 是什么,不用担心,我们会慢慢解释的。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>学习在vue中使用axios</title>
</head>
<body>
    <div id="app">
        <h1>{{ message }}</h1>
    </div>
    <script src="https://unpkg.com/vue@3"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
    Vue.createApp({
        el: '#app',
        data(){
            return {
                message: 'Hello Axios',
            }
        },
        mounted(){
            axios.get('https://jsonplaceholder.typicode.com/users')
                .then(response => console.log(response))
                .catch(error => console.log(error))
        }
}).mount('#app')
    </script>
</body>
</html>

在 node项目中导入axios组件。

$ npm install axios

在vue3 中使用axios获得数据的例子。

<script setup>
import { onMounted } from 'vue';
import axios from 'axios'
onMounted(() => {
      axios
        .get('https://jsonplaceholder.typicode.com/users')
        .then((response) => console.log(response))
        .catch((error) => console.log(error));
});
</script>
<template>
<div >
  <div>业务内容一览</div>
</template>

2 axios方法

  axios处理方法分为同步处理与异步处理两种,axios默认的是异步处理方法。获得的数据结果在下面几个方法中进行处理。

axios.get('/user?ID=12345')
  .then(function (response) {
 // 描述axios处理成功后要处理什么
    console.log(response);
  })
  .catch(function (error) {
 // 描述axios处理出错时要做什么
    console.log(error);
  })
  .finally(function () {
 // 无论axios的处理结果如何,都会执行
  });

在 Vue 实例中使用 axios 中get,post ,delete,put方法创建数据远程连接。

axios.get(url[, config])
axios.post(url[, data[, config]])
axios.delete(url[, config])
axios.head(url[, config])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])

  返回json对象在 response.data 的属性中获得数据内容, response 包含的其他内容不仅是数据,还有status、headers、statusText、config。如果只关注状态,可以看到如果使用 GET 方法处理成功则返回状态码 200,使用 POST 方法返回状态码 201。

axios.get('https://jsonplaceholder.typicode.com/users')
      .then(response => {
        console.log(response.data)//数据内容
        console.log(response.status)
        console.log(response.headers)
        console.log(response.statusText)
        console.log(response.config)
      })
      .catch(error => console.log(error))
}

1 axios 异步方法

通过异步方法获得数据列表,在将列表中的数据内容显示到模板v-for指令中。

<script setup>
import {ref,onMounted  } from 'vue';
import axios from 'axios'
const userlist=ref([]);
onMounted(() => {
      axios
        .get('https://jsonplaceholder.typicode.com/users')
        .then((response) => userlist.value=response.data)
        .catch((error) => console.log(error));
    });
</script>
<template>
<div class="m-4 p-4" style="height:97vh;overflow-y:auto">
  <div>业务内容一览</div>
  <div v-for="list in userlist ">
    id:{{list.id}} name:{{list.name}}
  </div>
 </div>
</template>

2 axios 同步方法

  Composition API 中使用了 async 和 await 设置的函数为同步函数。很多业务都需要axios 同步方法来处理,我们将axios处理函数设置关键字async 和 await,这个函数就是同步函数。

同步处理关键字 async , await

<script setup>
import {ref,onMounted  } from 'vue';
import axios from 'axios'
const userlist=ref([]);
    // 使用 async 和 await 函数定义同步关键字
    onMounted(async () => {
      try {
        const response = await axios.get(
          'https://jsonplaceholder.typicode.com/users'
        );
        userlist.value=response.data
      } catch (error) {
        console.log(error);
      }
    });   
</script>
<template>
<div class="m-4 p-4" style="height:97vh;overflow-y:auto">
  <div>业务内容一览</div>
      <div v-for="list in userlist ">
        id:{{list.id}} name:{{list.name}}
      </div>
  </div>
</template>

  普通方法设置成同步方法。

<script setup>
import {ref,onMounted  } from 'vue';
import axios from 'axios'
const userlist=ref([]);
    onMounted( () => {
      init();
    });   
    //定义同步方法
    const init =async () => {
      try {
        const response = await axios.get(
          'https://jsonplaceholder.typicode.com/users'
        );
        userlist.value=response.data
      } catch (error) {
        console.log(error);
      }
    }
</script>
<template>
<div class="m-4 p-4" style="height:97vh;overflow-y:auto">
  <div>业务内容一览</div>
      <div v-for="list in userlist ">
        id:{{list.id}} name:{{list.name}}
      </div>
  </div>
</template>

Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 4(axios),vue,javascript,vue,前端框架

3 创建实例与配置拦截器

​  您可以使用 create 方法创建一个 axios 实例。可以在 create 方法的参数中设置 baseURL,headers表头信息等其他url请求设置。axios 实例

<script setup>
import {ref,onMounted} from 'vue';
import axios from 'axios'
const userlist=ref([]);
    onMounted( () => {
      init();
    });  
const headers = {
   Authorization: `Bearer`
}     
    const init =async () => {
      const instance = axios.create({
        baseURL:'https://jsonplaceholder.typicode.com/users',
        headers: headers
      });
        const response = await instance.get();
        userlist.value=response.data
    }
</script>
<template>
<div class="m-4 p-4" style="height:97vh;overflow-y:auto">
  <div>业务内容一览</div>
  <div v-for="list in userlist ">
    id:{{list.id}} name:{{list.name}}
  </div>
  </div>
</template>

配置拦截器

  拦截器可以在 axios 发送请求之前或从服务器返回响应时对 Request 和 Response 对象进行业务处理的监听方法。

axios.defaults.baseURL = 'https://jsonplaceholder.typicode.com';
axios.interceptors.request.use((config) => {
  console.log(config)
  return config;
});
//在拦截器中设置 baseURL
axios.interceptors.request.use((config) => {
 config.baseURL = 'https://test.com';
  console.log(config)
  return config;
});

在浏览器中可以看到 baseURL 已被覆盖。显示错误消息,因为无法访问 https://test.com这个url地址。

axios.interceptors.response.use((response) => {
  console.log(response);
  return response;
});

  Response 可用于在认证失败并返回状态码401(Unauthorized)时候,作认证失败时的注销处理。通过检查每个响应的状态码,可以根据每个代码进行不同的业务处理。

axios.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response.status === 401) {
      //logout 注销处理
    }
    return Promise.reject(error);
  }
);

4 axios 插件plugins

  创建一个 axios.js 文件,在文件中定义一个axios插件plugins功能。插件中允许我们设置一个共通的 baseURL方法路径,项目中使用axios方法可以直接引用到这个公共url路径。

axios.js

import axios from 'axios';
const axiosPlugin = {
  install(app, options) {
    const axiosInstance = axios.create({
      baseURL: options.baseURL,
    });
    app.provide('axios', axiosInstance);
  },
};
export default axiosPlugin;

main.js

项目中vue组件引入axiosPlugin插件功能,插件中引入一个共通的baseURL: 'https://jsonplaceholder.typicode.com/'访问路径。

import { createApp } from 'vue'
import router from './router'
import App from './App.vue'
import axiosPlugin from './axios';
const app = createApp(App)
app.use(router)
app.use(axiosPlugin, {
    //所有axios访问路径头
    baseURL: 'https://jsonplaceholder.typicode.com/'
 });
app.mount('#app')

axios使用

  在vue组件中获得inject 过滤方法,设置每个axios对象访问url的时候都要通过inject方法过滤访问的url地址。所有的地址baseURL+ 后台系统的业务路径文章来源地址https://www.toymoban.com/news/detail-729662.html

<script setup>
import {ref,onMounted  } from 'vue';
import { inject } from 'vue';
const axios = inject('axios');
const userlist=ref([]);
onMounted( () => {
  init();
}); 
const init=async ()=>{
   //访问地址是 'https://jsonplaceholder.typicode.com/'+ '/users'
  const response = await axios.get('/users');
  console.log(response.data);
  userlist.value=response.data;

}
</script>
<template>
<div class="m-4 p-4" style="height:97vh;overflow-y:auto">
  <div>业务内容一览</div>
  <div v-for="list in userlist ">
    id:{{list.id}} name:{{list.name}}
  </div>
 </div>
</template>

到了这里,关于Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 4(axios)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue 网络处理 - axios 异步请求的使用,请求响应拦截器(最佳实践)

    目录 一、axiox 1.1、axios 简介 1.2、axios 基本使用 1.2.1、下载核心 js 文件. 1.2.2、发送 GET 异步请求 1.2.3、发送 POST 异步请求 1.2.4、发送 GET、POST 请求最佳实践 1.3、请求响应拦截器 1.3.1、拦截器解释 1.3.2、请求拦截器的使用 1.3.3、响应拦截器的使用 1.3.4、拦截器在 Vue 脚手架中的

    2024年02月04日
    浏览(46)
  • 搭建vue3,TypeScript,pinia,scss,element-plus,axios,echarts,vue-router,babylon,eslint,babel,拖拽,rem自适应大屏

    1.1、使用vite初始化项目 1.1.1、创建项目文件夹 1.1.2、进入项目文件夹 1.1.3、初始化项目 1.1.4、输入项目名称 1.1.5、选择vue 1.1.6、选择TypeScript 1.1.7、查看当前源(非必要) 1.1.8、更换为国内镜像(非必要) 1.1.9、进入项目 1.1.10、安装依赖 1.1.11、运行项目 1.1.12、修改部分报错信息

    2024年04月23日
    浏览(56)
  • Vue的鼠标键盘事件 pinia和vuex的区别 Vuex 和 Pinia 的优缺点

    鼠标事件(将v-on简写为@) 键盘事件 输入框事件 但是element-ui在实际使用时,前四条触发方法全部都是input方式( 在 Input 值改变时触发 )触发,遂使用原生的@blur才完成效果 表单输入相关修饰符  .lazy     input 输入完毕时 .number   input只获取数字类型的输入 .trim   去除用户输入中

    2024年02月12日
    浏览(44)
  • vue中使用Pinia和Vuex详解

    我们使用Vue2的时候,Vuex作为一个状态管理工具在组件中使用方便了很多。Vue3推出后,虽然相对于Vue2很多东西都变了,但是核心的东西还是没有变的,比如说状态管理、路由等等。实际上,pinia就是Vuex的升级版,官网也说过,为了尊重原作者,所以取名pinia,而没有取名Vue

    2024年02月16日
    浏览(36)
  • vue:状态管理库及其部分原理(Vuex、Pinia)

    多组件的状态共享问题: 当多个组件需要访问和修改相同的数据时,我们需要在组件之间传递 props或者使用事件总线。当,应用就会变得难以维护和调试。 多组件状态同步问题: 当一个组件修改了状态,其他组件可能无法立即得知该变化。 状态变更的追踪问题: 无法追踪

    2024年01月19日
    浏览(49)
  • Vue3最佳实践 第八章 ESLint 与 测试 ( ESLint )

      ​在所有的JavaScript 项目开发中我们都会接触到 ESLint 这个词,ESLint 是个什么样的组件会给为项目做些什么吗?ESLint 是一种检查语法错误以及代码是否按照预定规则编写的工具。ESLint 可以帮助开发者发现代码中潜在的错误。在Vue项目中Eslint一般都会配合其他语法检测工具

    2024年02月04日
    浏览(49)
  • vue3中的吸顶导航交互实现 | VueUse插件

    目的:浏览器上下滚动时,若距离顶部的滚动距离大于78px,吸顶导航显示,小于78px隐藏。使 用vueuse插件中的 useScroll方法 ​​​​​​​ 和 动态类名控制 进行实现 项目中导入,解构出 useScroll方法的其他参数: 参考:useScroll | VueUse中文文档 (vueusejs.com)

    2024年02月09日
    浏览(45)
  • 【Vue3】利用VueUse实现useInfiniteScroll虚拟滚动操作

    我们先来看一下效果展示 1、infiniteScroll无限滚动是一种在网页或应用程序中实现动态加载内容的技术,它允许用户在滚动页面时无需点击分页或刷新按钮自动加载更多内容,从而提供更流畅的用户体验,传统的分页加载需要用户点击下一页或下载更多的按钮来获取更多内容,

    2024年02月01日
    浏览(60)
  • 教程 - 在 Vue3+Ts 中引入 CesiumJS 的最佳实践@2023

    目录 1. 本篇适用范围与目的 1.1. 适用范围 1.2. 目的 2. 牛刀小试 - 先看到地球 2.1. 创建 Vue3 - TypeScript 工程并安装 cesium 2.2. 清理不必要的文件并创建三维地球 2.3. 中段解疑 - 奇怪的路径 2.4. 打包部署 2.5. 有限的优化 3. CesiumJS 前置知识 3.1. CesiumJS 依赖包中的资料说明 3.2. 构建后

    2023年04月09日
    浏览(32)
  • VueUse 是怎么封装Vue3 Provide/Inject 的?

    Provide 和 Inject 可以解决 Prop 逐级透传问题。注入值类型不会使注入保持响应性,但注入一个响应式对象,仍然有响应式的效果。 Provide 的问题是无法追踪数据的来源,在任意层级都能访问导致数据追踪比较困难,不知道是哪一个层级声明了这个或者不知道哪一层级或若干个层

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包