Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检索数据时重新呈现组件_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 检索数据时重新呈现组件

Javascript 检索数据时重新呈现组件,javascript,reactjs,react-native,Javascript,Reactjs,React Native,当我从firebase获取数据时,请求仍在运行,并且数据仍在控制台中运行,我不知道为什么它没有停止 我使用了清理功能,中止控制器,但它不起作用 这是我的密码 我希望你能帮助我 const [fetchedPhoto, setFetchedPhoto]= useState({ imagUrl:[] }) const retrieveImg= useCallback(async() => { try{ const url=[] const d

当我从firebase获取数据时,请求仍在运行,并且数据仍在控制台中运行,我不知道为什么它没有停止 我使用了清理功能,中止控制器,但它不起作用 这是我的密码

我希望你能帮助我

const [fetchedPhoto, setFetchedPhoto]= useState({
    imagUrl:[]
})

const retrieveImg= useCallback(async() => { 
    try{
        const url=[]
        const data= await fetch('https://naif-65aa6.firebaseio.com/test-project.json',{signal:controller.signal})
        const response= await data.json()
        
        for(const key in response){
            url.push({
                id: key,
                name: response[key].name,
                phone: response[key].phone
            })
        }

        setFetchedPhoto(prevState=>({
            ...prevState,
            imagUrl: prevState.imagUrl.concat(url)
        }))

        console.log(fetchedPhoto.imagUrl);

     } catch(err) {
         console.log(err);
     }
},[fetchedPhoto])

useEffect(()=>{
    retrieveImg()
           
    return()=>controller.abort()
},[fetchedPhoto])

期望的结果是什么?setState仍然一次又一次地添加获取的数据,如果获取的数据是一个包含3个索引的对象,它将复制为无限循环。传递dep list的方式基本上确保获得无限循环。那么告诉我们期望的行为是什么?我只想检索一次数据,当推送新数据时,函数会检索它,就像我添加一些东西时firebase realTimeDatabase会检索它一样,我希望你能理解我的意思,只需将一个空数组作为dep-list传递。期望的结果是什么?setState仍然会一次又一次地添加获取的数据,如果获取的数据是一个包含3个索引的对象,它会将其复制为无限循环。传递dep-list的方式基本上确保了获得无限循环。那么,告诉我们期望的行为是什么?我只想检索一次数据,当推送新数据时,函数检索它,就像firebase realTimeDatabase,当我添加一些东西时,它将检索它,我希望您理解我的意思,只需将空数组作为dep列表传递。