我的 monaco 编辑器实例无法更新
2021-08-17
1728
问题:
我试图将 monaco-editor/react 集成到我的 Web 应用程序中并已成功加载它,但每当我在前端更改它时都会遇到错误。
一切都按预期工作,直到我以任何方式修改我的
editor
实例(即添加文本、调整大小等)。
我正在使用的 Web 应用程序 Grafana 在我与编辑器交互时都会出现此错误
我的错误:
我的代码:
import Editor from '@monaco-editor/react';
...
interface MonacoEditorProps {
value: string;
theme: string;
language: string;
onChange: (value?: string | undefined) => void;
}
class MonacoEditor extends React.PureComponent<MonacoEditorProps> {
getEditorValue: any | undefined;
editorInstance: any | undefined;
onSourceChange = () => {
this.props.onChange(this.getEditorValue());
};
onEditorDidMount = (getEditorValue: any, editorInstance: any) => {
this.getEditorValue = getEditorValue;
this.editorInstance = editorInstance;
};
updateDimensions() {
this.editorInstance.layout();
}
render() {
const source = this.props.value;
if (this.editorInstance) {
this.editorInstance.layout();
}
return (
<div onBlur={this.onSourceChange}>
<Editor
height={'33vh'}
language={this.props.language}
theme={this.props.theme}
value={source}
onMount={this.onEditorDidMount}
/>
</div>
);
}
}
不要以为我偏离了 编辑器实例文档 太多。有人知道我是如何错误地更新编辑器的吗?
1个回答
我不知道为什么
onMount
仍然可用,但我已经使用 React 组件的常规
componentDidMount
方法进行布局,并使用 ref 作为实际编辑器实例。这非常有效:
private editorRef = React.createRef<Editor>();
...
<Editor
ref={this.editorRef}
language={language}
options={opts}
/>
和
public componentDidMount(): void {
this.editorRef.current?.editor?.layout();
if (autofocus) {
this.editorRef.current?.editor?.focus();
}
}
Mike Lischke
2021-08-18