Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/zanonnicola/tracking-ready-hook

Notify when GA and GTM are loaded in your React Component
https://github.com/zanonnicola/tracking-ready-hook

gtm hooks reactjs tracking

Last synced: 26 days ago
JSON representation

Notify when GA and GTM are loaded in your React Component

Awesome Lists containing this project

README

        


Is Tracking ready hook

# React Hook

Tiny **327 bytes** `React` Hook that notifes you when GA or GTM is loaded in your React Component

Use `requestAnimationFrame` to check when the tracking code has been loaded. There's a pre-defined `timeOut` (default `5000`) that will stop the checking automatically and report an error if you need for example to log it somewhere.

## :package: Installation

```bash
npm install tracking-ready-hook --save
```

## :rocket: Load
```js
// using es modules
import useTrackingIsLoaded from 'tracking-ready-hook'

// common.js
const useTrackingIsLoaded = require('tracking-ready-hook')

```

Or use script tags and globals.

```html

```

And then grab it off the global like so:

```js
const useTrackingIsLoaded = trackingIsLoaded.default;
```

## :bulb: Usage

Let's assume you want to send some data to GA or to the `dataLayer` but in order to do that you need to wait for GA or GTM to be available in `window`.

```javascript
function App() {
const [status, error] = useTrackingIsLoaded();
return (


{status ?

Loaded

:

Not Loaded

}
{error ?

Error: {error.message}

: null}

);
}
```

Maybe more useful: run inside `useEffect` Hook or `onClick` to send data to `dataLayer`

```javascript

function App() {
const [status, error] = useTrackingIsLoaded();
useEffect(() => {
if (status) {
window.dataLayer.push({
ecommerce: {
currencyCode: 'USD',
impressions: [{foo: 'bar'}]
}
});
}
})
return (


Please track me!!!

);
}

```

## API

#### `useTrackingIsLoaded(timeout: Number);` Default `timeout` 5000

Returns an `Array` of `status: Boolean` and `error: Error Object`

## Tests

`npm test`

## Legals

Released under MIT license.