我试图在我的React应用程序中使用来自的登录组件。它工作的很好,但我似乎不能让任何事件发生。例如-
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;发布于 2019-05-13 22:38:54
因为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;https://stackoverflow.com/questions/56120549
复制相似问题