React TinyMCE - установить начальное значение

Я использую компонент react-tinymce для реализации TinyMCE в моем приложении React.

Я реализую этот компонент следующим образом:

import React, { Component } from 'react';
import TinyMCE from 'react-tinymce';

class Textarea extends Component { 

  constructor(props) {
    //...
  }

  render() {

    return (

        <TinyMCE
          name = {this.props.name}
          content = {this.props.value}
          onChange = {this.handleFieldChange}
          config = {{
             plugins: 'autolink link image lists print preview code',
             toolbar: 'undo redo | bold italic | alignleft aligncenter alignright | code'
          }}
        /> 
    )
  }    
}

Я передаю this.props.value этому компоненту, который содержит строку, представляющую некоторый HTML.

<Textarea value = {data.body} />

Редактор TinyMCE выполняет рендеринг, но в редакторе нет инициализированного содержимого.

Как я могу установить начальное значение при использовании react-tinymce?

Удалось ли вам решить эту проблему? Я столкнулся с той же проблемой!

Pratik Singhal 13.01.2019 15:21
Поведение ключевого слова "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) для оценки ваших знаний,...
1
1
2 406
4

Ответы 4

Вы уверены, что хотите поместить textarea в TinyMCE? В результате редактор текстовых полей TinyMCE обернет ваш собственный необработанный текстовый редактор.

Если это то, чего вы пытаетесь достичь, обратите внимание, что TinyMCE принимает HTML, а не JSX. Также обратите внимание, что textarea отображает свои дочерние элементы как значение по умолчанию, а не атрибут value. По этим двум причинам вы хотите, чтобы реквизит был отформатирован как content = {`<textarea>${data.body}</textarea>`}. Для вашего случая, чтобы проиллюстрировать (вы, вероятно, захотите манипулировать опорой в своем родительском компоненте):

  render() {
    const propValuePlaceholder = `<textarea>${data.body}</textarea>`;
    return (
      <TinyMCE
        name = {this.props.name}
        content = {propValuePlaceholder}
        onChange = {this.handleFieldChange}
        config = {{
          plugins: 'autolink link image lists print preview code',
          toolbar: 'undo redo | bold italic | alignleft aligncenter alignright | code'
        }}
      />
    )
  }

обратите внимание, что компонент Textarea, обертывающий компонент TinyMCE, назван именно так. На самом деле у него есть опора (не показана), в которой я могу выбрать обычное текстовое поле или TinyMCE, но никогда оба сразу

yevg 22.07.2018 07:40

О, понятно, извините, я прочитал это слишком буквально. В этом случае я не вижу проблем с вашим кодом. Правильно ли вы устанавливаете data.body как строку HTML?

Tadas Antanavicius 22.07.2018 07:56

да, data.body является строкой HMTL и инициализирует стандартный textarea, если я установил его как значение

yevg 22.07.2018 22:30

Не могли бы вы включить в свой вопрос больше кода? У меня все работает как положено: codepen.io/tadasant/pen/djvpWP

Tadas Antanavicius 22.07.2018 23:05

Я не так хорошо знаком с этой оболочкой TinyMCE React, однако из документации, похоже, ожидаются теги, содержащие контент в виде строки. Заключены ли передаваемые вами реквизиты в теги? Если нет, то пробовали ли вы использовать литерал шаблона для получения желаемого результата?

`<p>{this.props.value}</p>`

Вместо использования content = {this.props.value} замените его на value = {this.props.value}

(это работает с TinyMCE версии 5.2.2)

Если вы используете компонент TinyMCE React (как описано в https://www.tiny.cloud/blog/how-to-add-tinymce-5-to-a-simple-react-project/), вы можете установить начальное значение с помощью свойства Начальное значение.

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

Похожие вопросы