06_React ajax

news/2024/9/17 3:34:58/ 标签: react.js, ajax, 前端

React ajax

  • 一、理解
    • 1、前置说明
    • 2、常用的 ajax 请求库
    • 浏览器插件推荐
  • 二、axios
    • 1、跨域实际上是请求发出了,但是没有接收到数据。使用代理服务器进行解决
    • 2、React 脚手架配置代理
      • 2.1 前端项目在 package.json 中的文件添加配置,可以解决跨域
      • 2.2 方式二
        • 2.2.1 第一步:创建代理配置文件
        • 2.2.2 编写 setupProxy.js 配置具体代理规则:
      • 2.3 服务端修改
    • 3、文档
    • 4、例子:github 搜索
      • 4.1 解构赋值写法复习
        • 4.1.1 常规写法
        • 4.1.2 连续写法, 没有定义 keywordElement,只定义了 value
        • 4.1.3 连续写法,并且将原来变量重命名
      • 4.2 兄弟组件之间的传值通信
        • 4.2.1 消息订阅-发布机制(适用任意组件间的通信)
      • 4.3 fetch 发送请求
        • 4.3.1 文档
        • 4.3.2 特点
        • 4.3.3 相关 API
      • 4.4 github 搜索案例和相关知识点
        • 4.4.1 设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办
        • 4.4.2 ES6 小知识点:解构赋值+重命名
        • 4.4.3 消息订阅与发布机制
        • 4.4.4 fetch 发送请求(关注分离的涉及思想)

一、理解

1、前置说明

1、React 本身只关注于界面,并不包含发送 ajax 请求的代码
2、前端应用需要通过 ajax 请求于后台进行交互(json 数据)
3、React 应用中需要集成第三方 ajax 库(或自己封装)

ajax__9">2、常用的 ajax 请求库

1、jQuery:比较重,如果需要另外引入不建议使用
2、axios:轻量级,建议使用
1)封装 XmlHttpRequest 对象的 ajax
2)promise 风格
3)可以用在浏览器端和 node 服务器端

浏览器插件推荐

FeHelper(前端助手):JSON 自动格式化,手动格式,支持排序、解码、下载等等

二、axios

1、跨域实际上是请求发出了,但是没有接收到数据。使用代理服务器进行解决

2、React 脚手架配置代理

2.1 前端项目在 package.json 中的文件添加配置,可以解决跨域

“proxy”: “http://localhost:5000”

说明:

  1. 优点:配置简单,前端请求资源时可以不加任何前缀
  2. 缺点:不能配置多个代理
  3. 工作方式:上述配置代理,当请求了 3000 不存在的资源时, 那么该请求会转发给 5000 (优先匹配前端资源)

2.2 方式二

2.2.1 第一步:创建代理配置文件
在 src 下创建配置文件: src/setupProxy.js
2.2.2 编写 setupProxy.js 配置具体代理规则:

changeOrigin 设置为 true 时,服务器收到的请求头中的 host 为:localhost:5000
changeOrigin 设置为 false 时,服务器收到的请求头的 host 为:localhost:3000
changeOrigin 默认值为 false,但我们一版将 changeOrigin 值设为 true

// 配置多个代理
// react 脚手架直接下载好了中间件
const proxy = require('http-proxy-middleware')module.exports = function (app) {app.use(proxy('/api1', {// 遇见 api1 前缀的请求,就会触发该代理配置target: 'http://localhost:5000', //请求转发给谁changeOrigin: true, // 控制服务器受到的响应头中 Host 字段的值。请求时哪里发出来的pathRewrite: { '^/api1': '' }, // 重写请求路径}),// proxy('/api2', {//   target: 'http://localhost:5001',//   changeOrigin: true,//   pathRewrite: {'^/api2': ""}// }))
}

说明:

  1. 优点:可以配置多个代理,可以灵活的控制请求是否走代理
  2. 缺点:配置繁琐,前端请求资源时必须加前缀

2.3 服务端修改

安装依赖
npm i cors

使用,然后进行相关配置即可
const cors = require(“cors”)
app.use(cors())

3、文档

https://github.com/axios/axios

4、例子:github 搜索

4.1 解构赋值写法复习

4.1.1 常规写法
let { value } = this.keywordElement
4.1.2 连续写法, 没有定义 keywordElement,只定义了 value
let {keywordElement: { value },
} = this
4.1.3 连续写法,并且将原来变量重命名
let {keywordElement: { value: keyword },
} = this

4.2 兄弟组件之间的传值通信

4.2.1 消息订阅-发布机制(适用任意组件间的通信)

1、工具库:PubSubJS
2、下载: npm i pubsub-js --save
3、使用:
1)import PubSub from “pubsub-js” // 引入
2)PubSub.subscribe(‘delete’, function(msgName,data){console.log((msgName,data))});//订阅, 组件挂载后就可以订阅
3)PubSub.publish(‘delete’, data);// 发布消息

