Vue 3 + Vuex 埋点实现指南

news2024/11/30 12:23:57

在现代前端开发中,数据分析和用户行为追踪是不可或缺的部分。本文将介绍如何在 Vue 3 项目中实现埋点功能,具体使用 Vuex 进行状态管理,并通过自定义 Hook 实现埋点逻辑。

目录

  1. 项目结构
  2. 实现埋点逻辑
  3. 使用埋点功能
  4. 总结

1.项目结构

我们将创建一个 xesAnalyticsHook 目录,包含一个 index.js 文件,用于实现埋点逻辑。每个具体的埋点逻辑将分模块存放在单独的文件中,例如 classPlan.jsstudyPlan.js 等。

src/
├── hooks/
│   └── xesAnalyticsHook/
│       ├── index.js
│       ├── classPlan.js
│       ├── studyPlan.js
│       └── ...

2.实现埋点逻辑

2.1index.js文件

index.js 文件是整个埋点逻辑的核心。它负责从 Vue 实例中获取全局属性 $xesAnalytics,并提供一系列封装好的埋点方法。

import { getCurrentInstance } from 'vue'
import { useStore } from 'vuex'
import { createClassPlanAnalytics } from './classPlan'
import { createStudyPlanAnalytics } from './studyPlan'
// ... 其他模块的导入

/**
 * 自定义 Hook,用于封装埋点逻辑
 */
export function useXesAnalytics() {
  // 获取当前 Vue 实例
  const instance = getCurrentInstance()
  // 获取全局属性
  const globalProperties = instance?.appContext?.config?.globalProperties
  // 获取全局埋点对象
  const analytics = globalProperties?.$xesAnalytics

  // 获取 Vuex store
  const store = useStore()
  // 获取教师 ID 和学校 ID
  const teacherId = store?.state?.userDetail?.id
  const schoolId = store?.state?.userDetail?.school?.id

  /**
   * 封装的点击事件埋点方法
   * @param {string} eventId - 事件 ID
   * @param {object} properties - 事件属性
   * @param {function} callback - 回调函数
   */
  function trackClick(eventId, properties = {}, callback) {
    analytics.track(eventId, properties, callback)
  }

  /**
   * 封装的页面浏览事件埋点方法
   * @param {string} eventId - 事件 ID
   * @param {object} properties - 事件属性
   * @param {function} callback - 回调函数
   */
  function trackView(eventId, properties = {}, callback) {
    analytics.view(eventId, properties, callback)
  }

  /**
   * 设置用户属性
   * @param {object} profile - 用户属性
   */
  function setProfile(profile) {
    analytics.setProfile(profile)
  }

  /**
   * 注册页面信息
   * @param {object} params - 页面参数
   */
  function registerPage(params) {
    analytics.registerPage(params)
  }

  // 注册页面信息
  registerPage({
    operator_id: teacherId, school_id: schoolId
  })

  // 具体的埋点逻辑
  const ClassPlanAnalytics = createClassPlanAnalytics(trackClick, trackView)
  const studyPlanAnalytics = createStudyPlanAnalytics(trackClick, trackView)
  // ... 其他模块的实例化

  return {
    trackClick,
    trackView,
    setProfile,
    registerPage,
    ...ClassPlanAnalytics,
    ...studyPlanAnalytics,
    // ... 其他模块的方法
  }
}
2.2classPaln.js文件

classPlan.js 文件定义了具体的埋点方法。每个方法对应一个具体的用户行为事件。 

const f = () => {
  // 默认值
}

export function createClassPlanAnalytics(trackClick = f, trackView = f) {
  return {
    trackClassPlanCreatePlanClick() {
      trackClick('click_CuzANHRD')
    },
    trackClassPlanListView() {
      trackView('view_4l5x8Gf9')
    }
  }
}

3.使用埋点功能

在组件中使用埋点功能非常简单。首先导入 useXesAnalytics,然后解构出需要的埋点方法即可。

<template>
  <el-button @click="handelClick"></el-button>
</template>
<script lang="ts" setup>
import { onMounted } from 'vue'
import { useXesAnalytics } from '@/hooks/xesAnalyticsHook/index.js'

