今天做rn的时候发现一个问题,当页面在tab navigator上的时候如果从桌面返回应用的时候页面不会更新,导致了一个奇怪的问题:当应用过夜之后再使用的话页面会保留以前的组件状态,这样对于时间敏感的组件将把昨天的内容却显示到今天去。
然后rn官方提供了AppState这样一个属性让我们可以判断当前应用的状态是否在前台,于是乎我便照着官网的事例使用addEventListener及removeEventListner事件;但在这里却报removeEventListner已移除。如果不移除监听事件的话就会导致应用在每次挂载页面的时候会出现多个监听进程,后续容易出现一些更严重的问题。
useEffect(() => {
//监听事件,并保证全局只有一个监听进程。
const eventListener = AppState.addEventListener('change', handleChange);
return () => eventListener.remove();
}, [])
这样便可以在每次页面清除挂载的时候清除监听进程。