Matomo Tracker (React)
Stand alone library for using Matamo tracking in React projects
Installation
npm install @jonkoops/matomo-tracker-react
Usage
Before you're able to use this Matomo Tracker you need to create a Matomo instance with your project specific details, and wrap your application with the MatomoProvider
that this package exposes.
import { MatomoProvider, createInstance } from '@jonkoops/matomo-tracker-react'
const instance = createInstance({
urlBase: 'https://LINK.TO.DOMAIN',
siteId: 3,
userId: 'UID76903202',
trackerUrl: 'https://LINK.TO.DOMAIN/tracking.php',
srcUrl: 'https://LINK.TO.DOMAIN/tracking.js',
disabled: false,
heartBeat: {
active: true,
seconds: 10
},
linkTracking: false,
configurations: {
disableCookies: true,
setSecureCookie: true,
setRequestMethod: 'POST'
}
})
ReactDOM.render(
<MatomoProvider value={instance}>
<MyApp />
</MatomoProvider>,
)
After wrapping your application with the MatomoProvider
you can use the useMatomo
hook to track your application from anywhere within the MatomoProvider component tree:
import React from 'react'
import { useMatomo } from '@jonkoops/matomo-tracker-react'
const MyPage = () => {
const { trackPageView, trackEvent } = useMatomo()
React.useEffect(() => {
trackPageView()
}, [])
const handleOnClick = () => {
trackEvent({ category: 'sample-page', action: 'click-event' })
}
return (
<button type="button" onClick={handleOnClick}>
Click me
</button>
)
}
Advanced usage
By default the Matomo Tracker will send the window's document title and location, or send your own values. Also, custom dimensions can be used:
import React from 'react'
import { useMatomo } from '@jonkoops/matomo-tracker-react'
const MyPage = () => {
const { trackPageView, trackEvent } = useMatomo()
React.useEffect(() => {
trackPageView({
documentTitle: 'Page title',
href: 'https://LINK.TO.PAGE',
customDimensions: [
{
id: 1,
value: 'loggedIn',
},
],
})
}, [])
const handleOnClick = () => {
trackEvent({ category: 'sample-page', action: 'click-event' })
}
return (
<button type="button" onClick={handleOnClick}>
Click me
</button>
)
}
And you can do the same for the trackEvent
method:
import React from 'react'
import { useMatomo } from '@jonkoops/matomo-tracker-react'
const MyPage = () => {
const { trackEvent } = useMatomo()
const handleOnClick = () => {
trackEvent({
category: 'sample-page',
action: 'click-event',
name: 'test',
value: 123,
documentTitle: 'Page title',
href: 'https://LINK.TO.PAGE',
customDimensions: [
{
id: 1,
value: 'loggedIn',
},
],
})
}
return (
<button type="button" onClick={handleOnClick}>
Click me
</button>
)
}
The useMatomo
hook also exposes the following methods:
trackEvents()
trackSiteSearch()
trackLink()
pushInstruction()
For example, the pushInstruction()
function can be used to push instructions to Matomo for execution. This
is equivalent to pushing entries into the _paq
array.
const { pushInstruction } = useMatomo();
pushInstruction('setUserId', 'USER_ID_HERE');
SPA Link Tracking
Matomo provides the option to track outbound link, however, this implementation is flaky for a SPA (Single Page Application) without SSR (Server Side Rendering) across different versions of Matomo. Therefore you can use the enableLinkTracking
method to listen to outbound clicks on anchor elements. This method should be placed on a component directly below your MatomoProvider
on a component that's rendered on every page view. Also, make sure to disable the linkTracking
option on the instance passed to the provider to prevent Matomo from catching some link clicks:
import { MatomoProvider, createInstance, useMatomo } from '@jonkoops/matomo-tracker-react'
const instance = createInstance({
urlBase: "https://LINK.TO.DOMAIN",
linkTracking: false
});
ReactDOM.render(
<MatomoProvider value={instance}>
<MyApp />
</MatomoProvider>
)
const MyApp = () => {
const { enableLinkTracking } = useMatomo()
enableLinkTracking()
return (
)
}
References