प्रतिक्रिया-रूटर के लिए Google Analytics कैसे सेट करें?


86

मैं अपनी प्रतिक्रिया साइट पर Google Analytics सेट करने का प्रयास कर रहा हूं, और कुछ पैकेजों में आया हूं, लेकिन इनमें से कोई भी उस तरह का सेट अप नहीं है जो मेरे पास उदाहरणों के संदर्भ में है। उम्मीद कर रहा था कि कोई इस पर कुछ प्रकाश डाल सकता है।

मैं जो पैकेज देख रहा हूं, वह प्रतिक्रिया-गा है

मेरे index.jsइस तरह से मेरे रेंडर विधि ।

React.render((
<Router history={createBrowserHistory()}>
    <Route path="/" component={App}>
        <IndexRoute component={Home} onLeave={closeHeader}/>
        <Route path="/about" component={About} onLeave={closeHeader}/>
        <Route path="/gallery" component={Gallery} onLeave={closeHeader}/>
        <Route path="/contact-us" component={Contact} onLeave={closeHeader}>
            <Route path="/contact-us/:service" component={Contact} onLeave={closeHeader}/>
        </Route>
        <Route path="/privacy-policy" component={PrivacyPolicy} onLeave={closeHeader} />
        <Route path="/feedback" component={Feedback} onLeave={closeHeader} />
    </Route>
    <Route path="*" component={NoMatch} onLeave={closeHeader}/>
</Router>), document.getElementById('root'));

4
react-router-4/ react-router-domनीचे, के लिए एक उत्तर पोस्ट यहाँ शीर्ष प्रतिक्रिया प्रतिक्रिया रूटर के पुराने संस्करणों के लिए है और दुर्भाग्य से v4 के साथ काम नहीं करेगा।
पीटर बर्ग

जब मैं प्रतिक्रिया SSR का उपयोग कर रहा हूँ तो मैं इसे StaticRouter के साथ कैसे जोड़ूँ?
सुभेंदु कुंडू

जवाबों:


85

अपने इतिहास की वस्तु का संदर्भ रखें। अर्थात

import { createBrowserHistory } from 'history';

var history = createBrowserHistory();

