React Google Analytics - 如何检查是否已初始化?

React Google Analytics - How to check if initialized?

我正在尝试实施 react-ga,但仅限于生产服务器(我有本地/开发和生产服务器)。

所以,我想在后台创建一个文本字段,其值保存在数据库中。

然后在前端,只有当我在数据库中有一个值时,我才初始化react-ga。

为了实现这一点,我正在 App.jsx 中尝试在 componentDidUpdate 中执行此操作。

我通过 :

在后台检索我所有的数据集
componentDidMount() {
    // I get my data in this.props.data_admin
    this.props.list_admin();
}

然后在 componentDidUpdate(prevProps, prevState) 中我检查 this.props.data_admin 是否设置且不为空,当我得到值时我想初始化 react-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)。所以我应该在初始化之前检查它是否已经完成。 如何检查 react-ga 是否已经初始化?

感谢您的帮助

我认为您不应该在 componentDidUpdate 中执行此操作,而应在 componentDidMount 中检索数据后执行此操作。

您的数据检索过程是对您的 backend/database 的异步调用,它应该 return 一个使用检索到的数据解析的 Promise。然后你可以初始化 react-ga.

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

最后我做了什么:

我在 App.jsx 构造函数中调用了 this.props.list_admin(); 并创建了一个初始化为 false 的状态变量:

constructor(props) {
    super(props);

    this.state = {
        googleAnalyticsInitialized: false,
    };

    this.props.list_admin();
}

然后,在 componentDidupdate 中,我检查了 this.props.data_admin 中的值,如果 googleAnalyticsInitialized 为假。如果是,我使用从对 API 的调用中收到的 ID 初始化 Google Analytics:

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 帮助我并指导我走上正确的道路。

我本来希望找到比这更好的答案,但我就是这么做了

try {
    console.log(theObject);
} catch(e) {}

不是很优雅,有点脏,我想更多地了解发生了什么,但这行得通。

背景故事

我正在尝试访问 reducer 中的商店并从 index.js 导入商店对象是我当前的 "solution"