【发布时间】:2019-11-16 19:29:47
【问题描述】:
我想要一个事件监听器,当用户到达屏幕时触发一个事件。在这种情况下,事件是尝试检索令牌,如果不存在,则打开模式。
我遇到的问题是侦听器在用户第一次到达屏幕时不会触发任何事件,而只会在第二次触发。第一次,useEffect 不会运行以显示“Listener is run”,也不会检索令牌。
useEffect(() => {
const focusListener = props.navigation.addListener('didFocus', () => {
console.log("Listener is run")
retrieveToken()
})
return () => {
focusListener.remove()
}
}, [])
const retrieveToken = async () => {
try {
const token = await AsyncStorage.getItem(LOGIN_TOKEN)
console.log("token", token)
if(!token) {
console.log("Modal is run")
authModalOpen()
}
} catch (err) {
throw new Error(err)
}
}
我尝试将didFocus 更改为willFocus,但仍然无法正常工作。
【问题讨论】:
-
你为什么不检查 componentdidmount 并且每次他们来到那个屏幕时,检查令牌是否存在并根据它运行你的模式。
标签: javascript reactjs react-native react-navigation addeventlistener