我正在尝试使用Axios在React App中显示来自我的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调用时,它返回响应,但只是一个承诺。
当我尝试通过响应映射时,出现“无法读取未定义的属性映射”
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>
);
}
答案 0 :(得分:1)
像这样重写它:
getQuestions(title) {
const url = `${API_URL}/api/questions/?title=${title}`;
let data;
axios.get(url).then(response => {data = response.data});
return data
}
当您调用reviewAPI.getQuestions()时,您将获得的只是返回的数据;
答案 1 :(得分:0)
您需要先等待诺言,然后才能映射到项目上。
在功能组件中,您需要执行以下操作:
const questions = () => {
const [questions, setQuestions] = useState([]);
useEffect(async () => {
const res= await reviewAPI.getQuestions();
setQuestions(res.data);
}, []);
return
<Questions
response={questions}
setData={setData}
formData={formData}/>
}