ReactDOM.render((
    <Router history={history}>
        [...]

फिर प्रत्येक पेजव्यू रिकॉर्ड करने के लिए एक श्रोता जोड़ें। (यह मानता है कि आपने पहले ही window.gaसामान्य तरीके से ऑब्जेक्ट सेट किया है।)

history.listen((location) => {
    window.ga('set', 'page', location.pathname + location.search);
    window.ga('send', 'pageview');
});

16
यह घटनाओं या अन्य हिट प्रकारों के लिए नहीं भेजा जाएगा जो भेजे गए हैं। वे अभी भी URL को पृष्ठ लोड समय पर संदर्भित कर रहे हैं। इसके बजाय आपको पेजव्यू भेजने से पहले ट्रैकर पर नया मान सेट करना होगा, उदा ga('set', 'page', location.pathname + location.search); ga('send', 'pageview');
फिलिप वाल्टन

1
हाय डेविड, जीए साइट से नियमित रूप से कोड का उपयोग करने के लिए आपका उदाहरण है या क्या यह प्रतिक्रिया-जी पैकेज का उपयोग कर रहा है? धन्यवाद।
जॉन फू

अभी तक यह तय नहीं किया गया है कि इसे कैसे ठीक किया जाए, लेकिन जानकारी का यह टुकड़ा भी उपयोगी हो सकता है: stackoverflow.com/questions/30052693/… (यह बताता है कि क्यों अटेंशन कुछ मामलों में सही तरीके से काम नहीं कर रहा है और उच्च उछाल-दर भी पेश कर सकता है )।
डीटेम

आप भेजें कमांड पर तीसरा पैरामीटर नहीं चाहते हैं। "जबकि तकनीकी तौर पर पेजव्यू हिट के लिए सेंड कमांड एक वैकल्पिक पेज फील्ड को तीसरे पैरामीटर के रूप में स्वीकार करता है, पेज फील्ड को उस तरह से पास करना है जब सिंगल पेज एप्लिकेशन को ट्रैक करने की अनुशंसा नहीं की जाती है। ऐसा इसलिए है क्योंकि सेंड कमांड से गुजरे फील्ड को ट्रैकर पर सेट नहीं किया जाता है- वे केवल वर्तमान हिट पर लागू होते हैं। ट्रैकर को अपडेट नहीं करने से समस्याएँ उत्पन्न होंगी यदि आपका एप्लिकेशन कोई भी गैर-पृष्ठ दृश्य हिट्स (जैसे ईवेंट या सोशल इंटरैक्शन) भेजता है, क्योंकि वे हिट्स ट्रैकर के पेज मूल्य के साथ जुड़े होंगे जब इसे बनाया गया था। "
जोशुआ रॉबिन्सन


30

यह देखते हुए कि गूगल एनालिटिक्स एक ट्रैकिंग आईडी के साथ लोड और आरंभिक है।

<Route>पृष्ठ के विचारों को ट्रैक करने के लिए घटक का उपयोग करके प्रतिक्रिया-राउटर संस्करण 4 के लिए एक समाधान है ।

<Route path="/" render={({location}) => {
  if (typeof window.ga === 'function') {
    window.ga('set', 'page', location.pathname + location.search);
    window.ga('send', 'pageview');
  }
  return null;
}} />

आप बस इस घटक को अंदर प्रस्तुत करते हैं <Router>(लेकिन प्रत्यक्ष बच्चे के रूप में नहीं <Switch>)।

क्या होता है कि जब भी स्थान प्रोप बदलता है तो यह इस घटक के पुन: रेंडर का कारण बनता है (वास्तव में कुछ भी प्रतिपादन नहीं करता है) जो पेजव्यू को आग लगा देता है।


1
रिएक्ट-राउटर 4. क्या यह केंट डू नहीं है?
एंथोनी क्रेगन

1
नीचे एक और प्रतिक्रिया-राउटर -4 समाधान पोस्ट किया गया जिसमें व्यक्तिगत मार्गों को संशोधित करना शामिल नहीं है। अफसोस की बात है कि यह निश्चित रूप से एक "अपना जहर चुनें" स्थिति है।
पीटर बर्ग

1
क्या इसका मतलब यह नहीं है कि "/" जाने से कुछ नहीं होगा?
दाना वुडमैन

3
बस एक और मार्ग है जो आपको @DanaWoodman जो भी चाहिए, उत्सर्जित करता है। यह मानती है कि मार्ग Switch
bozdoz

क्या यह लैंडिंग पृष्ठ पर दो पृष्ठदृश्यों को ट्रैक करेगा? जीए के रूप में देखना लैंडिंग पृष्ठ को स्वचालित रूप से ट्रैक करता है, और हम इसके लिए एक अतिरिक्त पेजव्यू इवेंट ट्रिगर करते हैं। या जीए इसे फ़िल्टर करता है?
अरनेहुगो

27

मैं React Router v4 और Google Analytics ग्लोबल साइट टैग का उपयोग कर रहा हूं , जो यह लिखते समय अनुशंसित किया गया प्रतीत होता है।

और यहाँ मेरा समाधान है:

WithRouter से लिपटे एक घटक बनाएँ react-router-dom:

import React from 'react';
import { withRouter } from 'react-router-dom';
import { GA_TRACKING_ID } from '../config';

class GoogleAnalytics extends React.Component {
    componentWillUpdate ({ location, history }) {
        const gtag = window.gtag;

        if (location.pathname === this.props.location.pathname) {
            // don't log identical link clicks (nav links likely)
            return;
        }

        if (history.action === 'PUSH' &&
            typeof(gtag) === 'function') {
            gtag('config', GA_TRACKING_ID, {
                'page_title': document.title,
                'page_location': window.location.href,
                'page_path': location.pathname
            });
        }
    }

    render () {
        return null;
    }
}

export default withRouter(GoogleAnalytics);

बस अपने राउटर के भीतर घटक को जोड़ें (मेरा मानना ​​है कि किसी भी मार्गों के बाद आदर्श रूप से मिलान किया जाएगा और किसी भी स्विच घटकों, क्योंकि एनालिटिक्स फ़ंक्शन आपकी साइट रेंडरिंग पर प्राथमिकता नहीं होनी चाहिए):

import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import IndexPage from './IndexPage';
import NotFoundPage from './NotFoundPage';
import GoogleAnalytics from './GoogleAnalytics';

const App = () => (
    <Router>
        <Switch>
            <Route exact path="/" component={IndexPage} />
            <Route component={NotFoundPage} />
        </Switch>
        <GoogleAnalytics />
    </Router>
);

जैसा कि कहा गया:

withRouter हर बार रूट बदलने के साथ ही प्रॉम्प्ट के साथ प्रॉम्प्ट के साथ अपने कंपोनेंट को फिर से रेंडर करेगा

इसलिए जब मार्ग बदल जाता है, तो GoogleAnalyticsघटक अपडेट हो जाएगा, उसे प्रॉपर के रूप में नया स्थान प्राप्त होगा, और history.actionया तो PUSHएक नए इतिहास आइटम के लिए होगा या POPइतिहास के माध्यम से पीछे की तरफ जाने का संकेत देगा (जो मुझे लगता है कि पृष्ठ दृश्य को ट्रिगर नहीं करना चाहिए, लेकिन आप अगर समायोजित कर सकते हैं में बयान componentWillUpdateआप मनचाहे ढंग से (तुम भी कोशिश कर सकते componentDidUpdateके साथ this.propsबजाय, लेकिन मैं अनिश्चित जो बेहतर है हूँ))।


bozdoz आपने अपने पृष्ठ में ग्लोबल साइट टैग कैसे जोड़ा। क्या आपने शरीर टैग के नीचे अपने HTML पृष्ठ पर बस <script async src = " googletagmanager.com/gtag/js?id=GA_TRACKING_ID " > बुटीक / ... जोड़ दिया है ?
me-me

1
@ मैं-मैं हां। लेकिन बॉडी टैग के भीतर:<body> ... <script ...></script></body>
bozdoz

नवीनतम प्रतिक्रिया और प्रतिक्रिया रूटर के लिए कुछ ट्विक्स की आवश्यकता थी। बदलें componentWillMountकरने के लिए componentDidMount। बदले page_pathके लिए this.props.location.pathname। एक <div> में स्विच और GoogleAnalytics घटकों को लपेटें
mjhm

निश्चित नहीं है कि आप कहां देख रहे हैं componentWillMount, और यह सुनिश्चित नहीं है कि कैसे page_pathअलग है, लेकिन मैं <React.Fragment>एक के बजाय स्विच और जीए घटक लपेटने की कोशिश करूंगा div। धन्यवाद!
बोज्डोज़

2
अरे @JoshuaRobinson, मैंने नीचे लिखा है, "... मुझे लगता है कि पृष्ठ दृश्य को ट्रिगर नहीं करना चाहिए, लेकिन आप समायोजित कर सकते हैं ..."। यह प्रश्न Google Analytics को React Router के साथ एकीकृत करने के बारे में था, न कि इस बारे में कि आपको कौन-से विचार लॉग इन करने चाहिए। यह कहने के बाद, मैं अपने घटक को समायोजित कर सकता हूं, यह देखते हुए कि Google इसे उनके अंत में अलग तरह से ट्रैक करेगा। धन्यवाद।
बोज़डोज़

19

ध्यान दें कि यदि आप react-router-domपैकेज का उपयोग कर रहे हैं तो आप इसे react-router-4इस तरह से संभाल सकते हैं:

import { Router, Route } from 'react-router-dom';
import { createBrowserHistory } from 'history';

const history = createBrowserHistory();
const initGA = (history) => {
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'YOUR_IDENTIFIER_HERE', 'auto');
  ga('send', 'pageview');

  history.listen((location) => {
    console.log("tracking page view: " + location.pathname);
    ga('send', 'pageview', location.pathname);
  });
};

initGA(history);

class App extends Component { //eslint-disable-line
  render() {
    return
      (<Router history={history} >
         <Route exact path="/x" component={x} />
         <Route exact path="/y" component={y} />
       </Router>)
  }
}

ध्यान दें कि इसके लिए आपको historyपैकेज स्थापित करना होगा ( npm install history)। यह पहले से ही प्रतिक्रिया-राउटर-डोम की एक निर्भरता है इसलिए आप यहां कोई पृष्ठ भार नहीं जोड़ रहे हैं।

यह भी नोट करें: ब्राउजर राउटर घटक का उपयोग करना संभव नहीं है और इस तरह से अपने गा ट्रैकिंग को उपकरण। यह ठीक है क्योंकि राउटर ऑब्जेक्ट के आसपास BrowserRouter घटक सिर्फ एक बहुत पतला आवरण है। हम साथ यहाँ BrowserRouter कार्यक्षमता को पुन: <Router history={history}>जहां const history = createBrowserHistory();


आप कभी भी इनिग्गा नहीं कहते?
मुहम्मद उमर

@ मुहम्मदउम्र सच है, बस इसे ठीक किया
पीटर बर्ग

आप अपने स्थिर HTML में सिर्फ GA क्यों नहीं जोड़ते? मैं आपको 1 प्लस देता हूं। क्योंकि मुझे लगता है कि इतिहास वस्तु को सुनना सही तरीका है।
विंस वी।

@VinceV। आप historyअपने निर्माण के भीतर वस्तु को प्रारंभिक रूप से पहचान सकते हैं और फिर windowवस्तु पर इतिहास को संग्रहीत कर सकते हैं और इसे अपने स्क्रिप्ट स्क्रिप्ट में एक्सेस कर सकते हैं, <head>लेकिन मुझे लगता है कि अंत में आपके बिल्ड पाइपलाइन को और अधिक जटिल बनाना होगा। ¯_ (¯) _ / ¯
पीटर बर्ग

यदि आप BrowserRouterघटक का उपयोग कर रहे हैं, तो नीचे दिए गए उत्तर को देखें जो एक वैकल्पिक समाधान प्रदान करता है।
तोशे

14

मेरा सुझाव है कि उत्कृष्ट react-router-gaपैकेज का उपयोग करें जो बेहद हल्के और कॉन्फ़िगर करने में आसान है, खासकर जब BrowserRouterरैपर का उपयोग कर ।

घटक आयात करें:

import Analytics from 'react-router-ga';

तो बस <Analytics>अपने भीतर जोड़ें BrowserRouter:

<BrowserRouter>
    <Analytics id="UA-ANALYTICS-1">
        <Switch>
            <Route path="/somewhere" component={SomeComponent}/>
        </Switch>
    </Analytics>
</BrowserRouter>

यदि उपयोगकर्ता केवल पृष्ठ दृश्यों को ट्रैक करने में रुचि रखता है, तो यह एक सुपर सरल समाधान प्रतीत होता है। बहुत दुबला!
पेयो

11

मुझे यह पसंद है कि कैसे मार्क थॉमस मुलर यहाँ सुझाव देते हैं :

अपने index.js में

import ReactGA from 'react-ga'

ReactGA.initialize('YourAnalyticsID')

ReactDOM.render(<App />, document.getElementById('root'))

आपके मार्ग कहां हैं:

import React, { Component } from 'react'
import { Router, Route } from 'react-router-dom'
import createHistory from 'history/createBrowserHistory'
import ReactGA from 'react-ga'

const history = createHistory()
history.listen(location => {
    ReactGA.set({ page: location.pathname })
    ReactGA.pageview(location.pathname)
})

export default class AppRoutes extends Component {
    componentDidMount() {
        ReactGA.pageview(window.location.pathname)
    }

    render() {
        return (
            <Router history={history}>
                <div>
                    <Route path="/your" component={Your} />
                    <Route path="/pages" component={Pages} />
                    <Route path="/here" component={Here} />
                </div>
            </Router>
        )
    }
}

लघु, स्केलेबल और सरल :)


