我创建了一个组件,该组件将HTMLElement作为道具,并在渲染时将函数分配给该元素:
class FunctionHelper extends React.Component<{ dom: HTMLElement }, {}> {
constructor() {
super();
}
render() {
(this.props.dom as any).validateFunction = this.TestEvaluation;
console.log('Render App');
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<p className="App-intro">
To get started, edit <code>src/App.tsx</code> and save to reload.
</p>
</div>
);
}
TestEvaluation(params: any): void {
// console.log('Validationg Body');
console.log("Validate called");
console.log(params);
params.completed({ allowEvent: false });
}
}
ReactDOM.render(
<FunctionHelper dom={document.getElementById('root') as HTMLElement} />,
document.getElementById('root') as HTMLElement
);
作为模板,我使用以下html文件调用dom元素上的函数:
<!doctype html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
<!-- Office JavaScript API -->
<script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.debug.js"></script>
<title>React App</title>
</head>
<body>
<div id="root"></div>
<script>
function validateMail(params) {
console.log('Calling Function Validate')
let element = document.getElementById('root');
element.validateFunction(params);
}
</script>
</body>
</html>
然后我可以使用
validateMail
作用