Inicio>Recursos para la creación de sitios web>Otros recursos

Ejemplos

Para construir los ejemplos localmente, ejecute:

yarn
cd example
yarn
yarn start

Luego abra http://localhost:8886 en un navegador.

Instalación

yarn add react-monaco-editor

Usando con Webpack

 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 /> ) ;

Agregue el complemento Monaco Webpack monaco-editor-webpack-plugin a su 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' ]
    } )
  ]
} ;

Nota al margen: el editor de Monaco usa las importaciones CSS internamente, por lo que si está utilizando módulos CSS en su proyecto, es probable que obtenga conflicto por defecto. Para evitar eso, el cargador CSS separado para la aplicación y el paquete de monaco-editor:

 // 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' ] ,
} 

Propiedades

Todas las propiedades a continuación son opcionales.

Eventos y métodos

Consulte el IEDitor de la interfaz Mónaco.

Las interfaces de Mónaco disponibles por importación

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

Preguntas y respuestas

No obtengo la sintaxis resaltando / autocompleto / validación.

Asegúrese de usar el complemento Monaco Webpack o siga las instrucciones sobre cómo cargar la versión ESM de Monaco.

Cómo interactuar con la instancia de Monacoeditor

Usando el primer parámetro de editorDidMount , o utilizando una ref (por ejemplo <MonacoEditor ref="monaco"> ) después de que haya disparado el evento editorDidMount .

Luego puede invocar métodos de instancias a través de this.refs.monaco.editor , por ejemplo, this.refs.monaco.editor.focus() para enfocar la instancia de monacoeditor.

Cómo obtener el valor del editor

Usando this.refs.monaco.editor.getValue() o mediante el método de instancia Model :

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

Haz algo antes de montar el editor

Por ejemplo, es posible que desee configurar algunos esquemas JSON antes de montar el editor, luego puede ir con 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 } />
        ) ;
    }
}

Usar múltiples temas

Mónaco solo admite un tema.

Cómo usar el editor de 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 }
      />
    ) ;
  }
}

Uso con create-react-app

La forma más fácil de usar el react-monaco-editor con create-react-app es usar el proyecto react-app-srewied. Para configurarlo, se requieren los siguientes pasos:

  1. npm install -D react-app-rewired react-app-rewired
  2. Reemplace react-scripts por react-app-rewired en la sección de scripts de sus packages.json
  3. Cree una config-overrides.js en el directorio raíz de su proyecto con el siguiente contenido:
 const MonacoWebpackPlugin = require ( 'monaco-editor-webpack-plugin' ) ;

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

Para obtener más información, consulte la documentación de react-app-rewired aquí.

Licencia

MIT, consulte el archivo de licencia para obtener detalles.

Expandir
Información adicional