ट्रैकिंग क्यों है, एक वैश्विक, एक स्थानीय?
आइलिमिस्ट

11

चूंकि react-router v5.1.0यह एक बहुत आसान के साथ हल किया जा सकता है useLocation

usePageTracking.js

import { useEffect} from "react";
import { useLocation } from "react-router-dom";
import ReactGA from "react-ga";

const usePageTracking = () => {
  const location = useLocation();

  useEffect(() => {
    ReactGA.initialize("UA-000000000-0");
    ReactGA.pageview(location.pathname + location.search);
  }, [location]);
};

export default usePageTracking;

App.js

const App = () => {
  usePageTracking();

  return (...);
};

यह सभी देखें:

यहाँ एक छोटा होशियार संस्करण है:

usePageTracking.js

import { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";
import ReactGA from "react-ga";

const usePageTracking = () => {
  const location = useLocation();
  const [initialized, setInitialized] = useState(false);

  useEffect(() => {
    if (!window.location.href.includes("localhost")) {
      ReactGA.initialize("UA-000000000-0");
    }
    setInitialized(true);
  }, []);

  useEffect(() => {
    if (initialized) {
      ReactGA.pageview(location.pathname + location.search);
    }
  }, [initialized, location]);
};

export default usePageTracking;

मुझे यकीन नहीं है कि यह नवीनतम 'gtag' के साथ आवश्यक है। जब मैं नेविगेट करता हूं, तो डे डिबगर धक्का देने वाली घटना को सही ढंग से रिकॉर्ड करने लगता है: Processing data layer push: {event: "gtm.historyChange-v2", gtm.historyChangeSource: "pushState", gtm.oldUrlFragment: "", gtm.newUrlFragment: "", gtm.oldHistoryState: null, gtm.newHistoryState: {key: "j5xoc4", state: undefined}, gtm.oldUrl: "https://site/", gtm.newUrl: "https://site/new-url?search-params", gtm.triggers: "1_36"}और गा डैशबोर्ड में एक नया पृष्ठ दृश्य दिखाया गया है
दत्ताया

6

हमेशा लाइब्रेरी के अनुशंसित तरीके से जाएं

रिएक्ट-जीए प्रलेखन में, उन्होंने रिएक्टर राउटर के साथ उपयोग करने के लिए अनुशंसित एक सामुदायिक घटक जोड़ा है: https://github.com/react-ga/react-ga/wiki/React-Router-v4-withTracker

कार्यान्वयन

import withTracker from './withTracker';

ReactDOM.render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <Route component={withTracker(App, { /* additional attributes */ } )} />
    </ConnectedRouter>
  </Provider>,
  document.getElementById('root'),
);

