Fetch发送网络请求

1. 文档

  1. https://github.github.io/fetch/
  2. https://segmentfault.com/a/1190000003810652

2. 特点

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

3. 相关API

  1. GET请求
fetch(url).then(function(response) {return response.json()}).then(function(data) {console.log(data)}).catch(function(e) {console.log(e)});
  1. POST请求
 fetch(url, {method: "POST",body: JSON.stringify(data),}).then(function(data) {console.log(data)}).catch(function(e) {console.log(e)})

在这里插入图片描述

import React, {Component} from 'react';
import PubSub from 'pubsub-js'
import axios from "axios";class Search extends Component {search = async () => {// 获取用户的输入(连续解构赋值+重命名)const {keyWordElement: {value: keyword}} = this// 发送请求前通知List更新状态// this.props.updateAppState({isFirst: false, isLoading: true})PubSub.publish('zep', {isFirst: false, isLoading: true})// 发送网络请求---使用axios发送/*axios.get(`https://api.github.com/search/users?q=${keyword}`).then((response) => {// 请求成功后通知List更新状态// this.props.updateAppState({isLoading: false, users: response.data.items})console.log('Search组件发布消息')PubSub.publish('zep', {isLoading: false, users: response.data.items})},(error) => {// this.props.updateAppState({isLoading: false, err: error.message})PubSub.publish('zep', {isLoading: false, err: error.message})})
*/// 发送网络请求---使用fetch发送(未优化)/*fetch(`https://api.github.com/search/users?q=${keyword}`).then((response) => {console.log('联系服务器成功了')return response.json() // 返回一个promise对象,则失败状态},(error) => {console.log('联系服务器失败了', error)return new Promise(() => {}) // 返回一个初始化的promise,来中断链式调用}).then((response) => {console.log('获取数据成功', response)},(error) => {console.log('获取数据失败', error)})*/// 发送网络请求---使用fetch发送(优化)fetch(`https://api.github.com/search/users?q=${keyword}`).then((response) => {console.log('联系服务器成功了')return response.json() // 如果返回一个promise对象,则then的结果为失败状态}).then((response) => {console.log('获取数据成功', response)}).catch((error) => {console.log('请求出错', error)})/* try {const response = await fetch(`https://api.github.com/search/users?q=${keyword}`)const data = await response.json()// console.log(data)PubSub.publish('zep', {isLoading: false, users: data.items})} catch (error) {console.log('请求出错', error)PubSub.publish('zep', {isLoading: false, err: error.message})}*/}render() {return (<section className="jumbotron" style={{textAlign: "center"}}><h3 className="jumbotron-heading">搜索github用户</h3><div><input ref={c => this.keyWordElement = c} type="text" placeholder="输入关键词点击搜索"/>&nbsp;<button onClick={this.search}>搜索</button></div></section>);}
}export default Search;

4.1. 总结

  1. 设计状态时要考虑全面,例如带有网络请求的组件,要考虑请求失败怎么办。

  2. ES6小知识点:解构赋值+重命名
    let obj = {a:{b:1}}
    const {a} = obj; //传统解构赋值
    const {a:{b}} = obj; //连续解构赋值
    const {a:{b:value}} = obj; //连续解构赋值+重命名

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

  4. fetch发送请求(关注分离的设计思想)

try {const response= await fetch(`/api1/search/users2?q=${keyWord}`)const data = await response.json()console.log(data);} catch (error) {console.log('请求出错',error);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSX详解React的事件绑定事件参数的传递

一、认识JSX 这段element变量的声明右侧赋值的标签语法是什么呢&#xff1f; 它不是一段字符串&#xff08;因为没有使用引号包裹&#xff09;&#xff0c;它看起来是一段HTML原生&#xff0c;但是我们能在js中直接给一个变量赋值html吗&#xff1f;其实是不可以的&#xff0c…

总谐波失真计算公式_新能源汽车技术|车用轮毂电机转矩谐波协同控制策略

点击 电机与控制应用 关注我们轮毂电机因结构简单、驱动灵活的特点广泛应用于轻型电动车辆。电机运行中存在的齿槽效应、逆变器非线性效应及电流谐波等问题&#xff0c;导致电机电磁转矩波动&#xff0c;影响车辆运行的平顺性。通过电磁转矩谐波分析发现其主要成分为低阶谐波。…

React条件渲染列表渲染

一、React条件渲染 某些情况下&#xff0c;界面的内容会根据不同的情况显示不同的内容&#xff0c;或者决定是否渲染某部分内容&#xff1a; 在vue中&#xff0c;我们会通过指令来控制&#xff1a;比如v-if、v-show&#xff1b;在React中&#xff0c;所有的条件判断都和普通的J…

解决VirtualBox错误:“FATAL:No bootable medium found!”

VirtualBox错误&#xff1a;“FATAL&#xff1a;No bootable medium found!”  用VirtualBox安装系统出现这个错误的几率极高&#xff0c;因为当哥出现同样问题的时候股沟了下”FATAL&#xff1a;No bootable medium found!“出现很多内容&#xff0c;但没一个把问题解决了的…

React事件总线

通过Context主要实现的是数据的共享&#xff0c;但是在开发中如果有跨组件之间的事件传递&#xff0c;应该如何操作呢&#xff1f; 一、安装events 在Vue中我们可以通过Vue的实例&#xff0c;快速实现一个事件总线&#xff08;EventBus&#xff09;&#xff0c;来完成操作&…

React中使用ref

一、如何使用ref 在React的开发模式中&#xff0c;通常情况下不需要、也不建议直接操作DOM原生&#xff0c;但是某些特殊的情况&#xff0c;确实需要获取到DOM进行某些操作&#xff1a; 管理焦点&#xff0c;文本选择或媒体播放&#xff1b;触发强制动画&#xff1b;集成第三方…

React中的受控组件和非受控组件

一、认识受控组件 在React中&#xff0c;HTML表单的处理方式和普通的DOM元素不太一样&#xff1a;表单元素通常会保存在一些内部的state。 比如下面的HTML表单元素&#xff1a; 这个处理方式是DOM默认处理HTML表单的行为&#xff0c;在用户点击提交时会提交到某个服务器中&…

JS动画 | 用TweenMax实现收集水滴效果

之前在CodePen上接触了TweenMax, 被它能做到的酷炫效果震撼了. (文末放了5个GSAP的效果GIF) 最近要做一个"收集水滴"的动效, 于是就试用了一下TweenMax实现这个效果. 什么是TweenMax TweenMax是GSAP(GreenSock Animation Platform)创作的动画工具库. GSAP的产品除了T…

React中的组件通信——父传子、子传父、Context

0、认识组件间的通信 在开发过程中&#xff0c;我们会经常遇到需要组件之间相互进行通信&#xff1a; 比如App可能使用了多个Header&#xff0c;每个地方的Header展示的内容不同&#xff0c;那么我们就需要使用者传递给Header一些数据&#xff0c;让其进行展示&#xff1b;又比…

React ref的转发

在前面学习ref时讲过&#xff0c;ref不能应用于函数式组件&#xff1a; 因为函数式组件没有实例&#xff0c;所以不能获取到对应的组件对象 但是&#xff0c;在开发中我们可能想要获取函数式组件中某个元素的DOM&#xff0c;这个时候我们应该如何操作呢&#xff1f; 方式一&…

电脑桌面 IE 图标删除不了的解决方法

电脑换了系统之后想把桌面的IE浏览器给删掉&#xff0c;可是直接删除又删不掉&#xff0c;杀毒软件查杀也没有问题。找了很多方法&#xff0c;终于才把它给解决了。下面&#xff0c;就把我的方法分享给桌面ie图标删除不了的解决方法&#xff0c;希望能对大家有所帮助! 方法 1 1…

React Portals的使用

某些情况下&#xff0c;我们希望渲染的内容独立于父组件&#xff0c;甚至是独立于当前挂载到的DOM元素中&#xff08;默认都是挂载到id为root的DOM元 素上的&#xff09;。 Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案&#xff1a; 第一个参数&a…

绿盟防火墙配置手册_双链路环境下不同品牌防火墙更换案例分享

关注“IT实战基地”&#xff0c;与行业大咖交流学习&#xff01;引言不同品牌防火墙在整体更换时&#xff0c;实施迁移时除了将防火墙的接口IP地址&#xff0c;路由&#xff0c;安全策略进行迁移时&#xff0c;在实际更换时还可能遇到一切奇怪的问题&#xff0c;尤其是在双链路…

React中的fragment和StrictMode

一、fragment 在之前的开发中&#xff0c;我们总是在一个组件中返回内容时包裹一个div元素&#xff1a; 我们又希望可以不渲染这样一个div应该如何操作呢&#xff1f; 使用FragmentFragment 允许你将子列表分组&#xff0c;而无需向 DOM 添加额外节点&#xff1b; React还…

怎么让车辆gps定位失效_如何更有效地检测车辆gps定位器?

GPS定位器可以帮助我们管理我们心爱的汽车&#xff0c;在任何时候定位和查询车辆的位置&#xff0c;并跟踪车辆防盗&#xff0c;一些汽车公司和公共交通企业也可以管理和调度车队&#xff0c;管理数据&#xff0c;并根据GPS定位器分析数据&#xff0c;实现智能和现代交通。GPS定…

React中的CSS——styled-components

一、认识CSS in JS 实际上&#xff0c;官方文档也有提到过CSS in JS这种方案&#xff1a; https://zh-hans.reactjs.org/docs/faq-styling.html “CSS-in-JS” 是指一种模式&#xff0c;其中 CSS 由 JavaScript 生成而不是在外部文件中定义&#xff1b;注意此功能并不是 Reac…

l380废墨收集垫已到使用寿命_湖北雨水收集系统定制

淮北海聚环保设备有限公司为您详细解读jrWVof湖北雨水收集系统定制的相关知识与详情&#xff0c; 1、三格化粪池&#xff0c;可设想为长方形或圆形。各粪池容积计较根据粪水储存时间定&#xff0c;即一般可按2&#xff1a;1&#xff1a;3计较。号池储存20天&#xff0c;2…

React脚手架学习笔记

一、前端工程的复杂化 如果我们只是开发几个小的demo程序&#xff0c;那么永远不需要考虑一些复杂的问题&#xff1a; 比如目录结构如何组织划分&#xff1b;比如如何管理文件之间的相互依赖&#xff1b;比如如何管理第三方模块的依赖&#xff1b;比如项目发布前如何压缩、打包…

access集团和abm_abm年度盛典,12月份,中国、澳大利亚、新西兰三地同时举办,abm各渠道运营商从全球各地赶来参会!...

十二月 &#xff0c;abm的各路年会分别在中国、澳大利亚、新西兰三国同时举办&#xff0c;abm各渠道运营商&#xff0c;从全球各地起来参会&#xff0c;先欣赏下abm全球年度盛典新西兰分会场中国区会场在abm中国区总部杭州举办&#xff0c;这次特别邀请了蔡康永&#xff0c;从上…

隐藏Android下的虚拟按键

隐藏Android下的虚拟按键 要隐藏Android下的虚拟按键&#xff0c;可通过如下办法操作 [cpp] view plaincopy adb root adb remount adb shell ls -al /system/build.prop (查看文件权限) -rw-r--r-- root root 4237 2015-11-19 04:34 build.prop adb …