#react-native #memory-leaks #use-effect #react-native-firebase #react-functional-component
#реагировать-родной #утечки памяти #использование-эффект #react-native-firebase #реагирующий-функциональный-компонент
Вопрос:
useEffect(() => {
auth().onAuthStateChanged(user => {
if (user) {
const useruid = auth().currentUser.uid
const subscriber = firestore()
.collection('dailyusage')
.doc(useruid)
.collection('dailyusage')
.onSnapshot(documentSnapshot => {
getReminderlist(numberofitemstoload, false)
});
return () => subscriber();
}
})
}, []);
Привет, я использую эту функцию, и это указывает на утечку памяти, поэтому я не могу понять, как использовать эту функцию, чтобы она не приводила к утечке памяти. Итак, дайте мне знать, как я могу предотвратить утечку памяти в этом.
Ошибка, которую я получаю
Невозможно выполнить обновление состояния реакции для размонтированного компонента. Это ошибка, но она указывает на утечку памяти в вашем приложении. Чтобы исправить это, отмените все подписки и асинхронные задачи в функции очистки useEffect.
Комментарии:
1. Ошибка может быть в методах getReminderlist, поскольку вы можете сохранить состояние в этом методе.
2. @Jigneshmayani что вы предпочитаете для ее решения.
3. Можете ли вы показать код метода getReminderlist, чтобы я мог глубоко погрузиться в это и попытаться вам помочь?
Ответ №1:
При использовании useEffect вы можете вернуть функцию, которая будет запущена при очистке. Итак, в вашем случае вам понадобится что-то вроде этого:
useEffect(() => {
const unsubscribe = auth().onAuthStateChanged(user => {
if (user) {
const useruid = auth().currentUser.uid
const subscriber = firestore()
.collection('dailyusage')
.doc(useruid)
.collection('dailyusage')
.onSnapshot(documentSnapshot => {
getReminderlist(numberofitemstoload, false)
});
return () => subscriber();
}
})
//below is cleanup function
return () => unsubscribe();
}, []);
Это может вам помочь.