Javascript Axios未捕获类型错误:无法读取属性';地图';未定义的

Javascript Axios未捕获类型错误:无法读取属性';地图';未定义的,javascript,reactjs,axios,Javascript,Reactjs,Axios,我正试图用Axios在React应用程序中显示API中的数据 我创建了一个连接到RESTAPI的简单方法 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}`;

我正试图用Axios在React应用程序中显示API中的数据

我创建了一个连接到RESTAPI的简单方法

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

}
导出默认函数问题({response,setData,formData}){
返回(
{response.description}
{response.questions.map((问题,idx)=>{
开关(问题类型){
案例“文本”:返回;
案例“textarea”:返回;
案例“无线电”:返回;
“多选”案例:返回;
默认值:返回[];
}
})}
);
}

您需要等待承诺,然后才能映射项目

在功能组件中,您需要执行以下操作:

const questions = () => {
  const [questions, setQuestions] = useState([]);

  useEffect(async () => {
       const res= await reviewAPI.getQuestions();

       setQuestions(res.data);
   }, []);

   return 
      <Questions 
         response={questions} 
         setData={setData} 
         formData={formData}/>
}
const questions=()=>{
const[questions,setQuestions]=useState([]);
useffect(异步()=>{
const res=wait reviewAPI.getQuestions();
设置问题(res.data);
}, []);
返回
}
像这样重写它:

getQuestions(title) {
            const url = `${API_URL}/api/questions/?title=${title}`;
            let data;
             axios.get(url).then(response => {data = response.data});
           return data
        }

调用reviewAPI.getQuestions()时,只会得到返回的数据

这意味着回答。问题不是数组。您如何将响应传递给提问函数?另外,如果响应是一个承诺,您是否需要使用
。然后
获取内部值?我还不确定您是否正确地从原始函数返回了值,因为我认为您需要在return语句()中的回调中使用一个
return
。我按照您的建议调用了
这样的方法来传递响应,但仍然得到了相同的结果
@ssk,我的意思是你应该像
return axios.get(url)那样放置返回,然后(response=>return response.data)
结合@Ahmed的答案中所做的事情。我像这样重写了我的函数
异步getQuestions(title){const url=`${API\u url}/API/questions/?title=${title}`;const response=await axios.get(url);return response.data;}
如果我在返回之前执行console.log,它似乎只是数据,但是调用函数时它仍然返回一个承诺。在调用getQuestions时放置一个wait,如下面的
wait getQuestions(“title”)