我使用API侦听器在应用从后台进入活动状态时运行一个函数。我在useEffect清理时删除了它,但它仍然在其他屏幕上被调用,就像它从未被清理过一样。
const MyRoute = ({ navigation, route }) => {
const appStateRef = useRef(AppState.currentState);
useEffect(() => {
getUserData();
function updateRouteData(nextAppState) {
if (appStateRef.current.match(/inactive|background/) && nextAppState === 'active') {
getRoutes(); // <--
}
appStateRef.current = nextAppState;
}
AppState.addEventListener('change', updateRouteData);
return () => {
AppState.removeEventListener('change', updateRouteData);
};
}, []);
// ...
}
AppState事件侦听器将保留在其他屏幕上。
react-native:“0.64.4”
2条答案
按热度按时间ki0zmccv1#
获取变量中的事件侦听器,然后将其删除。
z31licg02#
我找到解决办法了
我没有在useEffect中调用appstate逻辑,而是在react导航中使用useFocusEffect调用它。当离开屏幕时,您可以触发一个清除函数来删除监听器。
我创建了一个自定义钩子来在我的应用程序上使用它。