当前位置: 首页 > 知识库问答 >
问题:

在React中返回未定义的Fetch方法

夹谷俊远
2023-03-14

我试图从React调用一个API,但它一直以未定义的方式返回。这是我的代码:

import React from 'react';

export default class UserList extends React.Component {
    constructor(props) {
        super(props);
        this.state = { customer: [] };
    }

    componentDidMount() {
        fetch('https://recommenderapi.herokuapp.com/customer_id=x', {
            mode: 'no-cors',
            method: "post",
            headers: {
                "Content-Type": "application/json"
            }
        }).then(({ results }) => this.setState({ customer: results }));
    }

    render() {
        console.log(this.state.customer)
        const customers = this.state.customer.map((item, i) => (
            <div>
                <h1>{item.customer_id}</h1>
                <h1>{item.prediction}</h1>
            </div>
        ));

        return (
            <div id="layout-content" className="layout-content-wrapper">
                <div className="panel-list">{customers}</div>
            </div>
        );
    }
}

当我运行它时,console.log()返回未定义的,这意味着我得到的错误TypeError: Cannot read属性'map'的未定义的。我不太确定如何解决这个问题,所以任何帮助都将不胜感激!谢谢。

编辑:这是API在您转到以下链接时返回的内容:{“prediction”:[“Roam in Rome”,“”]}

共有2个答案

朱典
2023-03-14

我认为它必须与您指定的模式:no-cors有关。MDN留档说它阻止发送应用程序/json标头。尝试将其更改为"cors"

杜祺
2023-03-14

您没有读取响应的主体并解析JSON;相反,您试图在响应对象上使用一个结果属性,该属性没有。

要读取响应正文,需要使用方法json()text()blob(),以及类似的方法。您可能正在发回JSON,因此需要JSON()。您还需要首先检查ok标志,因为如果请求因404或500 HTTP错误而失败,fetch将实现promise,但结果可能不是JSON。最后,您应该处理/报告fetch中的错误:

fetch('https://recommenderapi.herokuapp.com/customer_id=x', {
    mode: 'no-cors',
    method: "post",
    headers: {
        "Content-Type": "application/json"
    }
})
.then(response => {
    // *** Check for HTTP success
    if (!response.ok) {
        throw new Error(`HTTP error ${response.status}`);
    }
    // *** Read the body, parse it as JSON
    return response.json();
})
.then(({ results }) => this.setState({ customer: results }))
.catch(error => {
    // ...*** handle/report error...
});
 类似资料:
  • 我对ReactJS很陌生。目前正在使用EXPO.IO开发ReactJS原生移动应用程序。在我的项目中,我正在使用webView来显示内容。工作很好。但是当我试图实现goBack()时遇到了一个问题。 我所遵循的示例:https://blog.defining.tech/adding-a-back-button-for-react-native-webview-4a6fa9cd0b0 由于this.

  • 首先,我是在laravel中使用ajax的初学者。我试图通过警报或控制台检查输入字段是否正常工作。日志返回未定义。 我的刀片文件代码 我的控制器文件代码。。尽管其注释的公共函数存储(Request$Request){//Tag::create([ 网状物php/** 标签控制器*/ 路由::资源('tag','App\Http\Controllers\TagController'); 路由::po

  • 我正在尝试为discord bot执行命令,它从MySQL表中输出整数。 我尝试使用async/await、Promissions和回调来实现这一点,但结果总是一样的。在这里,我用promise再次尝试,因为在过去它不知何故起了作用。现在不会了。 下面是返回promise的函数: 下面的代码将结果赋值给Access Level变量: Catch函数捕获表示“TypeError:无法读取未定义的属性

  • 我在node.js中编译代码时出现了这个错误,我该如何修复它呢? RefernceError:未定义fetch 这就是我正在做的函数,它负责从特定的电影数据库中恢复信息。

  • 我之前问过这个问题,它与这个问题相关(如何从异步调用返回响应?),但它并没有解决我的问题 我是node.js的新手,我遇到了一些我无法处理的错误,或者找不到任何我理解的帮助。我使用express generator初始化应用程序。我试图通过一个api调用将我得到的对象发送到前端。我编写了一个类“StockClass.js”,其中包含一个函数makeApiCall(),该函数进行调用并返回对象。但当

  • 问题内容: 因此,当我打开灯箱时,我试图禁止在页面上滚动,而我发现这个确实有用的脚本非常有用。不幸的是,当我在自己的页面上使用它时,它也禁止在灯箱中滚动。我开始用警报调试代码,只是发现该事件。wheelDelta在我的页面上返回“undefined”,而在JSFiddle中,它返回-120。 问题答案: jQuery事件处理程序中的对象不能反映真实事件。是IE和Opera的非标准事件属性,可通过j