Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/elgorditosalsero/react-gtm-hook

Easily manage the Google Tag Manager via Hook
https://github.com/elgorditosalsero/react-gtm-hook

google-tag-manager googletagmanager gtm hook react-hook react-hooks

Last synced: about 1 month ago
JSON representation

Easily manage the Google Tag Manager via Hook

Awesome Lists containing this project

README

        

# MAINTAINERS WANTED, PLEASE REACH OUT IF YOU'RE INTERESTED


React Google Tag Manager Hook

# React Google Tag Manager Hook

#### Use easily the Google Tag Manager

With this custom hook, you can easily use the Google Tag Manager with 0 config, you just have to pass the **container ID**!

## Features

- [Installation](#installation)
- [How to use](#how-to-use)
- [API](#api)
- [Example](#example)
- [License](#license)

## Installation

```bash
$ yarn add @elgorditosalsero/react-gtm-hook
# or
$ npm install @elgorditosalsero/react-gtm-hook
```

## How to use

## Pay attention

Since v2.0 I'm using the context to share globally the config of the GTM for the Hook.
If you're looking for the 1.x doc, check [this](https://github.com/elgorditosalsero/react-gtm-hook/tree/v1.0.6)

### Basic

```jsx
import { GTMProvider } from '@elgorditosalsero/react-gtm-hook'

const App = () => {
const gtmParams = { id: 'GTM-ID' }

return (

My awesome app



)
}
```

### With custom DataLayer Name

```jsx
import { GTMProvider } from '@elgorditosalsero/react-gtm-hook'

const App = () => {
const gtmParams = {
id: 'GTM-ID',
dataLayerName: 'customDataLayerName'
}

return (

My awesome app



)
}
```

### With custom DataLayer name and initial values

```jsx
import { GTMProvider } from '@elgorditosalsero/react-gtm-hook'

const App = () => {
const gtmParams = {
id: 'GTM-ID',
dataLayer: {
'my-custom-value': 'value',
'my-awesome-value': 'awesome'
},
dataLayerName: 'customDataLayerName'
}

return (

My awesome app



)
}
```

### Use a GTM custom environment

```jsx
import { GTMProvider } from '@elgorditosalsero/react-gtm-hook'

const App = () => {
const gtmParams = {
id: 'GTM-ID',
environment: {
gtm_auth: 'my-auth-token',
gtm_preview: 'preview-id'
}
}

return (

My awesome app



)
}
```

_To find the `gtm_auth` and `gtm_preview` values for your custom GTM environment, go to Admin > Your Container > Environments > Your Environment > Actions > Get Snippet in your Google Tag Manager console. You will find the values you need embedded in the snippet._

### Sending data to GTM

```jsx
import { GTMProvider, useGTMDispatch } from '@elgorditosalsero/react-gtm-hook'

const App = () => {
const gtmParams = {
id: 'GTM-ID',
dataLayerName: 'customDataLayerName'
}

return (


My awesome app





)
}

const MyAwesomeComp = () => {
const sendDataToGTM = useGTMDispatch()

const handleClick = () => sendDataToGTM({ event: 'awesomeButtonClicked', value: 'imAwesome' })

return (


My Awesome Comp


My Awesome Button

)
}
```

## API

`useGTM` provide you a clean and easy to use API to config the GTM

### Init

| Name | Type | Required | Info |
| ------------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- |
| id | `String` | **YES** | The container ID from the Tag Manager, it looks like: `GTM-0T0TTT` |
| dataLayer | `Object` | **NO** | Custom values for the dataLayer, like `{'my-init-prop': 'value'}` |
| dataLayerName | `String` | **NO** | Custom name for the dataLayer, if not passed, it will be the default: `dataLayer` |
| environment | `Object` | **NO** | Provide the `gtm_auth` and `gtm_preview` parameters to use a custom GTM environment |
| nonce | `String` | **NO** | Server generated nonce. see https://developers.google.com/tag-manager/web/csp |
| injectScript | `Boolean` | **NO** | default(`true`): Decide if the GTM Script is injected, see #30. Also allows for delayed injection by toggling true later in flow |
| customDomain | `String` | **NO** | default(`https://www.googletagmanager.com`): Provide customDomain to use a custom GTM domain |
| customScriptName | `String` | **NO** | default(`gtm.js`): Provide customScriptName to use custom file name |

### SentDataToGTM

| Name | Type | Required | Info |
| ---- | -------- | -------- | ------------------------------------------------------------------------------------------------ |
| data | `Object` | **YES** | The object data to send to the GTM, like `{event: 'my-awesome-event', 'my-custom-var': 'value'}` |

## Example

You can see this lib live on the dedicated [site](https://elgorditosalsero-react-gtm-hook.netlify.app/)

## License

`react-gtm-hook` is under MIT License

## Contributors ✨

[![All Contributors](https://img.shields.io/badge/all_contributors-12-orange.svg?style=flat-square)](#contributors-)

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):



Guido Porcaro
Guido Porcaro

💻 📖
Ben Yap
Ben Yap

💻 📖 ⚠️
Cristian Livella
Cristian Livella

💻
Jason Finch
Jason Finch

💻
Italo
Italo

💻
Gianluca La Manna
Gianluca La Manna

📖
Kazuki
Kazuki

💻


Stepan Mandryka
Stepan Mandryka

💻
Simon Smith
Simon Smith

📖
Listiani
Listiani

💻 📖
pkulcsarnr
pkulcsarnr

💻 📖
sin
sin

💻

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!