TypeError:this.state.patients.map 不是函数

Posted

技术标签:

【中文标题】TypeError:this.state.patients.map 不是函数【英文标题】:TypeError: this.state.patients.map is not a function 【发布时间】:2019-01-03 05:00:18 【问题描述】:

我是 react js 的新手,我正在学习创建一个 React 应用程序,但我遇到了映射函数的问题:

这是我的请求以及我尝试呈现数据的方式:

class Patients extends Component 
  constructor(props) 
    super(props)
    this.state = 
      patients: []
    
  
  componentDidMount() 
    api.getPatients()
      .then( patients => 
        console.log( patients)
        this.setState(
          patients:  patients
        )
      )
      .catch(err => console.log(err))
  
  render()                 
    return (
      <div className=" Patientss">
        <h2>List of Patient</h2>
        this.state.patients.map((c, i) => <li key=i>c.name</li>)
      </div>
    );
  


export default Patients;

这里是我的 api 调用

import axios from 'axios';

const service = axios.create(
  baseURL: process.env.NODE_ENV === 'production' ? '/api' : 'http://localhost:3000/patient',
);

const errHandler = err => 
  console.error(err);
  throw err;
;

export default 
    service: service,
    
    getPatients() 
      return service
        .get('/')
        .then(res => res.data)
        .catch(errHandler);
    ,
    
我收到以下错误: TypeError: this.state.patients.map is not a function

我也尝试过使用 slice,但是没有用,有人知道我的代码有什么问题吗?`

【问题讨论】:

您确定服务器响应中有数据吗?你能告诉我们这个console.log(患者)给出了什么吗? count: 24patient: Array(24) [ …, …, …, … ]&lt;prototype&gt;: Object … @RiaAnggraini 是一个对象,在 setState 中使用 patients.patient @MayankShukla 是的,没错,谢谢,我犯了愚蠢的错误 【参考方案1】:

根据症状(呵呵),您在api.getPatients() 中获得的patients 对象不是数组。

console.log() 看看它到底是什么。

编辑:基于 cmets,patients 对象看起来像


  count: 24,
  patient: [...],

所以this.setState() 调用需要是

this.setState(patients: patients.patient)

【讨论】:

这里是控制台结果count: 24patient: Array(24) [ …, …, …, … ]&lt;prototype&gt;: Object … @RiaAnggraini 好的。用基于此的解决方案更新了我的答案。 它的作品,非常感谢,我从今天早上开始一直在寻找问题,谢谢:)【参考方案2】:

你也可以做这样的事情作为条件渲染。它将检查 this.state.patient 是否存在,那么只有它会继续调用 this.state.patients.map 函数。它还可以确保您以后不会因为错误的响应而收到任何错误。

我更新了您的患者代码示例。

class Patients extends Component 
  constructor(props) 
    super(props)
    this.state = 
      patients: []
    
  
  componentDidMount() 
    api.getPatients()
      .then( patients => 
        console.log( patients)
        this.setState(
          patients:  patients
        )
      )
      .catch(err => console.log(err))
  
  render()                 
    return (
      <div className=" Patientss">
        <h2>List of Patient</h2>
         this.state.patients && this.state.patients.map((c, i) => <li key=i>c.name</li>)
      </div>
    );
  


export default Patients;

我希望它有所帮助。谢谢!!

【讨论】:

以上是关于TypeError:this.state.patients.map 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

Django TypeError - TypeError: issubclass() arg 1 必须是一个类

pyspark:TypeError:'float'对象不可迭代

Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's

TypeError: key 必须是一个字符串,一个缓冲区或一个对象在 typeError 与 GCP 文件存在

TypeError: jQueryxxxxxx 不是函数