自定义埋点上报扩展如何去做呢

平时做的像行为监控这一类, 除了要去满足自动采集,但是其实最重要的是,要去满足自定义采集扩展

总是会有自定义事件去除触发上报一些自定义的内容.

从架构设计的角度来讲

支持通过注册事件的机制,支持

Click

dbClick

inputChange

stateChange

contentMenu

架构层

首先需要一个事件监听机制 自定义事件监听

注册

这个自定义事件监听注册,需要sdk 往外暴露: 本质是去注册事件并去执行即可

js 复制代码
public on(customDataEvent: string, messageHandler: any) {  
this.eventListeners[customDataEvent] = messageHandler;  
}

触发

业务层 注册,并行为触发后,执行回调 sdk 层拿到后,回调接受自定义事件

js 复制代码
public triggerEvent(customDataEvent: string ) {  
let event = this.eventListeners[customDataEvent];  
if(event){  
return event();  
}  
return null;  
}

取消

事件注册要注意卸载要及时清除,避免内存泄漏

完整例子

js 复制代码
完整案例
import React, { useState, useEffect, useCallback, useRef } from 'react';
import { Button, Input } from '@wind/wind-ui';

const InputGroup = Input.Group;

export default function SearchComponent() {
const [value, setValue] = useState("");
const valueRef = useRef(value);

// 更新 ref 以保持最新值
useEffect(() => {
valueRef.current = value;
}, [value]);

const onInputChange = (event) => {
setValue(event.target.value);
};

// 搜索按钮点击时的自定义数据回调
const onSearchSubmit = useCallback(() => {
return {
searchValue: valueRef.current,
searchLength: valueRef.current.length,
hasContent: !!valueRef.current.trim(),
searchType: 'keyword'
};
}, []);

// 输入框内容变化时的自定义数据回调
const onInputValueChange = useCallback(() => {
return {
currentValue: valueRef.current,
inputLength: valueRef.current.length,
isEmpty: !valueRef.current.trim()
};
}, []);

useEffect(() => {
// 注册搜索提交事件
window.monitorClient.msgBus.on("onSearchSubmit", onSearchSubmit);
// 注册输入变化事件
window.monitorClient.msgBus.on("onInputValueChange", onInputValueChange);

return () => {
window.monitorClient.msgBus.off("onSearchSubmit", onSearchSubmit);
window.monitorClient.msgBus.off("onInputValueChange", onInputValueChange);
};
}, [onSearchSubmit, onInputValueChange]);

return (

<div className="search-container">
<InputGroup compact data-uc-id="search-group" data-uc-ct="inputgroup">
<Input
style={{ width: '90%' }}
onChange={onInputChange}
value={value}
data-uc-custom-inputChange="onInputValueChange" // 此处仅为示例,实际场景在此使用自定义数据不合理
data-uc-id="eMwPj17YXz"
data-uc-ct="input"
placeholder="请输入搜索关键词"
/>
<Button
style={{ width: '10%' }}
data-uc-custom-click="onSearchSubmit"
data-uc-id="P1gx49Ao1i"
data-uc-ct="button"
>
搜索
</Button>
</InputGroup>
</div>
);
}s
相关推荐
光影少年19 分钟前
RN 架构:JS层、原生桥接层、原生渲染层 通信原理
开发语言·javascript·架构
凉、介28 分钟前
ARMv8 架构下的刷 Cache 操作
c语言·笔记·学习·架构·嵌入式·arm
梦帮科技1 小时前
基于EVM架构的Web3音频确权与RNS Token智能合约设计深度解析
人工智能·python·架构·web3·区块链·音视频·智能合约
阿耶同学1 小时前
🚀 Agentic RAG:从"检索增强生成"到"智能体驱动的检索增强生成",RAG 的下一个范式
程序员·架构
KaMeidebaby2 小时前
卡梅德生物技术快报|实操手册:CXCL4 蛋白原核表达全套工艺,两步层析去除蛋白多聚体附完整电泳数据
人工智能·算法·机器学习·架构·spark
mingo_敏2 小时前
大模型Model Architecture模型架构:从Transformer到MoE,架构决定AI上限
人工智能·架构·transformer
weixin_400005603 小时前
Vision-Language-Action:LMDrive项目架构与核心算法组件
人工智能·深度学习·算法·机器学习·架构·自动驾驶
小和尚同志3 小时前
types.ts:设计理念在代码中的第一个载体
架构·领域驱动设计
会周易的程序员15 小时前
microLog 的本地日志读取接口 log_reader — 本地日志文件读取工具开发指南
linux·物联网·架构·嵌入式·日志·iot·aiot
无心水17 小时前
【全域智能营销实战】2、Spring AI 模块化架构深度解读:从 1.0 到 2.0 的演进与最佳实践
人工智能·spring·架构·harness·顶尖架构师·全域智能营销·harmess