List 组件挂载时订阅消息,只要有发布消息就更新状态数据

4.3 fetch 发送请求

window 对象内置的对象
优势:不是第三方库,不需要安装,只要有浏览器就可以使用,也是 Promise 风格的

4.3.1 文档

https://segmentfault.com/a/1190000003810652

4.3.2 特点

1、fetch:原生函数,不再使用 XmlHttpRequest 对象提交 ajax 请求
2、老版本浏览器可能不支持

4.3.3 相关 API

1)GET 请求:

fetch(url).then(function (response) {return response.json()}).then(function (data) {console.log(data)}).catch(function (e) {console.log('Oops, error')})

4.4 github 搜索案例和相关知识点

4.4.1 设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办
4.4.2 ES6 小知识点:解构赋值+重命名
let obj = {a:{b:1}}
const {a} = obj // 传统解构赋值
const {a:{b}} = obj // 连续解构赋值
const {a: {b:value}} // 连续解构赋值+重命名
4.4.3 消息订阅与发布机制

1、先订阅,再发布(理解:有一种隔空对话的感觉)
2、适用于任意组件间通信
3、要在组件的 componentWillUnmount 中取消订阅

4.4.4 fetch 发送请求(关注分离的涉及思想)
try {const response = await fetch('xxx')const data = await response.json()console.log(data)
} catch (error) {console.log('请求出错', error)
}

http://www.ppmy.cn/news/1521975.html

相关文章

工厂模式与策略模式(golang示例)

一、工厂模式简介 工厂模式是一种创建型设计模式,主要用于封装对象的创建过程。通过使用工厂模式,客户端代码无需直接实例化对象,而是通过工厂类来创建对象。这样可以将对象的创建与使用分离,从而提高代码的灵活性。 1.1 工厂模…

004: VTK读入数据---vtkImageData详细说明

VTK医学图像处理---vtkImageData类 目录 VTK医学图像处理---vtkImageData类 简介: 1 Mricro软件的安装和使用 (1) Mricro安装 (2) Mricro转换DICOM为裸数据 2 从硬盘读取数据到vtkImageData 3 vtkImageData转RGB或RGBA格式 4 练习 总结 简介:…

Dify 与 FastGPT 流程编排能力对比分析

Dify 与 FastGPT 流程编排能力对比分析 一、引言 在人工智能快速发展的今天,大语言模型(LLM)应用平台正在重塑各行各业的工作流程。其中,Dify 和 FastGPT 作为两款具有重要影响力的工具,凭借各自独特的流程编排能力&a…

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界…

Faker在pytest中的应用

Faker在pytest中的应用主要体现在测试数据的准备上,通过生成逼真的伪数据来模拟真实场景,从而提高测试的覆盖率和可靠性。以下是一些具体的应用例子: 用户信息测试 在测试用户注册、登录等功能时,Faker可以生成大量的用户信息&a…

逻辑代数的基本定律,常用公式

目录 逻辑代数的基本定律 0-1律 同一律 互补律 还原律 交换律 结合律 分配律 摩根定理(反演律) 逻辑代数的常用公式 吸收律 冗余律 思考 异或运算的一些公式 逻辑代数的基本定律 最基本的与或非的运算。 0-1律 同一律 互补律 还原律 交…

统一NLP和目标检测的DETR(一)——self attention、encoder、decoder

主流目标检测算法劣势 YOLO系列,它基于anchor来做,少不了要用MNS,导致速度相对较慢。 但今天介绍一款DETR,基于VIT的目标检测算法。 那么我们需要先深入过一遍VIT。 Vision transform 1、传统RNN网络的问题 单向:只…

Java8 Stream流的基本使用

