React 中的 ApplicationInsights

Posted

技术标签:

【中文标题】React 中的 ApplicationInsights【英文标题】:ApplicationInsights in React 【发布时间】:2022-01-07 04:33:30 【问题描述】:

我对应用程序洞察力相当陌生,我正试图让它在我的 react 应用程序上运行,因为有一个包装器组件启动配置/连接到 application-insights 服务。

当我实例化 Wrapper-Component 并嵌套另一个组件时,该组件应该有权访问 appInsights-object(使 trackEvent、-trace、-error 方法可用),其中子组件声明 appInsights 未定义.

因此,简化后的组件结构本质上看起来像这样:

<WrapperService> // initializes appInsights
  <ChildComponent> // should have access to the appInsights-Object in Order to fire Events
</WrapperService>

具体说明手头的目标:如何传递 appInsights 对象以便能够在我想要的任何组件中使用它?

还有其他建议吗?非常感谢!

【问题讨论】:

【参考方案1】:

尝试将应用程序洞察添加到您可以使用 React Hooks 的子组件中。

按照以下步骤实现:

在 React 中添加应用洞察参考 here

在您的 react 应用中添加应用洞察后尝试创建上下文文件,如 AppInsightsContext.js

import React,  createContext  from "react";
import  reactPlugin  from "./AppInsights";
const AppInsightsContext = createContext(reactPlugin);
const AppInsightsContextProvider = ( children ) => 

    return (
        <AppInsightsContext.Provider value=reactPlugin>
        children
    </AppInsightsContext.Provider>
    );
;
export  AppInsightsContext, AppInsightsContextProvider ;

现在,我们有一个设置 reactPlugin 的组件。我们需要将它添加到我们的 react 应用程序中。

Layout/index.js 文件中,我们需要将上下文设置为高。

const LayoutWithContext = ( location, children ) => (
< AppInsightsContextProvider>
    <>
    <Headroom
        upTolerance=10
        downTolerance=10
        style= zIndex: "20", height: "6.5em"  >
        
        < Header location=location />
    < /Headroom>
    < Container text>children</Container>
    < Footer />
    </>
< /AppInsightsContextProvider>
);

上下文现在正在使用中,所有 children 组件都可以在我们的子组件中访问它。

如果您想使用 React 插件的标准页面交互跟踪,您可以将它与 HOC(高阶组件)结合使用

import React from "react";
import Headroom from "react-headroom";
import  Container  from "semantic-ui-react";
import Footer from "../Footer";
import Header from "../Header";
import "semantic-ui-css/semantic.min.css";
import  AppInsightsContextProvider  from "../../AppInsightsContext";
import withAppInsights from "../../AppInsights";

const Layout = withAppInsights(( location, children ) => (
    <>
    <Headroom
    upTolerance=10
    downTolerance=10
    style= zIndex: "20", height: "6.5em"  >
        <Header location=location />
    </Headroom>
    <Container text>children</Container>
    <Footer />
    </>
));

const LayoutWithContext = ( location, children ) => (
    <AppInsightsContextProvider>
        <Layout location=location children=children />
    </AppInsightsContextProvider>
);

export default LayoutWithContext;

将上下文公开为 Hook

我们可以使用新的 Context-provided react 插件做的最后一件事是让它更容易访问,为此我们将使用 useContext Hook。为此,只需更新AppInsightsContext.js

const useAppInsightsContext = () => useContext(AppInsightsContext);

创建用于跟踪事件的 Hook 参考 here

更多信息请参考this article

【讨论】:

如果回答对您有帮助,请Accept it as an Answer,以便遇到相同问题的其他人可以找到此解决方案并解决他们的问题。

以上是关于React 中的 ApplicationInsights的主要内容,如果未能解决你的问题,请参考以下文章

React 深入系列1:React 中的元素组件实例和节点

React开发(214):React中的Fragments

将 Relay 中的数据与 React Native 中的 react-navigation 一起使用时,未获取 Relay 中的数据

浅析react中的react-router和react-router-dom

深入理解react中的虚拟DOMdiff算法

深入理解react中的虚拟DOMdiff算法