Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。

它还提供了一个全局 fetch() 方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。

这种功能以前是使用 XMLHttpRequest 实现的。

前端老兵,公众号: 前端爱好者 react开发利器 之 fetch请求封装

由于以下原因,我们在判断后端返回数据时候,如果 HTTP 状态码错误,可能判断比较麻烦。

当接收到一个代表错误的 HTTP 状态码时,从 fetch() 返回的 Promise 不会被标记为 reject,即使响应的 HTTP 状态码是 404 或 500

相反,它会将 Promise 状态标记为 resolve(如果响应的 HTTP 状态码不在 200 - 299 的范围内,则设置 resolve 返回值的 ok 属性为 false),仅当 网络故障时或请求被阻止时,才会标记为 reject

那么 如何获取从 fetch() promise 返回的数据?

由于涉及到异步问题(试图以同步方式获取此异步调用的结果),所以通过 .then 回调可以解决。

function checkUserHosting(hostEmail, callback) {
    fetch('http://localhost:3001/activities/')
    .then((response) => { 
        // 注意此处
        response.json().then((data) => {
            console.log(data);
            return data;
        }).catch((err) => {
            console.log(err);
const checkUserHosting = async (hostEmail, callback) => {
    let hostEmailData  = await fetch(`http://localhost:3001/activities`)
    // 注意此处//use string literals
    let hostEmailJson = await hostEmailData.json();
    return hostEmailJson;
await fetch('http://localhost:3001/activities', {
    method: 'POST',
    headers: {
    'Accept': 'application/json, */*',
    'Content-Type': 'application/json;charset=UTF-8',
    'cache': 'default',
    'credentials': 'include', //表示请求是否携带cookie
    body: JSON.stringify(data)
}).then((response) => {
    response.json().then((data) => {
    if (data.code === 500) errorMessage = data.msg
        return data;
    }).catch((err) => {
        console.log(err);
}).then((data) => {
    console.log('data is', data)
.catch(e => {
    pcConsole.log('get postcat client download link error');
                    Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。它还提供了一个全局 fetch() 方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。这种功能以前是使用 XMLHttpRequest 实现的。
专为设计的用于简单数据获取的HOC。 如果您将不传递给它的请求函数传递给它,则原始响应将返回到data道具中的最终组件。
$ yarn add with-fetch $ npm install with-fetch 
这个怎么运作
该组件导出两个HOC
 withFetch
 displayWhileLoading
withFetch
 此HOC是获取的地方。 HOC将获取,解析然后将数据传递到最终组件。
 import { withFetch } from 'with-fetch'
import { compose } from 'recompose'
import fetch from 'isomorphic-fetch'
export const MyComopnent = compose (
  withFetch ( props => fetch ( `ht
success: (data) => { /* do something with the data */ },
error: (err) => { /* do something when an error happens */}
import {bindActionCreators} from 'redux';
class Home extends Component{
  constructor(props){
    super(props)
    //判断是否是浏览器
    if(typeof window==="object")this.fetchData();
  //fetchData固定名称,必须返回异步,且所有action需要awiat
  async fetchData(){
    await this.props.getDataAct();
  render(){
    let {data}=this.props;
				
fetch是一种原生 js 对 HTTP 数据请求的方式,是 XMLHttpRequest 的一种更理想的替代方案 Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应,它还提供了一个全局 fetch() 方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源 使用例子: 一般请求: fetch(url, { method: "POST", body: JSON.stringify(data), headers: { } from ' @kne/react-fetch ' const RenderComponent = ({ data , refresh }) => { //当请求返回正常,可以拿到data值 React . rende
npm install --save react-fetch-component 您提供单个函数作为<Fetch>的子代,该子代将单个参数作为对象接收。 每当获取请求的状态发生更改时(例如,在发出请求之前,请求进行中时以及请求返回响应之后)都会调用该函数。 虽然可以将单个属性传递给函数(例如(fetchProps) => ... ),但通常使用对象(fetchProps) => ...来剥离打算使用的对象的属性。 销毁和使用最常见的属性loading , error和data的示例。 < Fetch xss=removed> { ( { loading , error , data } ) => ( 将fetchProgress方法导入您的项目 import fetchProgress from 'fetch-progress 现在在提取调用中使用fetchProgress方法,尝试在使用响应之前将其放入。 你可以 fetch(this.props.src) .then( fetchProgress({ // implement onProgress method onProgress(progress) { console.log({ progress }); // A possible progress report y fetch('https://example.com/data') .then(response => response.json()) .then(data => console.log(data)) 在这个例子中,我们使用 .json() 方法解析响应,然后打印响应数据。 3. 错误处理。我们可以使用 .catch() 方法处理请求失败的情况。例如: fetch('https://example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)) 在这个例子中,我们使用 .catch() 方法处理请求失败的情况,并打印错误信息。 注意:使用 Fetch API 发送请求时,需要考虑浏览器的跨域限制。如果请求的 URL 与当前页面的域名不同,可能会受到跨域限制。可以使用 CORS 或 JSONP 等技术解决跨域问题。 前端布道人: https://mp.weixin.qq.com/s?__biz=MzIxMjAzNDUzOQ==&mid=2454695087&idx=1&sn=cc00c381eeaf7d0a5d2d08a52c067118&chksm=80f73a2bb780b33d5474ec6a38a697da27d09b73c99a057f9f7fbd050a74de33e8e02344d6fb&token=1881099579&lang=zh_CN#rd 文章最底部有源码下载地址