1. ✅ 安装依赖: posthog-js@^1.280.1 2. ✅ 创建核心文件: - src/lib/posthog.js - PostHog SDK 封装(271 行) - src/lib/constants.js - 事件常量定义(AARRR 框架) - src/hooks/usePostHog.js - PostHog React Hook - src/hooks/usePageTracking.js - 页面追踪 Hook - src/components/PostHogProvider.js - Provider 组件 3. ✅ 集成到应用: - 修改 src/App.js,在最外层添加 <PostHogProvider> - 自动追踪所有页面浏览 4. ✅ 配置环境变量: - 在 .env 添加 PostHog 配置项 - REACT_APP_POSTHOG_KEY 留空,需要用户填写 5. ✅ 创建文档: POSTHOG_INTEGRATION.md 包含完整的使用说明
56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
// src/hooks/usePageTracking.js
|
|
import { useEffect, useRef } from 'react';
|
|
import { useLocation } from 'react-router-dom';
|
|
import posthog from 'posthog-js';
|
|
|
|
/**
|
|
* Custom hook for automatic page view tracking with PostHog
|
|
*
|
|
* @param {Object} options - Configuration options
|
|
* @param {boolean} options.enabled - Whether tracking is enabled
|
|
* @param {Function} options.getProperties - Function to get custom properties for each page view
|
|
*/
|
|
export const usePageTracking = ({ enabled = true, getProperties } = {}) => {
|
|
const location = useLocation();
|
|
const previousPathRef = useRef('');
|
|
|
|
useEffect(() => {
|
|
if (!enabled) return;
|
|
|
|
// Get the current path
|
|
const currentPath = location.pathname + location.search;
|
|
|
|
// Skip if it's the same page (prevents duplicate tracking)
|
|
if (previousPathRef.current === currentPath) {
|
|
return;
|
|
}
|
|
|
|
// Update the previous path
|
|
previousPathRef.current = currentPath;
|
|
|
|
// Get custom properties if function provided
|
|
const customProperties = getProperties ? getProperties(location) : {};
|
|
|
|
// Track page view with PostHog
|
|
if (posthog && posthog.__loaded) {
|
|
posthog.capture('$pageview', {
|
|
$current_url: window.location.href,
|
|
path: location.pathname,
|
|
search: location.search,
|
|
hash: location.hash,
|
|
...customProperties,
|
|
});
|
|
|
|
// Log in development
|
|
if (process.env.NODE_ENV === 'development') {
|
|
console.log('📊 PostHog $pageview:', {
|
|
path: location.pathname,
|
|
...customProperties,
|
|
});
|
|
}
|
|
}
|
|
}, [location, enabled, getProperties]);
|
|
};
|
|
|
|
export default usePageTracking;
|