簡體   English   中英

如何在 React 功能組件中使用 Monaco Editor?

[英]How to use Monaco Editor in a React functional component?

我的 React 項目中有一個功能組件。 我已將 Monaco 編輯器依賴項包含為

import * as Monaco from 'monaco-editor/esm/vs/editor/editor.api';

如何從這里使用Editor對象來實際渲染和測試 monaco-editor 的東西?

我有如下代碼,

  return (
    <Flex>
      <Flex.Box auto>
        <Input.Textarea
          ref={ref}
          size="small"
          value={value}
          onChange={onChange}
          onKeyPress={(e) => { handleKeyDown(e, value); }}
          error={error}
          readOnly={readOnly}
        />
        <MonacoEnvironment.
      </Flex.Box>
      <Flex align="flex-start" w="21px">
        {icon}
      </Flex>
    </Flex>
  );

我正在查看 MonacoEnvironment 對象,但我對將其設置為編輯器一無所知。

我想在我的代碼中模仿以下功能,

monaco.editor.create(document.getElementById('container'), {
  value: [
    'function x() {',
    '\tconsole.log("Hello world!");',
    '}'
  ].join('\n'),
  language: 'javascript'
});

我在這里看到兩個選項:

  1. 向您的渲染樹添加一個 HTML 元素,它可以托管編輯器。 您在第二個代碼片段中有document.getElementById調用。 這需要一個帶有 id container的元素:
  return (
    <Flex>
      <Flex.Box auto>
        <Input.Textarea
          ref={ref}
          size="small"
          value={value}
          onChange={onChange}
          onKeyPress={(e) => { handleKeyDown(e, value); }}
          error={error}
          readOnly={readOnly}
        />
        <div id="container />
      </Flex.Box>
      <Flex align="flex-start" w="21px">
        {icon}
      </Flex>
    </Flex>
  );
  1. 使用 Monaco 編輯器 React 包裝器(例如react-monaco-editor )並將其添加到您的渲染樹中:
  return (
    <Flex>
      <Flex.Box auto>
        <Input.Textarea
          ref={ref}
          size="small"
          value={value}
          onChange={onChange}
          onKeyPress={(e) => { handleKeyDown(e, value); }}
          error={error}
          readOnly={readOnly}
        />
        <MonacoEditor
          width="800"
          height="600"
          language="javascript"
          theme="vs-dark"
          value={code}
          options={options}
        />
      </Flex.Box>
      <Flex align="flex-start" w="21px">
        {icon}
      </Flex>
    </Flex>
  );

然后您不需要第二部分,在那里您手動創建編輯器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM