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