const {
  trackClassPlanCreatePlanClick, trackClassPlanListView,
} = useXesAnalytics()

const handelClick = () => {
  trackClassPlanCreatePlanClick()
  // 其他逻辑
}

// 初始化
onMounted(() => {
  trackClassPlanListView()
})
</script>

4.总结

通过本文的介绍,我们实现了一个基于 Vue 3 和 Vuex 的埋点系统。这个系统通过自定义 Hook useXesAnalytics 封装了埋点逻辑,并在组件中方便地调用这些方法。这样不仅提高了代码的可维护性,还使得埋点逻辑更加清晰和模块化。

⚠️具体实现根据实际情况修改即可

希望这篇文章能帮助你更好地理解和实现 Vue 项目中的埋点功能。如果有任何问题或建议,欢迎在评论区留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于深度学习的卷积神经网络十二生肖图像识别系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于深度学习的十二生肖图像识别系统&#xff0c;旨在利用卷积神经网络&#xff08;CNN&#xff09;进行图像分类&#xff0c;特别是十二生肖图像的自动识别。系统的核心采用了两种经典的深度学习模型&#xff1a;ResNet50和VGG16&#xff0c;进行图像的特征提…

kali linux 装 virtual box 增强工具 Guest Addition

kali linux 装 virtual box 增强工具 Guest Addition install Virtual Box Guest Addition in kali linux 搞了一下午&#xff0c;最终发现是白折腾。 kali linux 自带 virtual box 的增强工具。 kali linux 2021.3 之后的版本都是自带virtual box 增强工具 解决方法 直接…

vue3请求接口报错:Cannot read properties of undefined (reading ‘data‘)

文章目录 报错内容解决方案 报错内容 Cannot read properties of undefined (reading ‘data’) 解决方案 响应未按预期返回 确保服务器返回的数据结构符合预期。例如&#xff0c;服务器可能返回了一个错误响应&#xff0c;而不是预期的 JSON 数据。 检查响应 在 response 拦…

RocketMQ rocketmq-tools管理主题

RocketMQ rocketmq-tools管理主题 环境和软件版本增删改查 环境和软件版本 Win10、IDEA、Jdk1.8、rocketmq 5.1.3、rocketmq-tools 5.1.3 引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-tools</artifactId&g…

《datawhale2411组队学习 模型压缩技术7:NNI剪枝》

文章目录 一、NNI简介二、 NNI剪枝快速入门2.1 加载并训练模型2.2 模型剪枝2.3 模型加速&#xff08;剪枝永久化&#xff09;2.4 微调压缩模型2.5 Slim Pruner测试 三、 使用NNI3.0进行Bert压缩&#xff08;剪枝、蒸馏)3.1 数据预处理3.2 训练模型3.3 设置模型蒸馏函数3.4 修剪…

C#学写了一个程序记录日志的方法(Log类)

1.错误和警告信息单独生产文本进行记录&#xff1b; 2.日志到一定内存阈值可以打包压缩&#xff0c;单独存储起来&#xff0c;修改字段MaxLogFileSizeForCompress的值即可&#xff1b; 3.Log类调用举例&#xff1a;Log.Txt(JB.信息,“日志记录内容”,"通道1"); usi…

Java设计模式——职责链模式:解锁高效灵活的请求处理之道

嘿&#xff0c;各位 Java 编程大神和爱好者们&#xff01;今天咱们要一同深入探索一种超厉害的设计模式——职责链模式。它就像一条神奇的“处理链”&#xff0c;能让请求在多个对象之间有条不紊地传递&#xff0c;直到找到最合适的“处理者”。准备好跟我一起揭开它神秘的面纱…

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是&#xff1a;当前操作系统版本为Windows Server 2016 Standard版本&#xff0c;其自带的Microsoft .NET Framework 版本为4.6太低&#xff0c;不满足要求。 根据报错的提示&#xff0c;点击链接…

高德地图 Readme GT 定制版 10.25.0.3249 | 极致简洁

