React 基本 api 调用问题

Posted

技术标签:

【中文标题】React 基本 api 调用问题【英文标题】:React basic api call issue 【发布时间】:2020-12-25 08:18:54 【问题描述】:

我正在尝试将基本的 react js api 数据显示到 DOM。

我收到此错误:

在控制台上我没有收到任何错误,但它给出了 TypeError: Cannot read property 'map' of undefine error on the page。


class App extends React.Component 
  constructor(props)
  
    super(props);
    this.state = 
     details: [],
     isLoaded: false
    
   
  
  
  componentDidMount()
  
    fetch("https://dummy.restapiexample.com/api/v1/employees")
    .then(res => res.json())
    .then(
      (result) => 
        this.setState(
          isLoaded: true,
          details: result.details
        )
      
    )
  

 
  render() 
    const  isLoaded, details = this.state;

    if(!isLoaded)
    
      return <div> Loading ...... </div> 
    

    return (
    <ul>
      details.map(detail => (
        <li key=detail.employee_name> detail.employee_name </li>
      ))
    </ul>
    );
  
  


export default App;

【问题讨论】:

details &amp;&amp; details.map 假设 details 确实是一个数组 【参考方案1】:

您使用的端点返回data,而不是details

所以

this.setState(
      isLoaded: true,
      details: result.details
    )

真的应该变成

this.setState(
      isLoaded: true,
      details: result.data
    )

【讨论】:

非常感谢,它修复了我的错误,但为什么它应该是数据而不是细节?或者是其他东西?数据是 fetch 调用的预定义结果集吗? 不,这只是从该特定 API 返回的 JSON 的结构。【参考方案2】:

如果您设置为详细信息的响应是一个数组,您的代码应该可以正常工作。在您尝试从中获取的获取 url 中,响应没有任何详细信息字段。将其更改为result.data,它应该可以正常工作。

还可以尝试将details.map(...) 更改为details &amp;&amp; details.map(....) 如果您由于延迟将result.data 设置为提取的详细信息而得到它,这应该可以解决错误。此更改还将确保如果 details 未定义(因为它当前在您的代码中),那么 map 函数将永远不会执行并且您不会被抛出错误。

【讨论】:

为什么应该是数据而不是细节?或者是其他东西?数据是 fetch 调用的预定义结果集吗? @Rohan 只需在浏览器上输入 url - dummy.restapiexample.com/api/v1/employees 并检查您获得的响应对象。在该对象中,仅存在数据作为响应对象的键,没有详细信息,因此...

以上是关于React 基本 api 调用问题的主要内容,如果未能解决你的问题,请参考以下文章

React - 是不是在 useEffect 中调用 API

React 原生调用 API axios 网络

React 中的竞争条件; API 调用、数据库调用

React 中的多个 API 调用

React Native UseEffect API 调用

React - 调用 api 并导出值