【发布时间】:2020-03-05 23:43:22
【问题描述】:
我正在尝试从后端获取 json 来填充前端的表格。什么都没有加载,并且在反应调试工具中它说 table prop 是空的。
我已将异步添加到正在执行提取的函数中,但它似乎仍然在完成之前将 json 传递给道具(不完全确定)。
编辑:代码中缺少行,因为我删除了不相关的内容
在 app.js 中
import React, { Component } from 'react'
import Table from './Table'
class App extends Component {
render() {
const repos = getGitHubRepos()
return (
<div className="container">
<Table repoData={repos} />
</div>
)
}
}
async function getGitHubRepos() {
const response = await fetch('valid url i'm hiding')
return await response.json()
}
export default App
在 table.js 中
import React, { Component } from 'react'
class Table extends Component {
render() {
const { repoData } = this.props
return (
<table>
<TableHeader />
<TableBody repoData={repoData} />
</table>
)
}
}
const TableBody = props => {
const rows = props.repoData.map((row, index) => {
return (
<tr key={index}>
<td>{row.name}</td>
<td>{row.lang}</td>
</tr>
)
})
return <tbody>{rows}</tbody>
}
export default Table
我希望输出将 json 的每一位映射到表中,但它没有这样做,因为当它到达 table.js 时 prop 是空的
【问题讨论】:
-
它不应该是“空的”。
async函数总是返回一个承诺。repoData应该是一个承诺。 -
每个
async函数都应该使用await调用。没有它,你打电话给const repos = getGitHubRepos()。此外,每个await都应该在async函数中 -
将函数设置为
async并在内部使用await只会使函数内部的执行等待解析,它不会阻止外部代码的执行
标签: javascript node.js reactjs promise fetch