홈페이지>웹사이트 구축 리소스>기타 리소스

로컬로 예제를 구축하려면 다음을 실행하십시오.

yarn
cd example
yarn
yarn start

그런 다음 브라우저에서 http://localhost:8886 엽니 다.

설치

yarn add react-monaco-editor

웹 팩과 함께 사용합니다

 import React from 'react' ;
import { createRoot } from "react-dom/client" ;
import MonacoEditor from 'react-monaco-editor' ;

class App extends React . Component {
  constructor ( props ) {
    super ( props ) ;
    this . state = {
      code : '// type your code...' ,
    }
  }
  editorDidMount ( editor , monaco ) {
    console . log ( 'editorDidMount' , editor ) ;
    editor . focus ( ) ;
  }
  onChange ( newValue , e ) {
    console . log ( 'onChange' , newValue , e ) ;
  }
  render ( ) {
    const code = this . state . code ;
    const options = {
      selectOnLineNumbers : true
    } ;
    return (
      < MonacoEditor
        width = "800"
        height = "600"
        language = "javascript"
        theme = "vs-dark"
        value = { code }
        options = { options }
        onChange = { :: this . onChange }
        editorDidMount = { :: this . editorDidMount }
      />
    ) ;
  }
}

const container = document . getElementById ( 'root' ) ;
const root = createRoot ( container ) ;
root . render ( < App /> ) ;

Monaco Webpack 플러그인 monaco-editor-webpack-plugin webpack.config.js 에 추가하십시오.

 const MonacoWebpackPlugin = require ( 'monaco-editor-webpack-plugin' ) ;
module . exports = {
  plugins : [
    new MonacoWebpackPlugin ( {
      // available options are documented at https://github.com/microsoft/monaco-editor/blob/main/webpack-plugin/README.md#options
      languages : [ 'json' ]
    } )
  ]
} ;

SIDENOTE : Monaco Editor는 내부적으로 CSS 가져 오기를 사용하므로 프로젝트에서 CSS 모듈을 사용하는 경우 기본적으로 충돌을 일으킬 수 있습니다. 이를 피하기 위해-App 및 Monaco-Editor 패키지 용 CSS-Loader를 별도의 CSS-Loader :

 // Specify separate paths
const path = require ( 'path' ) ;
const APP_DIR = path . resolve ( __dirname , './src' ) ;
const MONACO_DIR = path . resolve ( __dirname , './node_modules/monaco-editor' ) ;

{
  test : / .css$ / ,
  include : APP_DIR ,
  use : [ {
    loader : 'style-loader' ,
  } , {
    loader : 'css-loader' ,
    options : {
      modules : true ,
      namedExport : true ,
    } ,
  } ] ,
} , {
  test : / .css$ / ,
  include : MONACO_DIR ,
  use : [ 'style-loader' , 'css-loader' ] ,
} 

속성

아래의 모든 속성은 선택 사항입니다.

이벤트 및 방법

Monaco 인터페이스 ieditor를 참조하십시오.

Monaco 인터페이스는 Import에서 사용할 수 있습니다

 import { monaco } from 'react-monaco-editor' ; 

Q & A

구문 하이라이트 / 자동 완성 / 검증을받지 못합니다.

Monaco Webpack 플러그인을 사용하거나 Monaco의 ESM 버전을로드하는 방법에 대한 지침을 따르십시오.

monacoeditor 인스턴스와 상호 작용하는 방법

editorDidMount 의 첫 번째 매개 변수를 사용하거나 editorDidMount 이벤트가 시작된 후 ref (예 <MonacoEditor ref="monaco"> )를 사용합니다.

그런 다음 this.refs.monaco.editor , 예를 this.refs.monaco.editor.focus() 인스턴스 메소드를 호출 할 수 있습니다.

편집자의 가치를 얻는 방법

this.refs.monaco.editor.getValue() 또는 Model 인스턴스의 메소드를 통해 :

 const model = this . refs . monaco . editor . getModel ( ) ;
const value = model . getValue ( ) ;

편집기 장착 전에 무언가를하십시오

예를 들어, 편집기 장착 전에 JSON 스키마를 구성하려면 editorWillMount(monaco) 와 함께 이동할 수 있습니다.

 class App extends React . Component {
    editorWillMount ( monaco ) {
        monaco . languages . json . jsonDefaults . setDiagnosticsOptions ( {
            validate : true ,
            schemas : [ {
                uri : "http://myserver/foo-schema.json" ,
                fileMatch : [ '*' ] ,
                schema : {
                    type : "object" ,
                    properties : {
                        p1 : {
                            enum : [ "v1" , "v2" ]
                        } ,
                        p2 : {
                            $ref : "http://myserver/bar-schema.json"
                        }
                    }
                }
            } ]
        } ) ;
    }
    render ( ) {
        return (
          < MonacoEditor language = "json" editorWillMount = { this . editorWillMount } />
        ) ;
    }
}

여러 테마를 사용하십시오

모나코는 하나의 테마 만 지원합니다.

DIFF 편집기를 사용하는 방법

 import React from 'react' ;
import { MonacoDiffEditor } from 'react-monaco-editor' ;

class App extends React . Component {
  render ( ) {
    const code1 = "// your original code..." ;
    const code2 = "// a different version..." ;
    const options = {
      //renderSideBySide: false
    } ;
    return (
      < MonacoDiffEditor
        width = "800"
        height = "600"
        language = "javascript"
        original = { code1 }
        value = { code2 }
        options = { options }
      />
    ) ;
  }
}

create-react-app 사용하여 사용합니다

create-react-app 과 함께 react-monaco-editor 사용하는 가장 쉬운 방법은 React-App-Lewreated Project를 사용하는 것입니다. 설정하려면 다음 단계가 필요합니다.

  1. react-app-rewired : npm install -D react-app-rewired
  2. packages.json 의 스크립트 섹션에서 react-app-rewiredreact-scripts 교체하십시오.
  3. 다음 내용으로 프로젝트의 루트 디렉토리에서 config-overrides.js 만듭니다.
 const MonacoWebpackPlugin = require ( 'monaco-editor-webpack-plugin' ) ;

module . exports = function override ( config , env ) {
  config . plugins . push ( new MonacoWebpackPlugin ( {
    languages : [ 'json' ]
  } ) ) ;
  return config ;
}

자세한 내용을 확인하려면 react-app-rewired 의 문서를 여기에서 확인하십시오.

특허

MIT, 자세한 내용은 라이센스 파일을 참조하십시오.

확장하다
추가 정보