gpt4 book ai didi

javascript - 如何在 JavaScript 中修复未定义的 "TypeError: Cannot read property ' 映射'?

转载 作者:行者123 更新时间:2023-11-30 13:58:49 26 4
gpt4 key购买 nike

我正在从 API 获取数据,然后将其映射以呈现到表格中。但是抓取不起作用,并且在加载页面时状态保持未定义。虽然 API 工作正常并正确发送数据,但我在 Postman 和我的浏览器上都进行了检查。如何解决这个问题?

页面崩溃了,我用谷歌搜索了一下并添加了条件渲染来阻止它崩溃。但是仍然无法解决获取数据和映射的问题。

这是无法正常工作的页面的代码:

import React, { Component } from "react";
import fetch from "isomorphic-unfetch";

export default class extends Component {
static async getInitialProps() {
const res = await fetch("https://linktoapi/path");
const studentData = await res.json();
return studentData;
}
componentWillMount() {
this.setState({
studentData: this.props.studentData
});
}

render() {
return (
<table className="table is-striped is-fullwidth has-text-centered">
<thead>
<tr>
<th>Name</th>
<th>Class</th>
<th>Section</th>
<th>Batch</th>
<th>Contact No.</th>
</tr>
</thead>
<tbody>
{this.state.studentData && this.state.studentData.map(studentDataRow => (
<tr id={studentDataRow._id}>
<td>{studentDataRow.name}</td>
<td>{studentDataRow.class}</td>
<td>{studentDataRow.section}</td>
<td>{studentDataRow.batch}</td>
<td>{studentDataRow.contact_no}</td>
</tr>
))}
</tbody>
</table>
);
}
}

这是来自 API 的数据:

[{"_id":"5d0cd67416c3a60017608a48","type":"student","name":"Samnan","contact_no":"9999","class":"123","section":"av","batch":"2002","__v":0},
{"_id":"5d0d1a7bfe72ac001775d778","type":"student","name":"as","contact_no":"0","class":"d","section":"r","batch":"a","__v":0},
{"_id":"5d0d1b24fe72ac001775d779","type":"student","name":"ab","contact_no":"0","class":"d","section":"afrgr","batch":"adsda","__v":0},
{"_id":"5d0d1b58259c5d6cd69acf3b","type":"student","name":"akash","contact_no":"567","class":"23","section":"h","batch":"2012","__v":0},
{"_id":"5d0ea1eb91eac20017f36739","type":"student","name":"as","contact_no":"08109209","class":"v","section":"qere","batch":"re","__v":0}]

要在本地重现此问题:

git clone https://github.com/Geektrovert/EduSys.git && cd EduSys
npm i
npm run dev

然后转到http://localhost:3000/students

最佳答案

我改变了一些东西让它运行。 getInitialProps 似乎没有被调用。我将您的 API 调用移至 componentDidMount 并使用状态来存储学生数据。

import React, { Component } from "react";
import fetch from "isomorphic-unfetch";

export default class extends Component {

constructor(props) {
super(props);

this.state = {
studentData: []
};
}

async componentDidMount() {
const res = await fetch("https://edusys-yas.herokuapp.com/api/students");
const studentData = await res.json();

this.setState({ studentData });
}
render() {
return (
<table className="table is-striped is-narrow is-fullwidth">
<thead>
<tr>
<th>Name</th>
<th>Class</th>
<th>Section</th>
<th>Batch</th>
<th>Contact No.</th>
</tr>
</thead>
<tbody>
{this.state.studentData.map(studentDataRow => (
<tr>
<td>{studentDataRow.name}</td>
<td>{studentDataRow.class}</td>
<td>{studentDataRow.section}</td>
<td>{studentDataRow.batch}</td>
<td>{studentDataRow.contact_no}</td>
</tr>
))}
</tbody>
</table>
);
}
}

result

关于javascript - 如何在 JavaScript 中修复未定义的 "TypeError: Cannot read property ' 映射'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56725377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com