简体   繁体   English

如何在反应中获取大型 API 数据并将请求发送回服务器?

[英]How to fetch large API data in react and send back request to server?

Let me explain what I want to achieve?让我解释一下我想要实现的目标?

  • This is the fetched data to get the image links and save it to setImageLinkData state which is over 100,000 links这是获取图像链接并将其保存到超过 100,000 个链接的setImageLinkData状态的获取数据在此处输入图像描述
  • Since, I want to do something after the imageLinkData state is updated so, I use the useEffect hook to do it因为,我想在imageLinkData状态更新后做一些事情,所以我使用 useEffect 钩子来做
const [ imageLinkData, setImageLinkData ] = useState([]);
const [ imageLink, setImageLink ] = useState([]);
const [ additionalImageLink, setAdditionalImageLink ] = useState([]);

useEffect(() => {
        const checkLink = async () => {
            if (imageLinkData.length > 0) {
                checkMainImage(imageLinkData, (resultImg) => setImageLink(resultImg)); // test main image link
                checkAdditionalImage(imageLinkData, (resultImg) => setAdditionalImageLink(resultImg)); // test additional image link
                const response = await getSuggList();
            }
        }
        checkLink();
    }, [imageLinkData])

  • I tested the link if the image exists with the two function one for imageLink and another for additionalImageLink如果图像存在,我测试了链接,两个函数一个用于imageLink ,另一个用于附加ImageLink
  • After I test the link I get validated links from the callback function and save it to setImageLink and setAdditionalImageLink state respectively.在我测试链接后,我从回调函数中获得了经过验证的链接,并将其分别保存到setImageLinksetAdditionalImageLink状态。
 const checkMainImage = (linkArray, callback) => {
        linkArray.map(element => {
            const img = new Image();
            img.src = element.imageLink;
            img.onload = () => {
                setImageLink(element.imageLink);
                callback(element.imageLink);
            };
            img.onerror = () => {
                callback('donot');
            };
        });
    }
const checkAdditionalImage = (linkArray, callback) => {
        linkArray.map(element => {
            element.additionalImageLink.map(addImage => {
                const img = new Image();
                img.src = addImage;
                img.onload = () => {
                    return callback(addImage);
                };
                img.onerror = () => {
                    return callback('donot');
                };
            })
        });
    }
  • So, what happening in my code next is when I try to access the imageLink state(not from the json data) and additionalImageLink state(not from the json data) I only get one or two value因此,接下来在我的代码中发生的事情是,当我尝试访问imageLink状态(不是来自 json 数据)和AdditionalImageLink状态(不是来自 json 数据)时,我只得到一两个值
useEffect(() => {
        // if (imageLink.length > 0 || additionalImageLink.length > 0)
            console.log(imageLink);
    }, [imageLink])
  • The result结果

在此处输入图像描述

checkMainImage(imageLinkData, (resultImg) => setImageLink(resultImg)); // test main image link
checkAdditionalImage(imageLinkData, (resultImg) => setAdditionalImageLink(resultImg)); // test additional image link

In this setImageLink(resultImg) and setAdditionalImageLink(resultImg) , you are setting only the last value that is available in the json data.在此setImageLink(resultImg)setAdditionalImageLink(resultImg)中,您仅设置 json 数据中可用的最后一个值。

Shouldn't it be pushing the value to the imageLink and additionalImageLink array?它不应该将值推送到imageLinkadditionalImageLink数组吗?

Like setImageLink([...imageLink, resultImg]) ?setImageLink([...imageLink, resultImg])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM