Axios未捕获的TypeError:无法读取未定义的属性“映射”

时间:2020-04-04 15:27:47

标签: javascript reactjs axios

我正在尝试使用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调用时,它返回响应,但只是一个承诺。

enter image description here

当我尝试通过响应映射时,出现“无法读取未定义的属性映射”

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>
);

}

2 个答案:

答案 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}/>
}