कोड

import React, { Component, } from "react";
import GoogleAnalytics from "react-ga";

GoogleAnalytics.initialize("UA-0000000-0");

const withTracker = (WrappedComponent, options = {}) => {
  const trackPage = page => {
    GoogleAnalytics.set({
      page,
      ...options,
    });
    GoogleAnalytics.pageview(page);
  };

  // eslint-disable-next-line
  const HOC = class extends Component {
    componentDidMount() {
      // eslint-disable-next-line
      const page = this.props.location.pathname + this.props.location.search;
      trackPage(page);
    }

    componentDidUpdate(prevProps) {
      const currentPage =
        prevProps.location.pathname + prevProps.location.search;
      const nextPage =
        this.props.location.pathname + this.props.location.search;

      if (currentPage !== nextPage) {
        trackPage(nextPage);
      }
    }

    render() {
      return <WrappedComponent {...this.props} />;
    }
  };

  return HOC;
};

export default withTracker;

1
अगर मैं SSR (सर्वर-साइड रेंडरिंग) का उपयोग करता हूं, तो GA पृष्ठ को ताज़ा किए बिना वास्तविक पृष्ठ का शीर्षक नहीं जानता है।
फ्रांसिस रोड्रिग्स

1
आप माउंट का शीर्षक बदलकर React
Paras

