Page d'accueil>Ressources de création de sites Web>Autres ressources

Exemples

Pour construire les exemples localement, exécutez:

yarn
cd example
yarn
yarn start

Ensuite, ouvrez http://localhost:8886 dans un navigateur.

Installation

yarn add react-monaco-editor

En utilisant avec 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 /> ) ;

Ajoutez le plugin WebPack Monaco monaco-editor-webpack-plugin à votre 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: L'éditeur Monaco utilise les importations CSS en interne, donc si vous utilisez des modules CSS dans votre projet - vous obtiendrez probablement des conflits par défaut. Afin d'éviter cela - séparez le chargeur CSS pour l'application et le package monaco-éditeur:

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

Propriétés

Toutes les propriétés ci-dessous sont facultatives.

Événements et méthodes

Reportez-vous à l'interface Monaco Iediter.

Les interfaces Monaco disponibles par importation

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

Q&R

Je ne reçois pas de syntaxe de mise en surbrillance / assuriement automatique / validation.

Assurez-vous d'utiliser le plugin Monaco Webpack ou de suivre les instructions sur la façon de charger la version ESM de Monaco.

Comment interagir avec l'instance monacoeditor

En utilisant le premier paramètre d' editorDidMount , ou en utilisant un ref (par exemple <MonacoEditor ref="monaco"> ) après le licenciement de l'événement editorDidMount .

Ensuite, vous pouvez invoquer des méthodes d'instance via this.refs.monaco.editor , par exemple this.refs.monaco.editor.focus() pour concentrer l'instance monacoeditor.

Comment obtenir la valeur de l'éditeur

Utilisation de this.refs.monaco.editor.getValue() ou via la méthode d'instance Model :

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

Faire quelque chose avant le monté de l'éditeur

Par exemple, vous souhaiterez peut-être configurer certains schémas JSON avant le montage de l'éditeur, puis vous pouvez aller avec 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 } />
        ) ;
    }
}

Utilisez plusieurs thèmes

Monaco ne prend en charge qu'un thème.

Comment utiliser l'éditeur 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 }
      />
    ) ;
  }
}

Utilisation avec create-react-app

Le moyen le plus simple d'utiliser le react-monaco-editor avec create-react-app est d'utiliser le projet réadapté React-App. Pour le configurer, les étapes suivantes sont nécessaires:

  1. Installer react-app-rewired : npm install -D react-app-rewired
  2. Remplacez react-scripts par react-app-rewired dans la section Scripts de vos packages.json
  3. Créez un config-overrides.js dans le répertoire racine de votre projet avec le contenu suivant:
 const MonacoWebpackPlugin = require ( 'monaco-editor-webpack-plugin' ) ;

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

Pour plus d'informations, consultez la documentation de react-app-rewired ici.

Licence

MIT, voir le fichier de licence pour plus de détails.

Développer
Informations supplémentaires