Skip to content
微信公众号

数据采集方式

既然是要收集数据,那么首先需要思考的事情肯定是如何收集。收集数据的方式有很多,下面我就简单为大家介绍两种较为常见的方式。以点击事件为例:

手动上报数据

这是最简单的一种数据上报方式了,直接在点击事件的回调函数中收集我们需要上报的数据即可。

js
function clickHandler() {
  let params = {
     event: 'click',
     value: ''
  }
}
  • 优势:比较简单,只需要在对应的回调函数中添加上报的代码即可
  • 缺点:埋点上报代码与常规的业务代码过度耦合,不利于维护

通过给元素添加属性上报

通过给元素添加特定的属性,并在全局添加点击事件,利用点击事件的传透,遍历找到触发该事件的元素,判断元素上是否有绑定相关的属性,有则取相关的值进行上报,没有则不进行上报操作。

首先需要为全局添加点击事件,并且事件触发时需要找到对应触发事件的元素,判断是否拥有需要上报的属性。

js
// 获取点击追踪的元素
function getClickTraceElement(target) {
  let ele = target
  let clickTraceAction = ele.getAttribute('click-trace-action')
  while (ele.tagName !== 'BODY' && !clickTraceAction) {
    ele = ele.parentNode
    clickTraceAction = ele.getAttribute('click-trace-action')
  }
  return ele.tagName !== 'BODY' ? ele : null
}

// 全局添加点击事件
document.body.addEventListener(
    'click',
    (event) => {
      // 此方法用于找到触发事件的元素
      let ele = getClickTraceElement(event.target)
      // 如果点击的元素有绑定该属性,则返回元素,否则返回null
      if (ele) {
        // 自定义事件名称,可以自行修改判断
        let traceAction = ele.getAttribute('click-trace-action')
        let traceParams = ele.getAttribute('click-trace-params') || {}

        // 由于绑定的数据通过 JSON.stringfy() 处理成字符串,这里需要转化一下,具体看传递的参数值
        if (typeof traceParams === 'string') {
          traceParams = JSON.parse(traceParams)
        }

        let params = {
          event: traceAction,
          ecommerce: traceParams
        }
        axios.post(url, params)
      }
    },
    false
  )

使用方式如下:

html
<div
  onClick={handleFullScreen}
  className={classnames(styles['header-icon'], styles['header-unfold'])}
  data-click-trace-action={'click_fullscreen'}
  data-click-trace-params={JSON.stringify({ value: 'fullscreen' })}
 >
 </div>
  • 优势:不需要在业务代码中再编写埋点相关的代码,与业务代码进行隔离。

当然,实际项目开发中建议两种都预留,可能存在使用组件库无法区分点击内容的情况,这个时候可以使用手动上报的方式进行上报。

Released under the MIT License.