редактор тостов getHTML() максимальная ошибка стека

#reactjs #froala #tui

Вопрос:

В настоящее время я использую React и Next.js, и хотел бы применить пользовательский интерфейс редактора тостов вместо редактора Froala из-за ошибки корейского языка. Редактор Tui не поддерживает SSR, поэтому я уже применил динамический импорт из Next.js.

Однако я застрял с ошибкой максимального стека вызовов getHTML() при преобразовании содержимого редактора tui в формат HTML. getMarkdown() на данный момент работает отлично.

Ниже приведен код.

 // path: components/WrappedToastEditor.js
import React from 'react'
import PropTypes from 'prop-types'
import { Editor } from '@toast-ui/react-editor'

const WrappedEditor = (props) => {
  const { forwardedRef } = props
  return <Editor {...props} ref={forwardedRef} />
}

WrappedEditor.propTypes = {
  forwardedRef: PropTypes.shape({
    current: PropTypes.instanceOf(Element)
  }).isRequired
}

export default WrappedEditor;
 
 // path: components/ToastEditorComponent.js
import React, {forwardRef, useRef, useCallback } from 'react';
import dynamic from 'next/dynamic';

const Editor = dynamic(() => import("./WrappedToastEditor"), { ssr: false });
const EditorWithForwardedRef = forwardRef((props, ref) => (
  <Editor {...props} forwardedRef={ref} />
));

const ToastEditorComponent = (props) => {
  const editorRef = useRef(null);
  const handleChange = useCallback(() => {
    if (!editorRef.current) {
      return;
    }

    //! getHTML() maximum call stack error. need to figure out how to fix
    // console.log(editorRef.current.getInstance().getHTML())
    // This is the part that has a maximum call stack error
    const value = editorRef.current.getInstance().getHTML();
    props.onChange(value);
  }, [props, editorRef]);

  return <div>
    <EditorWithForwardedRef
      {...props}
      previewStyle="vertical"
      height="600px"
      initialEditType="wysiwyg"
      useCommandShortcut={true}
      ref={editorRef}
      onChange={handleChange}
      hideModeSwitch={true}
    />
  </div>;
};

export default ToastEditorComponent;