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 包含完整的使用说明
102 lines
2.1 KiB
JavaScript
102 lines
2.1 KiB
JavaScript
// src/hooks/usePostHog.js
|
|
import { useCallback } from 'react';
|
|
import {
|
|
getPostHog,
|
|
trackEvent,
|
|
trackPageView,
|
|
identifyUser,
|
|
setUserProperties,
|
|
resetUser,
|
|
optIn,
|
|
optOut,
|
|
hasOptedOut,
|
|
getFeatureFlag,
|
|
isFeatureEnabled,
|
|
} from '../lib/posthog';
|
|
|
|
/**
|
|
* Custom hook to access PostHog functionality
|
|
* Provides convenient methods for tracking events and managing user sessions
|
|
*
|
|
* @returns {object} PostHog methods
|
|
*/
|
|
export const usePostHog = () => {
|
|
// Get PostHog instance
|
|
const posthog = getPostHog();
|
|
|
|
// Track custom event
|
|
const track = useCallback((eventName, properties = {}) => {
|
|
trackEvent(eventName, properties);
|
|
}, []);
|
|
|
|
// Track page view
|
|
const trackPage = useCallback((pagePath, properties = {}) => {
|
|
trackPageView(pagePath, properties);
|
|
}, []);
|
|
|
|
// Identify user
|
|
const identify = useCallback((userId, userProperties = {}) => {
|
|
identifyUser(userId, userProperties);
|
|
}, []);
|
|
|
|
// Set user properties
|
|
const setProperties = useCallback((properties) => {
|
|
setUserProperties(properties);
|
|
}, []);
|
|
|
|
// Reset user session (logout)
|
|
const reset = useCallback(() => {
|
|
resetUser();
|
|
}, []);
|
|
|
|
// Opt out of tracking
|
|
const optOutTracking = useCallback(() => {
|
|
optOut();
|
|
}, []);
|
|
|
|
// Opt in to tracking
|
|
const optInTracking = useCallback(() => {
|
|
optIn();
|
|
}, []);
|
|
|
|
// Check if user has opted out
|
|
const isOptedOut = useCallback(() => {
|
|
return hasOptedOut();
|
|
}, []);
|
|
|
|
// Get feature flag value
|
|
const getFlag = useCallback((flagKey, defaultValue = false) => {
|
|
return getFeatureFlag(flagKey, defaultValue);
|
|
}, []);
|
|
|
|
// Check if feature is enabled
|
|
const isEnabled = useCallback((flagKey) => {
|
|
return isFeatureEnabled(flagKey);
|
|
}, []);
|
|
|
|
return {
|
|
// Core PostHog instance
|
|
posthog,
|
|
|
|
// Tracking methods
|
|
track,
|
|
trackPage,
|
|
|
|
// User management
|
|
identify,
|
|
setProperties,
|
|
reset,
|
|
|
|
// Privacy controls
|
|
optOut: optOutTracking,
|
|
optIn: optInTracking,
|
|
isOptedOut,
|
|
|
|
// Feature flags
|
|
getFlag,
|
|
isEnabled,
|
|
};
|
|
};
|
|
|
|
export default usePostHog;
|