说明
我有一个应用程序,应该触发一个分析事件,只有一次在特定的屏幕上,当一个组件显示给用户。即:如果用户打开应用程序并进入主屏幕且组件显示,则应发送分析事件。如果用户导航至设置屏幕且组件在那里,则应触发事件,但如果用户导航回主屏幕,则不应触发事件。每个屏幕只需调用一次。
如果用户完全退出应用程序,则重新打开应用程序后应再次激发该事件
堆叠
- 天然 reactjs
- React导航
- React还原
"我所做的"
我曾尝试将useIsFocused
钩子与useEffect
和useRef
一起使用,但当屏幕为异步获取事件重新呈现时,useEffect内的状态被重置,分析事件再次触发,这不是预期的行为。
const isHasBeenFocused = useRef()
const isFocused = useIsFocused()
useEffect(()=>{
if(isHasBeenFocused.current){
return;
}
isFocused && dispatch(analyticsEvent, payload)
isHasBeenFocused.current = isFocused
}, [])
这是我的方法,但我不知道这是否正确,或者是否有另一个更好的选择。
希望有人能帮我这个忙。
1条答案
按热度按时间e4yzc0pl1#
如果您希望分析事件在应用安装的生命周期内只触发一次,可以使用AsyncStorage作为标记,如下图所示。AsyncStorage曾经是核心RN模块,但现在是基于社区的。
这将持续到卸载应用程序。
如果您希望每个会话触发一次分析,可以使用相同的解决方案,并在应用后台设置时使用AppState侦听器将值重置为错误值。
如果您需要在应用安装过程中保持价值,最好的解决方案是将其存储在后端。