【发布时间】:2020-07-16 17:11:24
【问题描述】:
我正在尝试在带有 Axios 的 React 应用程序中显示来自我的 API 的数据。
我创建了一个连接到 REST API 的简单方法。
import axios from 'axios';
const API_URL = 'http://127.0.0.1:8888';
export default class ReviewAPI{
getQuestions(title) {
const url = `${API_URL}/api/questions/?title=${title}`;
return axios.get(url).then(response => response.data);
}
}
当我调用 API 时,它会返回响应但作为 Promise。
当我尝试映射响应时,我得到“无法读取未定义的属性映射”
export default function Questions({ response, setData, formData}) {
return (
<Card className="m-3">
<Card.Header>{response.description}</Card.Header>
<Card.Body>
{ response.questions.map((question, idx) => {
switch (question.type) {
case "text": return <FormText key={idx} question={question} setData={setData} formData={formData}/>;
case "textarea": return <FormTextArea key={idx} question={question} setData={setData} formData={formData}/>;
case "radio": return <RadioGroup key={idx} question={question} setData={setData} formData={formData}/>;
case "multiselect": return <MultiSelect key={idx} question={question} setData={setData} formData={formData}/>;
default: return [];
}
})}
</Card.Body>
</Card>
);
}
【问题讨论】:
-
这意味着 response.questions 不是一个数组。您如何将响应传递给问题功能?
-
另外,如果 response 是 Promise,你不需要使用
.then来获取内部值吗?我也不确定您是否从原始函数中正确返回了值,因为我认为您需要在 return 语句 (stackoverflow.com/questions/42831393/…) 的回调中使用return。 -
我通过调用这样的方法传递响应
<Questions response={reviewAPI.getQuestions()} setData={setData} formData={formData}/> -
我按照你的建议做了,结果还是一样...
<Questions response={reviewAPI.getQuestions().then(function(value){return value})} setData={setData} formData={formData}/> -
@ssk,我的意思是你应该把
return axios.get(url).then(response => return response.data)这样的回报与@Ahmed 的回答结合起来。
标签: javascript reactjs axios