过期关闭问题反应本机AppState



我有一个react原生组件,我想检查范围状态中的特定值是否为"true",然后做一些事情,但它总是在回调函数中读取旧状态。

const [scope, seScope] = useState({
isInScope: false,
loading: true,
isGranted: false,
})
const stateHandler = useCallback((state) => {
if (state === 'active') {
// it's always false not matter
if (!scope.isGranted) {
makeLocationPermission()
}
}
}, [scope])
console.log(scope.isGranted)
// in here isGranted is true
useEffect(() => {
makeIsGrantedTrue()
AppState.addEventListener('change', stateHandler)
return () => {
AppState.removeEventListener('change', stateHandler)
}
}, []) 

好的,我只需要在使用效果依赖项上加上"scope"就可以解决这个问题。我不知道为什么?!它必须是useCallback依赖项。

useEffect(() => {
makeIsGrantedTrue()
AppState.addEventListener('change', stateHandler)
return () => {
AppState.removeEventListener('change', stateHandler)
}
}, [scope])

相关内容

最新更新