How to set up Google Analytics for React-Router?

后端 未结 15 640
名媛妹妹
名媛妹妹 2020-12-12 12:25

I\'m trying set up Google Analytics on my react site, and have come across a few packages, but none of which has the kind of set up that I have in terms of examples. Was ho

相关标签:
15条回答
  • 2020-12-12 13:21

    First, in your index.js set onUpdate function to call ga

    import ga from 'ga.js';
    onUpdate() {
      console.log('=====GA=====>', location.pathname);
      console.log('=====GA_TRACKING_CODE=====>', GA_TRACKING_CODE);
      ga("send", "pageview", location.pathname);
    }
    
    render() {
      return (
        <Router onUpdate={this.onUpdate.bind(this)}>...</Router>
      );
    }
    

    And ga.js:

    'use strict';
    if(typeof window !== 'undefined' && typeof GA_TRACKING_CODE !== 'undefined') {
      (function(window, document, script, url, r, tag, firstScriptTag) {
        window['GoogleAnalyticsObject']=r;
        window[r] = window[r] || function() {
          (window[r].q = window[r].q || []).push(arguments)
        };
        window[r].l = 1*new Date();
        tag = document.createElement(script),
        firstScriptTag = document.getElementsByTagName(script)[0];
        tag.async = 1;
        tag.src = url;
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
      })(
        window,
        document,
        'script',
        '//www.google-analytics.com/analytics.js',
        'ga'
      );
    
      var ga = window.ga;
    
      ga('create', GA_TRACKING_CODE, 'auto');
    
      module.exports = function() {
        return window.ga.apply(window.ga, arguments);
      };
    } else {
      module.exports = function() {console.log(arguments)};
    }
    
    0 讨论(0)
  • 2020-12-12 13:23

    I suggest using the Segment analytics library and following the React quickstart guide to track page calls using the react-router library. You can allow the <Route /> component to handle when the page renders and use componentDidMount to invoke page calls. The example below shows one way you could do this:

        const App = () => (
          <div>
            <Switch>
              <Route exact path="/" component={Home} />
              <Route path="/about" component={About} />
            </Switch>
          </div>
        );
    
        export default App;
    
        export default class Home extends Component {
          componentDidMount() {
            window.analytics.page('Home');
          }
    
          render() {
            return (
              <h1>
                Home page.
              </h1>
            );
          }
        }
    

    I’m the maintainer of https://github.com/segmentio/analytics-react. With Segment, you’ll be able to switch different destinations on-and-off by the flip of a switch if you are interested in trying multiple analytics tools (we support over 250+ destinations) without having to write any additional code.

    0 讨论(0)
  • 2020-12-12 13:25

    I would suggest using the excellent react-router-ga package that is extremely lightweight and easy to configure, especially when using the BrowserRouter wrapper.

    Import the component:

    import Analytics from 'react-router-ga';

    Then simply add the <Analytics> within your BrowserRouter:

    <BrowserRouter>
        <Analytics id="UA-ANALYTICS-1">
            <Switch>
                <Route path="/somewhere" component={SomeComponent}/>
            </Switch>
        </Analytics>
    </BrowserRouter>
    
    0 讨论(0)
提交回复
热议问题