From 1246682d655a4372bfcabdb0cc2ac68525bcf0ea Mon Sep 17 00:00:00 2001 From: Malte Finsterwalder <malte@holi.team> Date: Fri, 14 Feb 2025 12:19:49 +0100 Subject: [PATCH] HOLI-10936 fix: wrap track function in useCallback to prevent infinite rerender --- core/tracking/hooks/useTracking.ts | 36 +++++++++++++++++------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/core/tracking/hooks/useTracking.ts b/core/tracking/hooks/useTracking.ts index 0a2577ad5f..70886dedda 100644 --- a/core/tracking/hooks/useTracking.ts +++ b/core/tracking/hooks/useTracking.ts @@ -3,6 +3,7 @@ import { usePosthogCrossPlatform } from '@holi/core/tracking/PosthogCrossPlatfor import { useConsentState } from '@holi/core/tracking/TrackingInitializer' import { TrackingEvent } from '@holi/core/tracking/events' import { ConsentState, TrackingHook } from '@holi/core/tracking/types' +import { useCallback } from 'react' const logger = getLogger('Tracking') @@ -10,22 +11,25 @@ const useTracking = (): TrackingHook => { const posthog = usePosthogCrossPlatform() const [consent] = useConsentState() return { - track: (event: TrackingEvent) => { - logger.debug('trackEvent', `tracking "${event.name}" event`, event) - try { - posthog.capture(event.name, { - ...event.properties, - ...ConsentState.toEventProperties(consent), - event_version__major: event.event_version__major, - event_version__minor: event.event_version__minor, - event_version__patch: event.event_version__patch, - }) - } catch (e) { - // console.error will be picked up by Sentry, so this does not go unnoticed to the programmer, but to the user. - // eslint-disable-next-line no-console - console.error('Error during evaluation of onTrack callback', e) - } - }, + track: useCallback( + (event: TrackingEvent) => { + logger.debug('trackEvent', `tracking "${event.name}" event`, event) + try { + posthog.capture(event.name, { + ...event.properties, + ...ConsentState.toEventProperties(consent), + event_version__major: event.event_version__major, + event_version__minor: event.event_version__minor, + event_version__patch: event.event_version__patch, + }) + } catch (e) { + // console.error will be picked up by Sentry, so this does not go unnoticed to the programmer, but to the user. + // eslint-disable-next-line no-console + console.error('Error during evaluation of onTrack callback', e) + } + }, + [consent, posthog] + ), } } -- GitLab