https://github.com/phantomstudios/react-gtm
A lightweight React library to implement custom Google Tag Manager events.
https://github.com/phantomstudios/react-gtm
googletagmanager gtm lightweight react tagmanager typescipt
Last synced: 5 months ago
JSON representation
A lightweight React library to implement custom Google Tag Manager events.
- Host: GitHub
- URL: https://github.com/phantomstudios/react-gtm
- Owner: phantomstudios
- License: mit
- Created: 2021-04-03T10:37:19.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2025-07-01T11:23:02.000Z (8 months ago)
- Last Synced: 2025-07-01T11:48:44.211Z (8 months ago)
- Topics: googletagmanager, gtm, lightweight, react, tagmanager, typescipt
- Language: TypeScript
- Homepage:
- Size: 651 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Support: SUPPORT.md
Awesome Lists containing this project
README
# @phntms/react-gtm
[![NPM version][npm-image]][npm-url]
[![Actions Status][ci-image]][ci-url]
[![PR Welcome][npm-downloads-image]][npm-downloads-url]
A lightweight React library to implement custom Google Tag Manager events.
## Introduction
Designed to use and extend [Google Analytics 4](https://support.google.com/analytics/answer/10089681?hl=en). **Note**: If upgrading from react-gtm `0.0.6` or older, or currently using an older version of Google Analytics, you'll need to [upgrade](https://support.google.com/analytics/answer/9744165?hl=en). This library is also SSR safe and does not break when used without window existing. This package is intended to be used with React / older Next.JS apps, for Next.JS 11 and above we recommend using [@phntms/next-gtm](https://www.npmjs.com/package/@phntms/next-gtm).
## Installation
Install this package with `npm`.
```bash
npm i @phntms/react-gtm
```
## Usage
### <TrackingHeadScript />
| Property | Type | Default | Notes |
| ----------- | --------- | --------- | --------------------------------------------------------------------------------------------------------- |
| **id** | `string` | undefined | ID that uniquely identifies GTM Container. Example format: `GTM-xxxxxx`. |
| **disable** | `boolean` | false | Used to disable tracking events. Use if you want user to consent to being tracked before tracking events. |
To initialize GTM, add `TrackingHeadScript` to the `head` of the page.
Example initialization in Next.js:
```JSX
import Document, {
Html,
Head,
Main,
NextScript,
} from "next/document";
import { TrackingHeadScript } from "@phntms/react-gtm";
const GA_TRACKING_ID = process.env.NEXT_PUBLIC_GA_TRACKING_ID || "";
export default class MyDocument extends Document {
render = () => (
);
}
```
**Note**: If used alongside any cookie consent scripts, `` must be placed after.
### trackEvent()
| Parameter | Type | Default | Notes |
| --------- | -------------------- | --------- | ----------------------------------------------- |
| props | `EventTrackingProps` | undefined | Custom tracking event to push to GTM container. |
Example of a basic tracking event:
```javascript
import { trackEvent } from "@phntms/react-gtm";
trackEvent({
event: "customEvent",
data: {
action: "Click - To: https://phantom.land/",
category: "CTA",
label: "Click",
},
});
```
### enableTracking()
| Parameter | Type | Default | Notes |
| ---------- | --------- | --------- | ------------------------------------------------------------------- |
| **id** | `string` | undefined | Same ID used in `TrackingHeadScript`. Example format: `GTM-xxxxxx`. |
| **enable** | `boolean` | true | Used to enable or disable tracking events. |
**Note**: This _should_ only be used if needed, for example after user has consented to being tracked. You _shouldn't_ need to toggle this in normal usage.
### EventDataProps
| Parameter | Type | Default | Required | Notes |
| --------- | ---------------- | ------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| event | `string` | "customEvent" | No | Custom GTM event name, defaults to `customEvent`. |
| data | `EventDataProps` | undefined | No | Supports any value(s) in the format `[key: string]: any`. Example of recommended properties to include; `action`, `category` and `label`. |
### window.dataLayer
This library extends `window` and exposes the `window.dataLayer` GTM container object.
## Further Resources
Useful resource for implementing custom GTM events:
- [Omnibug](https://chrome.google.com/webstore/detail/omnibug/bknpehncffejahipecakbfkomebjmokl?hl=en) - Chrome browser extension to decode and display outgoing GTM events from within Inspect Element.
## 🍰 Contributing
Want to get involved, or found an issue? Please contribute using the GitHub Flow. Create a branch, add commits, and open a Pull Request or submit a new issue.
Please read `CONTRIBUTING` for details on our `CODE_OF_CONDUCT`, and the process for submitting pull requests to us!
[npm-image]: https://img.shields.io/npm/v/@phntms/react-gtm.svg?style=flat-square&logo=react
[npm-url]: https://npmjs.org/package/@phntms/react-gtm
[npm-downloads-image]: https://img.shields.io/npm/dm/@phntms/react-gtm.svg
[npm-downloads-url]: https://npmcharts.com/compare/@phntms/react-gtm?minimal=true
[ci-image]: https://github.com/phantomstudios/react-gtm/workflows/Test/badge.svg
[ci-url]: https://github.com/phantomstudios/react-gtm/actions