goodhood

@goodhood/tracking

Declarative tracking for react apps

Split up tracking payload setup from the actual tracking call. Avoids leaking data across the whole app.

Install

npm i @goodhood/tracking
import { TrackingProvider } from '@goodhood/tracking';

const handleEvent = (payload) => {
  sendAnalyticsEvent(payload);
};

<TrackingProvider onEvent={handleEvent}>
  ...
</TrackingProvider>

Preview

Usage

Track an event with hooks

trackingProvider.track(payload)

useTrack returns a function that forwards to trackingProvider.track(payload)

import { useTrack } from '@goodhood/tracking';

export default {
    const track = useTrack();

    return (
      <button 
        type="button"
        onClick={() => { track({ event: 'button-clicked' }); }}
      >
        track now
      </button>
    );
}

Track an event via class components


class ClassComponent extends PureComponent {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.provider.track({ event: 'button-clicked' });
  }

  render() {
    return (
      <>
        <Provider ref={(provider) => { this.provider = provider; }} />
        <button type="button" onClick={this.handleClick} className="ui-button ui-button-primary">
          press me to track (check console)
        </button>
      </>
    );
  }
}

Track on mount

TrackingTrigger accepts any kind of props. All props will be forwarded as payload to track(payload).

import { TrackingTrigger } from '@goodhood/tracking';

<TrackingTrigger event="pageload" additional-data={123} />

Setting up tracking data

<Provider email="fun@mail.at">
  <Provider funnel="Post creation" any-kind-of-prop="oh yes">
    <TrackButton />
  </Provider>
</Provider>

TrackingProvider

TrackingProvider accepts the following props:

TrackingProvider allows imperative access to: