Реагировать на Google Analytics - Как проверить, инициализирован ли? - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь реализовать response-ga, но только на рабочем сервере (у меня есть локальные / dev и prod-серверы).

Итак, я хотел бы создать текстовое поле в backoffice, значение которого равносохранено в базе данных.

Затем на лицевой стороне я инициализирую response-ga, только если у меня есть значение в базе данных.

Чтобы достичь этого, я пытаюсь сделать это в componentDidUpdateв App.jsx.

Я получаю все свои данные в бэк-офисе через:

componentDidMount() {
    // I get my data in this.props.data_admin
    this.props.list_admin();
}

Затем в componentDidUpdate(prevProps, prevState) я проверяю, установлен ли this.props.data_admin и не равен ли он нулю, икогда я получил значения, я хотел бы инициализировать response-ga:

componentDidUpdate(prevProps, prevState, snapshot) {
    if (this.props.data_admin) {
        // this.props.data_admin.trackingNumber = UA-XXXXXXXXX
        ReactGA.initialize(this.props.data_admin.trackingNumber);
    }
}

Но это будет происходить много раз (каждый раз, когда обновляется App.jsx).Поэтому я должен проверить перед инициализацией, если это уже сделано.Как я могу проверить, инициализирована ли реакции-ga?

Спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Я думаю, вам не следует делать это в componentDidUpdate, а в componentDidMount после того, как вы получили свои данные.

Процесс извлечения данных - это асинхронный вызов вашей бэкэнда / базы данных, он должен вернутьОбещание, которое разрешается с полученными данными.Затем вы можете инициализировать реакции-га.

componentDidMount() {
    // I am assuming this.props.list_admin() returns your data
    this.props.list_admin().then((data_admin) => {
      if (data_admin) {
        // data_admin.trackingNumber = UA-XXXXXXXXX
        ReactGA.initialize(data_admin.trackingNumber);
      }
    });
}
0 голосов
/ 29 мая 2019

Наконец то, что я сделал:

Я вызвал this.props.list_admin(); в App.jsx конструктор и создал переменную состояния, инициализированную в false:

constructor(props) {
    super(props);

    this.state = {
        googleAnalyticsInitialized: false,
    };

    this.props.list_admin();
}

Затем в componentDidupdate я проверил значения с this.props.data_admin, а если googleAnalyticsInitialized - ложь. Если это так, я инициализирую Google Analytics с помощью идентификатора, полученного при вызове API:

componentDidUpdate(prevProps, prevState, snapshot) {
    if (this.props.data_admin && this.props.data_admin.idGoogleAnalytics && !this.state.googleAnalyticsInitialized) {
        ReactGA.initialize(this.props.data_admin.idGoogleAnalytics);
        this.setState({googleAnalyticsInitialized: true});
    }
}

Спасибо @Chukwuemeka Onyenezido, который помог мне и направил меня на правильный путь.

...