Добавить компонент React в содержимое редактора TinyMCE

Мы создаем редактор и хотели бы использовать для него TimyMCE и React. У нас есть сценарии, в которых по событию мы должны добавить в редактор контент на основе шаблона. Я планирую разработать шаблоны как компонент React.

Итак, с помощью TinyMCE и React, как мне добавить компонент React в редактор TinyMCE.

    export class AppEditor extends React.Component<iEditorProps, iEditorState> {

    innerEditor: React.RefObject<Editor>;

    constructor(props: iEditorProps) {
        super(props);
        this.state = {
            content: ''            
        };
        this.innerEditor = React.createRef();
    }


    handleChangeEvent = (content) => {
        this.setState({ content });
    }

    handleAddContent = (e) => {
        this.setState(prevState => {
            return { content: prevState.content + <TemplateComp>Added Content</TemplateComp> }
        });
    }

    render() {
        return (
            <div>
                <Editor ref = {this.innerEditor} inline onEditorChange = {this.handleChangeEvent} value = {this.state.content} />
            </div>);
    }
}

В приведенном выше коде на «handleAddContent» я пытаюсь добавить <TemplateComp> в редактор, но он отображается как [объект] [Объект]. Я понимаю, что это делает конкатенация строк. Используемый пакет TinyMCE - https://github.com/tinymce/tinymce-react.

Но как мне добавить компонент в редактор?

Вы уже догадались?

lukas 27.03.2019 13:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
1
922
1

Ответы 1

Объединение строки с выражением JSX (которое на самом деле является деревом объектов javascript виртуальных узлов) в

prevState.content + <TemplateComp>Added Content</TemplateComp>

приводит к тому, что вы описали. Вам необходимо преобразовать виртуальные узлы DOM в HTML, например следующим образом:

prevState.content + ReactDOMServer.renderToStaticMarkup(<TemplateComp>Added Content</TemplateComp>)

это будет работать, хотя это один из способов статической визуализации компонента React в редакторе Tiny MCE. Если вы действительно хотите поместить компонент React с его жизненным циклом в редактор форматированного текста, подумайте об использовании Draft.js или компонент на его основе вместо Tiny MCE.

Другие вопросы по теме