首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axios“取消”api调用

Axios“取消”api调用
EN

Stack Overflow用户
提问于 2018-11-16 08:56:51
回答 1查看 318关注 0票数 1

我有一个页面,里面有一个componentDidMount()。我们有API调用,但是,如果在解决这些调用之前将这些调用导航到别处,则会得到反应错误。不能在未挂载的组件上使用setState。因此,我使用了Axios cancelToken来取消componentWillUnmount()中的API调用。它正在工作,API调用正在被取消。

但是,如果您将导航移开,然后返回到同一个页面,我将看到这些API调用仍然被取消,并且没有得到解决。也许我用错误的方式实现了cancelToken,或者是否有办法“取消”这些呼叫?

下面是代码框:axios cancelToken示例

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-16 09:20:09

问题是创建在文件级别范围内创建的取消令牌。因此,在第一次生成它之后,每次都不发出请求就会取消请求。

代码语言:javascript
复制
const signal = CancelToken.source();

class Roster extends React.Component {
   ...........
}

因此,删除了在类signal之前声明并包含在Roster组件的构造函数中的const Roster

我修改了从示例代码中提取的Roster组件的代码,如下所示:

代码语言:javascript
复制
import React from "react";
import axios, { CancelToken } from "axios";
import request from "./api";

class Roster extends React.Component {
  constructor() {
    super();

    this.state = {
      data: null,
      error: null
    };
    this.signal = CancelToken.source();
  }

  componentDidMount() {
    request({ url: "google.com", method: "GET", cancelToken: this.signal })
      .then(data => this.setState({ data }))
      .catch(error => {
        if (axios.isCancel(error)) {
          this.setState({ error: "request cancelled" });
        }
      });
  }

  componentWillUnmount() {
    this.signal.cancel();
  }

  render() {
    const { data, error } = this.state;
    return (
      <div>
        <div>data: {data ? data : "no data"}</div>
        <div>error: {error ? error : "no error"}</div>
      </div>
    );
  }
}

export default Roster;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53334418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档