【问题标题】:Event handlers of Microsoft Graph Toolkit components not called in React appMicrosoft Graph Toolkit 组件的事件处理程序未在 React 应用程序中调用
【发布时间】:2019-05-15 02:04:09
【问题描述】:

我正在尝试在我的 React 应用程序中使用 Microsoft Graph Toolkit 中的登录组件。它工作正常,但我似乎无法触发任何事件。比如——

import React from "react";
import { MgtLogin, Providers, MsalProvider } from "@microsoft/mgt";
import "./App.css";

Providers.globalProvider = new MsalProvider({
  clientId: "a974dfa0-9f57-49b9-95db-90f04ce2111a"
});

function handleLogin() {
  console.log("login completed");
}

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <mgt-login loginCompleted={handleLogin} />
      </header>
    </div>
  );
}

export default App;

handleLogin 永远不会被调用。

更新

这是它如何与钩子一起使用。

import React, { useEffect, useRef } from "react";
import { Providers, MsalProvider, LoginType } from "@microsoft/mgt";
import "./App.css";

Providers.globalProvider = new MsalProvider({
  clientId: "a974dfa0-9f57-49b9-95db-90f04ce2111a",
  loginType: LoginType.Popup
});

function App() {
  const loginComponent = useRef(null);

  useEffect(() => {
    console.log("loginComponent", loginComponent);
    loginComponent.current.addEventListener("loginCompleted", () =>
      console.log("Logged in!")
    );
  }, []);

  return (
    <div className="App">
      <header className="App-header">
        <mgt-login ref={loginComponent} />
      </header>
    </div>
  );
}

export default App;

【问题讨论】:

    标签: reactjs web-component microsoft-graph-toolkit


    【解决方案1】:

    因为 React 实现了自己的合成事件系统,所以如果不使用变通方法,它就无法侦听来自自定义元素的 DOM 事件。您需要使用ref 引用工具包组件,并使用addEventListener 手动附加事件侦听器。

    import React, { Component } from 'react';
    import { MgtLogin, Providers, MsalProvider } from "@microsoft/mgt";
    import "./App.css";
    
    class App extends Component {
    
        constructor(){
            super();
            Providers.globalProvider = new MsalProvider({
                clientId: "a974dfa0-9f57-49b9-95db-90f04ce2111a"
            });
        }
    
        render() {
            return (
                <div className="App">
                    <header className="App-header">
                        <mgt-login ref="loginComponent" />
                    </header>
                </div>
            );
        }
    
        handleLogin() {
            console.log("login completed");
        }
    
        componentDidMount() {
            this.refs.loginComponent.addEventListener('loginCompleted', this.handleLogin);
        }
    }
    
    export default App;
    

    【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2017-06-14
    相关资源
    最近更新 更多