पोस्ट करने का शुक्रिया!
सैलेश कोठा

कहा storeसे आता है
user_78361084

कहाँ से Providerऔर कहाँ ConnectedRouterसे आता है? यह एक अधूरा जवाब है और इसे
डाउनवोट

2

सबसे पहले, अपने index.js में गा को कॉल करने के लिए onUpdate फ़ंक्शन सेट करें

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>
  );
}

और गा.जे:

'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)};
}

यहाँ किस राउटर संस्करण का उपयोग किया जाता है?
पावन

यह राउटर डोम v2 या v3 के लिए है, न कि v4
Hugo Gresse

2

यहाँ कुछ काम के साथ सभी रास्तों को ट्रैक करने का एक सरल तरीका है:

npm i --save history react-ga

एक फ़ाइल बनाएँ history.js

import { createBrowserHistory } from "history"
import ReactGA from "react-ga"

ReactGA.initialize(process.env.REACT_APP_GA)

const history = createBrowserHistory()
history.listen((location) => {
    ReactGA.pageview(location.pathname)
})

// workaround for initial visit
if (window.performance && (performance.navigation.type === performance.navigation.TYPE_NAVIGATE)) {
    ReactGA.pageview("/")
}

export default history

और फिर इसे आयात करें जहां आपका सेट है Router

import history from "./history"

...

class Route extends Component {
render() {
    return (
        <Router history={history}>
            <Switch>
              <Route path="/" exact component={HomePage} />
              ...
            </Switch>
        </Router>
    )
}

export default Route

संदर्भ:

गुस्तावो गोंजालेज | medium.com

इतिहास | GitHub


2

मेरा सुझाव है कि सेगमेंट एनालिटिक्स लाइब्रेरी का उपयोग करें और प्रतिक्रिया-राउटर लाइब्रेरी का उपयोग करके पेज कॉल को ट्रैक करने के लिए रिएक्ट क्विकस्टार्ट गाइड का पालन ​​करें । जब पेज रेंडर करता है और इनवॉइस कॉल का उपयोग करने के लिए आप घटक को संभालने की अनुमति दे सकते हैं। नीचे दिए गए उदाहरण से पता चलता है कि आप ऐसा कैसे कर सकते हैं:<Route />componentDidMountpage

    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>
        );
      }
    }

