parent
51c6a43627
commit
e39d373e16
4 changed files with 116 additions and 1 deletions
@ -0,0 +1,97 @@ |
|||||||
|
import React from "react"; |
||||||
|
import { render } from "react-dom"; |
||||||
|
import MonacoEditor, { MonacoDiffEditor } from "react-monaco-editor"; |
||||||
|
|
||||||
|
class CodeEditor extends React.Component { |
||||||
|
constructor() { |
||||||
|
super(); |
||||||
|
this.state = { |
||||||
|
code: "// type your code... \n", |
||||||
|
theme: "vs-light", |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
onChange = (newValue) => { |
||||||
|
console.log("onChange", newValue); // eslint-disable-line no-console
|
||||||
|
}; |
||||||
|
|
||||||
|
editorDidMount = (editor) => { |
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log("editorDidMount", editor, editor.getValue(), editor.getModel()); |
||||||
|
this.editor = editor; |
||||||
|
}; |
||||||
|
|
||||||
|
changeEditorValue = () => { |
||||||
|
if (this.editor) { |
||||||
|
this.editor.setValue("// code changed! \n"); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
changeBySetState = () => { |
||||||
|
this.setState({ code: "// code changed by setState! \n" }); |
||||||
|
}; |
||||||
|
|
||||||
|
setDarkTheme = () => { |
||||||
|
this.setState({ theme: "vs-dark" }); |
||||||
|
}; |
||||||
|
|
||||||
|
setLightTheme = () => { |
||||||
|
this.setState({ theme: "vs-light" }); |
||||||
|
}; |
||||||
|
|
||||||
|
render() { |
||||||
|
const { code, theme } = this.state; |
||||||
|
const options = { |
||||||
|
selectOnLineNumbers: true, |
||||||
|
roundedSelection: false, |
||||||
|
readOnly: false, |
||||||
|
cursorStyle: "line", |
||||||
|
automaticLayout: false, |
||||||
|
}; |
||||||
|
return ( |
||||||
|
<div> |
||||||
|
<div> |
||||||
|
<button onClick={this.changeEditorValue} type="button"> |
||||||
|
Change value |
||||||
|
</button> |
||||||
|
<button onClick={this.changeBySetState} type="button"> |
||||||
|
Change by setState |
||||||
|
</button> |
||||||
|
<button onClick={this.setDarkTheme} type="button"> |
||||||
|
Set dark theme |
||||||
|
</button> |
||||||
|
<button onClick={this.setLightTheme} type="button"> |
||||||
|
Set light theme |
||||||
|
</button> |
||||||
|
</div> |
||||||
|
<hr /> |
||||||
|
<MonacoEditor |
||||||
|
height="400" |
||||||
|
language="javascript" |
||||||
|
value={code} |
||||||
|
options={options} |
||||||
|
onChange={this.onChange} |
||||||
|
editorDidMount={this.editorDidMount} |
||||||
|
theme={theme} |
||||||
|
/> |
||||||
|
</div> |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
const ReactMonacoEditor = () => { |
||||||
|
return ( |
||||||
|
<div> |
||||||
|
<h2>Monaco Editor Sample (controlled mode)</h2> |
||||||
|
<CodeEditor /> |
||||||
|
<hr /> |
||||||
|
<h2>Another editor (uncontrolled mode)</h2> |
||||||
|
{/* <AnotherEditor /> */} |
||||||
|
<hr /> |
||||||
|
<h2>Another editor (showing a diff)</h2> |
||||||
|
{/* <DiffEditor /> */} |
||||||
|
</div> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
export default ReactMonacoEditor; |
Loading…
Reference in new issue