reactjs 当用户看到特定屏幕时触发分析事件

lbsnaicq  于 2023-02-18  发布在  React
关注(0)|答案(1)|浏览(110)

说明

我有一个应用程序,应该触发一个分析事件,只有一次在特定的屏幕上,当一个组件显示给用户。即:如果用户打开应用程序并进入主屏幕且组件显示,则应发送分析事件。如果用户导航至设置屏幕且组件在那里,则应触发事件,但如果用户导航回主屏幕,则不应触发事件。每个屏幕只需调用一次。
如果用户完全退出应用程序,则重新打开应用程序后应再次激发该事件

堆叠

  • 天然 reactjs
  • React导航
  • React还原

"我所做的"
我曾尝试将useIsFocused钩子与useEffectuseRef一起使用,但当屏幕为异步获取事件重新呈现时,useEffect内的状态被重置,分析事件再次触发,这不是预期的行为。

const isHasBeenFocused = useRef()

const isFocused = useIsFocused()

useEffect(()=>{

if(isHasBeenFocused.current){

    return;

}

isFocused && dispatch(analyticsEvent, payload)

isHasBeenFocused.current = isFocused

}, [])

这是我的方法,但我不知道这是否正确,或者是否有另一个更好的选择。
希望有人能帮我这个忙。

e4yzc0pl

e4yzc0pl1#

如果您希望分析事件在应用安装的生命周期内只触发一次,可以使用AsyncStorage作为标记,如下图所示。AsyncStorage曾经是核心RN模块,但现在是基于社区的。
这将持续到卸载应用程序。

useEffect(() => {
    const check = async () => {
      const hasReported = await AsyncStorage.getItem('yourKey');
      if (hasReported) return;
      AsyncStorage.setItem('yourKey', true);
      dispatch(analyticsEvent, payload);
    };
    check();
  }, []);

如果您希望每个会话触发一次分析,可以使用相同的解决方案,并在应用后台设置时使用AppState侦听器将值重置为错误值。
如果您需要在应用安装过程中保持价值,最好的解决方案是将其存储在后端。

相关问题