Java 8 中引入的 Stream API 是为了简化对集合类库(例如 List 和 Set)的操作,同时支持声明式编程风格和并行操作。Stream 不存储数据,而是对数据源进行流水线式操作,其设计核心是“将数据处理的每一步链接起来&#xf…

kubernetes集群下部署kafka+zookeeper单机部署方案

背景: 注:在kubernetes集群上部署单机版的zookeeperkafka服务,是采用了kubernetes中的deploment组件service组件pvc存储组件 1、部署zookeeper服务: 注:这里时候的镜像是:dockerhub.jiang.com/jiang-public…

【佳学基因检测】如何使用Letsencrypt对一个网站进行加密?

【佳学基因检测】如何使用Letsencrypt对一个网站进行加密? 更换为Let’s Encrypt证书涉及以下几个步骤: 1. 安装Certbot Certbot是Let’s Encrypt的客户端工具,它可以帮助你申请和管理证书。首先,你需要在服务器上安装Certbot。…

[C++11#45](二) 右值引用 | 移动语义 | 万能引用 | 完美转发forward | 初识lambda

目录 一. 右值引用 1.左值 vs 右值 2.左值引用 vs 右值引用 右值引用实现的两种底层优化 Q1: 容器上 Q2: 字符串上 解决:右值引用 3.完美转发 完美转发 4.补充 1.移动赋值 2.右值引用引用左值的场景 二.lambda 1.引入 2.lambd…

无人机之载重篇

无人机的载重能力是一个复杂且多样化的参数,它受到多种因素的影响,包括无人机的类型、设计、技术规格以及用途等。以下是对无人机载重能力的详细解析: 一、无人机载重能力的差异 无人机的载重能力差异很大,从几百克到几十千克不等…

Java后端分布式系统的服务容错机制:Faul-tolerant Systems

Java后端分布式系统的服务容错机制:Faul-tolerant Systems 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在构建分布式系统时,服务的容错性是确保系统稳定性和可用性的…

安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景

随着科技的不断进步,增强现实(AR)技术逐渐在多个领域展现出其独特的优势,尤其是在安保和安防方面。AR眼镜凭借其先进的功能,在机场、车站、海关、港口、工厂、园区、消防局和警察局等行业中为安保人员提供了更为高效、…

TCP 和 UDP 区别

UDP UDP(用户数据报协议,User Datagram Protocol)是一种无连接的网络传输协议,提供了简单的消息传送服务。UDP位于传输层,允许应用程序向其他主机发送封装在IP数据报中的消息,而无需先建立连接。由于UDP不…

【论文笔记】Multi-Task Learning as a Bargaining Game

Abstract 本文将多任务学习中的梯度组合步骤视为一种讨价还价式博弈(bargaining game),通过游戏,各个任务协商出共识梯度更新方向。 在一定条件下,这种问题具有唯一解(Nash Bargaining Solution),可以作为多任务学习中的一种原则…

I2VGen-XL模型构建指南

一、介绍 VGen可以根据输入的文本、图像、指定的运动、指定的主体,甚至人类提供的反馈信号生成高质量的视频。它还提供了各类常用的视频生成模型工具,例如可视化、采样、训练、推理、使用图像和视频的联合训练,加速等各类工具和技术。 &quo…

微信小程序显示后台文章副文本,图片和视频正常显示

解决方案: 使用 wxParse 或 rich-text 组件: 这两种方式可以解析 HTML 字符串并渲染富文本内容,包括图片和视频。 数据处理: 将后台返回的富文本数据进行处理,提取出图片和视频的链接,并将其转换成小程序支持的格式。 方案一:使…

数据库学习01——mysql怎么创建数据库和表

第一步:创建数据库 使用 create database 语句,后跟要创建的数据库名称: CREATE DATABASE dbname;例如,要创建名为 my_db 的数据库,请输入: CREATE DATABASE my_db ;使用 show databases; 语句检查数据库是…

第十六篇:走入计算机网络的传输层--传输层概述

1. 传输层的功能 ① 分割与重组数据 一次数据传输有大小限制,传输层需要做数据分割,所以在数据送达后必然也需要做数据重组。 ② 按端口号寻址 IP只能定位数据哪台主机,无法判断数据报文应该交给哪个应用,传输层给每个应用都设…