Install the React GA4 library
npm i react-ga4
On the top level initialize the tracking ID:
import React, { Suspense } from 'react';
import { BrowserRouter } from 'react-router-dom';
import Routes from './Routes';
import ReactGA from 'react-ga4';
const TRACKING_ID = "G-XXXXXXXXXX"; // OUR_TRACKING_ID
ReactGA.initialize(TRACKING_ID);
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
<BrowserRouter>
<Routes ReactGA={ReactGA} />
</BrowserRouter>
</Suspense>
);
}
export default App;
Track pages on Routes.js, then start the Google Event Tracker:
import React, { useEffect, lazy } from 'react';
import {Route, Routes as Switch, useLocation} from 'react-router-dom';
import GoogleAnalyticsEventTracker from './components/GoogleAnalyticsEventTracker/GoogleAnalyticsEventTracker';
const Home = lazy(() => import('./pages/Home/Home'));
const Page1 = lazy(() => import('./pages/Page1/Page1'));
const Page2 = lazy(() => import('./pages/Page2/Page2'));
const NotFound = lazy(() => import('./pages/NotFound/NotFound'));
const Routes = props => {
const url = useLocation();
useEffect(() => {
document.title = url.pathname;
props.ReactGA.pageview(url.pathname + url.search);
}, [url.pathname]);
const gaEventTracker = GoogleAnalyticsEventTracker('all_custom_events');
return (
<Switch>
<Route path='/' element={<Home gaEventTracker={gaEventTracker.bind(this)}/>} />
<Route path='/page1' element={<Page1 gaEventTracker={gaEventTracker.bind(this)}/>} />
<Route path='/page2/*' element={<Page2 gaEventTracker={gaEventTracker.bind(this)}/>} />
<Route element={<NotFound/>} />
</Switch>
);
}
export default Routes;
Inside your page you’ll add an event for any click events, functions that finish, etc.
import React from 'react'
const Page1 = props => {
const gaEventTracker = props.gaEventTracker;
return (
<button
className="button"
onClick={e => {
gaEventTracker('click_button');
}}
>
Click button
</button>
);
}
export default Page1