मैं https://github.com/segmentio/analytics-react का अनुरक्षक हूं । सेगमेंट के साथ, यदि आप बिना कोई अतिरिक्त कोड लिखने के कई एनालिटिक्स टूल (हम 250+ से अधिक गंतव्यों का समर्थन करते हैं) को आज़माने के इच्छुक हैं, तो आप अलग-अलग गंतव्यों को एक स्विच के फ्लिप पर बंद कर सकते हैं। 🙂


1

यदि आप हैश या ब्राउज़र इतिहास का उपयोग करते हैं तो आप कर सकते हैं:

import trackingHit from 'tracking';

import { Router, browserHistory } from 'react-router';
browserHistory.listen(trackingHit);
// OR
import { Router, hashHistory } from 'react-router';
hashHistory.listen(trackingHit);

कहाँ ./tracking.es6

export default function(location) {
    console.log('New page hit', location.pathname);
    // Do your shizzle here
}

0

आपके index.js के साथ बुनियादी प्रतिक्रिया-गा कार्यान्वयन

var ReactGA = require('react-ga'); // require the react-ga module
ReactGA.initialize('Your-UA-ID-HERE'); // add your UA code 

function logPageView() { // add this function to your component
  ReactGA.set({ page: window.location.pathname + window.location.search });
  ReactGA.pageview(window.location.pathname + window.location.search);
}

React.render((
<Router history={createBrowserHistory()} onUpdate={logPageView} > // insert onUpdate props here
    <Route path="/" component={App}>
        <IndexRoute component={Home} onLeave={closeHeader}/>
        <Route path="/about" component={About} onLeave={closeHeader}/>
        <Route path="/gallery" component={Gallery} onLeave={closeHeader}/>
        <Route path="/contact-us" component={Contact} onLeave={closeHeader}>
            <Route path="/contact-us/:service" component={Contact} onLeave={closeHeader}/>
        </Route>
        <Route path="/privacy-policy" component={PrivacyPolicy} onLeave={closeHeader} />
        <Route path="/feedback" component={Feedback} onLeave={closeHeader} />
    </Route>
    <Route path="*" component={NoMatch} onLeave={closeHeader} />
</Router>), document.getElementById('root'));

@BigDong मुझे नहीं पता कि हैदर क्या है। आपको ओपी से यह सवाल पूछना होगा क्योंकि रेंडर कोड उसका है। मैं सिर्फ यह दिखा रहा हूं कि आप उसके कोड के लिए रिएक्ट-गा कैसे लागू करेंगे (मेरी // टिप्पणियों के लिए देखें)
इसहाक पाक

0

@ David-l-walsh और @bozdoz सुझावों के आधार पर

मैंने एक HOC बनाया जो कार्य और कार्य को अंजाम देता है window.ga('set','page','{currentUrl})और आसानी से window.ga('send', 'pageview');सीधे राउटर पृष्ठ में उपयोग किया जाता है ...

यह HOC है:

import React from 'react';
import { history } from '../../store'; // or wherever you createBrowserHistory(); invokation is

function withGAHistoryTrack(WrappedComponent) {
  return class extends React.Component {
    constructor(props) {
      super(props);
    }

    componentDidMount() {
      const { location } = history;
      const page = location.pathname + location.search;

      if (typeof window.ga === 'function') {
        window.ga('set', 'page', page);
        window.ga('send', 'pageview');
      }
    }

    render() {
      return <WrappedComponent {...this.props} />;
    }
  };
}

export default withGAHistoryTrack;

और राउटर पेज में इस तरह से उपयोग किया जाता है:

<Route
 path={'yourPath'}
 component={withGAHistoryTrack(yourComponent)}
 exact
/>

0

किसी घटना (जैसे onClick आदि) पर गतिशील रूप से url अपडेट करने के लिए, निम्नलिखित का उपयोग किया जा सकता है:

 //Imports
 import ReactGA from "react-ga";
 import { createBrowserHistory } from "history";

 // Add following on some event, like onClick (depends on your requirement)
 const history = createBrowserHistory();
 ReactGA.initialize("<Your-UA-ID-HERE>");
 ReactGA.pageview(history.location.pathname);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.