问题描述
我有这段代码,用于获取数据并将其传递给组件。这个子组件然后呈现我制作的数据,以便当用户从顶部下拉时,组件将刷新但每当我刷新 first time only
时,我都会收到错误
Warning: Can't perform a React state update on an unmounted component. This is a no-op,but it indicates a memory leak in your application. To fix,cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
代码如下:
function FolloweringScreens({
data,screen,username,navigation,noMoreData,setLoadingMore,lastVisible,setNoMoreData,setLastVisible,setfollowingData,loadingMore,setLoading,currentuser,}) {
const [stateData,setStateData] = useState();
const [refresh,setRefresh] = useState(false);
useEffect(() => {
const setState = () => setStateData(data);
return setState();
},[data,refresh]);
// Refresh
const handleFetch = () => {
setRefresh(true);
const cleanup = fetchData(
username,setRefresh,);
return cleanup;
};
return (
<>
<FlatList
refreshing={refresh}
onRefresh={handleFetch}
data={stateData}
keyExtractor={(i,index) => index.toString()}
renderItem={({item,index}) => {
return (
<>
{ Using my data here }
</>
);
}}
/>
</>
);
}
export default FolloweringScreens;
这里是 fetchData 函数:
export const fetchData = (
username,) => {
const dataaRef = firestore().collection('usernames');
setNoMoreData && setNoMoreData(false);
// If in
dataaRef // Go to whichever users clicked on data
.doc(username.toLowerCase())
.collection(screen) // Go to followers/following
.orderBy('followedAt')
.limit(6)
.get()
.then((snapshot) => {
setLoading(true);
snapshot.empty
? null
: setLastVisible(
snapshot.docs[snapshot.docs.length - 1].data().followedAt,);
let promises = [];
// 1b. For each document,return that document data
snapshot.forEach((doc) => {
const data = doc.data();
promises.push(
data.path.get().then((res) => {
const userData = res.data();
// Go to logged in users directory to see
// if they are following these users in this
// users following/followers page so we can
// differentiate whether to display follow/unfollow button
return dataaRef
.doc(
currentuser === undefined
? username.toLowerCase()
: currentuser.toLowerCase(),)
.collection('Following')
.doc(doc.id)
.get()
.then((searchedDocs) => {
return {
profileName: doc.id ? doc.id : null,displayName: userData.displayName
? userData.displayName
: null,followerCount:
userData.followers !== undefined ? userData.followers : 0,followingCount:
userData.following !== undefined ? userData.following : 0,imageUrl: userData.imageUrl ? userData.imageUrl : null,isFollowed: searchedDocs.exists ? true : false,};
});
}),);
});
// 1c. set All document data to followingData
Promise.all(promises).then((res) => {
setfollowingData(res);
// console.log('res',res);
});
setLoading(false);
setRefresh && setRefresh(false);
});
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)