【问题标题】:Failed to get API result value called from external js file ( React )无法获取从外部 js 文件(React)调用的 API 结果值
【发布时间】:2022-08-13 00:55:15
【问题描述】:

我从外部 js 文件进行了 api 调用并导入该文件以获取结果。

API调用成功,但是没有从外部js文件收到结果值。

如何获取我从外部 js 文件中调用的 API 数据?

我将在下面显示我的代码。

ConcertForm.js(导入外部js文件的地方)

import React,{useState,useEffect} from \'react\';
import Form from \'react-bootstrap/Form\';
import StoreData from \'../../common/container/StoreData\';
import DatePicker from \"react-datepicker\";
import \"react-datepicker/dist/react-datepicker.css\";
import { getKpopList } from \'../container/GetKpopList\'; //external js file

function ConcertForm(props){
    
    const [kpop,setKpop] = useState();

    useEffect(() => {  //the place that I will call external js file to call api
        let kpopList;
        const fetchData = async() =>{

            console.log(\"가즈아\");
            kpopList = await getKpopList();
            console.log(\"kpop list : \"+kpopList);
        }
        fetchData();
    });

    const [starName,setStar] = useState(\"\");
    const [name,setName] = useState(\"\");
    const [explain,setExp] = useState(\"\");
    const [file,setFile] = useState(\"\");
    const [startDate, setStartDate] = useState(\"\");
    const [endDate, setEndDate] = useState(\"\");
    const [lat, setLat] = useState(\"\");
    const [lng, setLng] = useState(\"\");

    const [starDis,setStarDis] = useState(false);
    const [nameDis, setNameDis] = useState(false);
    const [expDis, setExpDis] = useState(false);
    const [fileDis, setFileDis] = useState(false);
    const [sdDis, setSdDis] = useState(false);
    const [edDis, setEdDis] = useState(false);
    const [latDis, setLatDis] = useState(false);
    const [lngDis, setLngDis] = useState(false);



    const formValue = {
        name : name,
        explain : explain,
        startDate : startDate,
        endDate : endDate,
        startName : starName,
        lat : lat,
        lng : lng
    }

    const sendData = {
        formValue : formValue,
        file : file,
        dataType : \'notplace\' //장소추가인지 아닌지 확인하기 위해
    }
 
    const changedLat = (e) => {
        const check = e.target.value;
        if(check != \"\"){
            setLatDis(true);
        }else{
            setLatDis(false);
        }
        setLat(check);
    }

    const changedLng = (e) => {
        const check = e.target.value;
        if(check != \"\"){
            setLngDis(true);
        }else{
            setLngDis(false);
        }
        setLng(check);
    }

    const changedStar = (e) => {
        const check = e.target.value
        if(check != \"\"){
            setStarDis(true);
        }else{
            setStarDis(false);
        }
        setStar(e.target.value);
    }

    const changedName = (e) => {
        const check = e.target.value
        if(check != \"\"){
            setNameDis(true);
        }else{
            setNameDis(false);
        }
        setName(e.target.value);
    }

    const changedExp = (e) => {
        const check = e.target.value
        if(check != \"\"){
            setExpDis(true);
        }else{
            setExpDis(false);
        }
        setExp(e.target.value);
    }

    const changedSd = (date) => {
        let check = date
        if(date.getDate() < new Date().getDate()){
            alert(\"이미 지난 콘서트는 등록할수 없습니다.\");
            setStartDate();
            check=\"\";
        }else if(endDate>startDate){
            alert(\"콘서트 시작 날짜를 다시 확인해주세요.\");
            setStartDate();
            check=\"\";
        }else{
            setStartDate(date); 
        }

        if(check != \"\"){
            setSdDis(true);
        }else{
            setSdDis(false);
        }
    }
    const changedEd = (date) => {
        let check = date;
        if(date.getDate() < new Date().getDate()){
            alert(\"이미 지난 콘서트는 등록할수 없습니다.\");
            setEndDate();
            check=\"\";
        }else if(date<startDate){
            alert(\"콘서트 끝나는 날짜를 다시 확인해주세요.\");
            setEndDate(\"\");
            check=\"\";
        }else{
           setEndDate(date); 
        }

        if(check != \"\"){
            setEdDis(true);
        }else{
            setEdDis(false);
        }
    }
    const changedFile = (e) => {
        const check = e.target.value;
        if(check != \"\"){
            setFileDis(true);
        }else{
            setFileDis(false);
        }
        setFile(e.target.files[0]);
    }

    return(
        <Form>
            <Form.Group className=\"mb-3\" controlId=\"formName\">
                <Form.Label id=\"label1\">가수(그룹)명</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: starDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <Form.Control style={{width:\'30%\'}} onChange={changedStar}/> {/*onChage됐을때 useState를 통해서 변수 값을 변경함*/}
            </Form.Group>            

            <Form.Group className=\"mb-3\" controlId=\"formName\">
                <Form.Label id=\"label1\">{props.label} 이름</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: nameDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <Form.Control style={{width:\'30%\'}} onChange={changedName}/> {/*onChage됐을때 useState를 통해서 변수 값을 변경함*/}
            </Form.Group>

            <Form.Group className=\"mb-3\" controlId=\"formDec\">
                <Form.Label>{props.label} 설명</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: expDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <Form.Control style={{width : \'30%\'}} as=\"textarea\" rows={3} onChange={changedExp}/>
            </Form.Group>
            <Form.Group className=\"mb-3\" controlId=\"formDec\">
                <Form.Label>{props.label} 위도</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: latDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <Form.Control style={{width : \'30%\'}} onChange={changedLat}/>
            </Form.Group>
            <Form.Group className=\"mb-3\" controlId=\"formDec\">
                <Form.Label>{props.label} 경도</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: lngDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <Form.Control style={{width : \'30%\'}} onChange={changedLng}/>
            </Form.Group>
            <Form.Group>
                <Form.Label>{props.label} 시작 일정</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: sdDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <DatePicker selected={startDate} onChange={changedSd} />
                <Form.Label>{props.label} 끝나는 일정</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: edDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <DatePicker selected={endDate} onChange={changedEd} />
            </Form.Group>
            <br/>
            <Form.Group controlId=\"formFile\" className=\"mb-3\">
                <Form.Label>{props.label} 사진</Form.Label>
                <div id=\"nameCheck\"style={{color : \'red\',fontSize:\'20px\', display: fileDis ? \'none\' : \'inline-block\', marginLeft:\'10px\', alignItems:\'center\'}}>*</div>
                <Form.Control style={{width : \'30%\'}} type=\"file\" onChange={changedFile}/>
            </Form.Group>
            {/*API 호출을 담당할 Container Component 호출*/}
            <StoreData disabled={(starDis&&nameDis&&expDis&&sdDis&&edDis&&fileDis&&latDis&&lngDis)} sendData={sendData}></StoreData>
      </Form>
    );
}
export default ConcertForm;

GetList.js(调用api的外部js文件)

export function getList(setKpop) {
    let list;
    axios.get(\'/celebrities\')
    .then(function(res){
        console.log(res.data);
        return res.data;
    })
    .catch(function(error){
        console.log(error);
        alert(\"서버 통신 실패\");
    });
}

    标签: javascript reactjs


    【解决方案1】:

    您的 getList 函数应如下所示:

    export async function getList(setKpop) {
        let list;
       return await axios.get('/celebrities')
        .then(function(res){
            console.log(res.data);
            return res.data;
        })
        .catch(function(error){
            console.log(error);
            alert("서버 통신 실패");
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2021-06-27
      • 2019-07-02
      相关资源
      最近更新 更多