这款定制版高德地图去除了广告&#xff0c;运行速度更快。虽然没有车道级导航、打车功能和红绿灯倒计时等功能&#xff0c;但支持正常登录和收藏功能。检测更新始终为最新版本。 大小&#xff1a;82.5M 下载地址&#xff1a; 百度网盘&#xff1a;https://pan.baidu.com/s/1Y…

Admin.NET框架使用宝塔面板部署步骤

文章目录 Admin.NET框架使用宝塔面板部署步骤&#x1f381;框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 &#x1f381;框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…

Excel中根据某列内容拆分为工作簿

简介&#xff1a;根据A列的内容进行筛选&#xff0c;将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下)&#xff0c;且工作簿名为筛选内容。 举例&#xff1a; 将上面的内容使用VBA会在当前test1下生成5个工作簿&#xff0c;工作簿名分别为TEST1.xls TEST2.xls TEST3…

JavaWeb实战(1)(重点:分页查询、jstl标签与jsp、EL表达式、Bootstrap组件搭建页面、jdbc)

目录 一、jstl标签。 &#xff08;1&#xff09;基本概念。 &#xff08;2&#xff09;使用前提。 &#xff08;3&#xff09;"<%...%>"与"<%%>"。 &#xff08;4&#xff09;使用jstl标签的步骤。 1、导入对应jar包。 2、引入核心标签库。&am…

Linux:makefile的使用

makefile小结&#xff1a; makefile的应用&#xff1a; 一个简单的 Makefile 文件包含一系列的“规则”&#xff0c;其样式如下&#xff1a; 目标(target)…: 依赖(prerequiries)… 命令(command) 目标(target)通常是要生成的文件的名称&#xff0c;可以是可执行文件或OBJ文件…

springboot中使用mongodb完成评论功能

pom文件中引入 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> yml中配置连接 data:mongodb:uri: mongodb://admin:1234561…

TCGA 编码格式解读 | 怎么区分是不是肿瘤样品?

最权威参考资料 https://docs.gdc.cancer.gov/Encyclopedia/pages/TCGA_Barcode/ "-"分割符的第四位是Sample type&#xff1a; Tumor types range from 01 - 09,normal types from 10 - 19and control samples from 20 - 29. See Code Tables Report for a compl…

百度 文心一言 vs 阿里 通义千问 哪个好?

背景介绍&#xff1a; 在当前的人工智能领域&#xff0c;随着大模型技术的快速发展&#xff0c;市场上涌现出了众多的大规模语言模型。然而&#xff0c;由于缺乏统一且权威的评估标准&#xff0c;很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…

【linux学习指南】Linux进程信号产生(二)软件中断

文章目录 &#x1f4dd; 由软件条件产⽣信号&#x1f320; 基本alarm验证-体会IO效率问题&#x1f309;设置重复闹钟 &#x1f320;如何理解软件条件&#x1f309;如何简单快速理解系统闹钟 &#x1f6a9;总结 &#x1f4dd; 由软件条件产⽣信号 SIGPIPE 是⼀种由软件条件产⽣…

蓝桥杯每日真题 - 第24天

题目&#xff1a;&#xff08;货物摆放&#xff09; 题目描述&#xff08;12届 C&C B组D题&#xff09; 解题思路&#xff1a; 这道题的核心是求因数以及枚举验证。具体步骤如下&#xff1a; 因数分解&#xff1a; 通过逐一尝试小于等于的数&#xff0c;找到 n 的所有因数…

python学opencv|读取图像

【1】引言 前序学习了使用matplotlib模块进行画图&#xff0c;今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下&#xff1a; OpenCV: Getting Started with Images 不过读起来是英文版&#xff0c;可能略有难度&#xff0c;所以另推荐一…

ROS2教程 - 2 环境安装

更好的阅读体验&#xff1a;https://www.foooor.com 2 环境安装 下面以 ROS2 的 humble 版本为例&#xff0c;介绍 ROS2 的安装。 ROS1 只能在 ubuntu 系统上安装&#xff0c;ROS2全面支持三种平台&#xff1a;Ubuntu、MAC OS X、Windows10&#xff0c;下面在 Ubuntu22.04 …