【问题标题】:React: fetch call's then function not being calledReact:获取调用的 then 函数未被调用
【发布时间】:2020-09-03 02:54:38
【问题描述】:

我试图在渲染函数中获取并有一个 then 函数来做一些事情。我的代码如下。但是,它似乎从来没有调用过 then 函数。

获取(网址,{ 方法:“获取”, 标头:{ 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': "*", "Cache-Control": "no-store" }, 正文:空 }) .then(function (res) {console.log("here");finished++}) .catch(function (err) {console.log(err)});

而(完成

我尝试向传递给 then 函数的函数添加不同数量的参数。我也尝试过添加 finally 块。 cmets显示异步调用成功并成功返回,所以我无法理解问题所在。任何帮助将不胜感激。

【问题讨论】:

    标签: reactjs api asynchronous fetch


    【解决方案1】:

    您不应该在 render 方法中执行异步操作。 您的大部分获取数据 API 调用应在 componentDidMount 内完成。

    您的渲染方法应该更关心返回 UI。 渲染方法应该是纯的,也就是说它只使用 state 和 props 来渲染,从不尝试修改 state 或在渲染中做任何其他动作。

    export default class App extends React.Component {
      constructor() {
        super();
        this.state = { data: null }
      }
      
    
      async componentDidMount() {
        const apiData = await fetch();
        const jsoned = await apiData.json();
        this.setState({ data: jsoned });
      } 
    
      render() {
        if (!data) return null;
    
        return (
          <div>
            {data.map()}
          </div>
        );
      }
    }
    
    

    【讨论】:

    • 我有一个无限循环,一直等到通话结束。此外,当我尝试在 componentDidMount 中进行异步调用时,我遇到了同样的问题。另外,我在渲染函数中有这个的原因是因为我想让它成为无状态的(或者至少没有将数据存储在一个状态中)。这是不好的做法吗?
    • React 基于state。为了在该页面上显示数据,您必须将其放入state。使用无限循环发布您的代码?
    • 我的原始帖子中有无限循环。我基本上在继续之前等待变量增加。该变量仅在 then 方法中递增。我的问题是,即使在获取完成后,传递给 then 的函数也不会被调用。服务器端日志显示它成功处理了 fetch 调用,但 fetch 调用在解决后似乎没有调用 then 函数。因此,它不会增加标志并陷入无限循环。
    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多