Как отобразить содержимое React Quill без html-разметки?

Мне удалось заставить работать Quill, но теперь я хотел сделать хороший разделенный экран, как у нас на этом форуме, но я не смог понять одну вещь: как преобразовать ввод Quill в красивый текст на стороне предварительного просмотра. .

Я могу отобразить текст, но в нем все еще есть все теги html, которые, конечно, мне не нужны.

Итак, это моя настройка Quill:

export default class AddSpark extends Component {
  constructor(props) {
    super(props);

    this.onChange = this.onChange.bind(this);

    this.state ={
      content: '',
    };
  }

  onChange(html) {
    this.setState ({ content: html });
      console.log(html)
    }

  render() {
    return (
      <div>
      <Col xs={12} md={6}>
        <form ref={(input) => this.sparkForm = input} onSubmit={(e) => this.createSpark(e)}>

            <ControlLabel>Select your city</ControlLabel>
            <select id="formControlsCity" placeholder="Choose your city" onChange={this.onChange} className="form-control" onClick={ moreOptions } ref={(input) => this.city = input}>
              <option value="select">Choose your city</option>
              <option value="Beijing">Beijing</option>
              <option value="Shanghai">Shanghai</option>
              <option value="Chengdu & Chongqing">Chengdu & Chongqing</option>
            </select>
       
            <ControlLabel>Select your person</ControlLabel>
            <select id="formControlsPerson" placeholder="Choose your person" className="form-control" ref={(input) => this.person = input}>
              <option value="select">First select your city</option>
            </select>
    

            <ControlLabel>Select your location</ControlLabel>
            <select id="formControlsLocation" placeholder="Choose your location" className="form-control" ref={(input) => this.location = input}>
              <option value="select">First select your city</option>
            </select>

            <ControlLabel>Title</ControlLabel>
            <input type="text" label="Title" placeholder="Enter your title" className="form-control" ref={(input) => this.title = input}/>
          

            <ControlLabel>Content</ControlLabel>
              <div className='_quill'>
                <ReactQuill
                  ref='editor'
                  onChange={this.onChange}
                />
              </div>
              <br />

          <Button type="submit">Submit</Button>
        </form>
      </Col>
      <Col xs={12} md={6}>
      <h3>Preview</h3>
        {this.state.content}
      </Col>

      </div>
  )}
}

На данный момент я получаю это: введите здесь описание изображения

Любая помощь высоко ценится!


person Deelux    schedule 03.12.2016    source источник


Ответы (6)


Проведя некоторое исследование, я смог найти ответ:

Чтобы отобразить содержимое Quill в разделе предварительного просмотра без тегов html, я использовал этот код:

      <div dangerouslySetInnerHTML={{__html: this.state.content}}></div>

person Deelux    schedule 03.12.2016
comment
Как насчет стиля CSS? В кодах HTML есть некоторые классы, а не встроенный стиль. - person troy; 02.01.2020

Самый простой способ — использовать тот же компонент react-quill с отключенным редактированием. Этот метод не требует установки каких-либо дополнительных пакетов. Вы можете сделать это, передав свойство readOnly, значение которого равно true (по умолчанию оно равно false).

Вот код компонента, который вы можете использовать для предварительного просмотра:

<ReactQuill
   value={this.state.content}
   readOnly={true}
   theme={"bubble"}
/>

Вот как это будет выглядеть: пример изображения

Примечание. ReactQuill поставляется с двумя встроенными темами (пузыри и снег).

Вот как это выглядит в снежной теме. Вверху есть панель инструментов: пузырь

А вот как это выглядит в пузырьковой теме. снежная тема

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

Чтобы использовать тему пузырьков, вам также потребуется импортировать таблицу стилей CSS. для этой конкретной темы следующим образом: *

import 'react-quill/dist/quill.bubble.css'
person iShubhamPrakash    schedule 02.11.2019
comment
Я думаю, что в настоящее время это лучшее решение для отображения содержимого редактора вне контекста редактора. Какой позор, что вы вынуждены использовать хаки для отображения содержимого редактора. Разве это не основная цель редактора — генерировать контент, который потом можно будет отобразить где-то вне контекста редактора? - person Salivan; 12.10.2020
comment
Спасибо @Salivan Да, вы правы. Зачем нам использовать какие-то хаки для отображения содержимого редактора, если в редакторе уже есть встроенный способ отображения содержимого. Это более безопасное и простое решение. - person iShubhamPrakash; 19.10.2020

я использовал это так в React.js. Чтобы отобразить содержимое quil в div, я использую класс ql-editor, потому что благодаря этому наш div может использовать классы quil по умолчанию... работает..

import ReactQuill from "react-quill";
import "react-quill/dist/quill.snow.css";

const ReactMarkdown = require("react-markdown/with-html"); //for displaying html

function editorContent() {
  <div className="ql-editor" style={{ padding: 0 }}>
        <ReactMarkdown escapeHtml={false} source={quilGeneratedHtml} />
  </div>
}
person M Shahzaib Shoaib    schedule 17.07.2020
comment
@M Shahzaib Shoaib спасибо, эта классная штука сделала мою работу;) - person irzum shahid; 30.04.2021

Вам нужен html-реагировать-парсер

import Parser from 'html-react-parser';

...     // in your render
<ReactQuill
    ...
    value={code} 
    onChange={this.previewCode}
/>
...
{Parser(code)}
person Roman Nozhenko    schedule 28.12.2018

Вот ссылка на документацию: https://github.com/zenoamaro/react-quill#the-unprised-editor

просто реализовать и получить текст из редактора quill

// define function to get text, 
// here inpText is defined in your constructor, or any global variable
onChangeText = () => {
    const editor = this.reactQuillRef.getEditor();
    const unprivilegedEditor = this.reactQuillRef.makeUnprivilegedEditor(editor);
    // You may now use the unprivilegedEditor proxy methods
    this.inpText = unprivilegedEditor.getText();
        console.log("unprivilegedEditor.getText()", unprivilegedEditor.getText());
    }

    // on submit, you can set state with that text binded in this.inpText
    this.setState({text: this.inputText})
}

// define react quill component
<ReactQuill value={this.state.text} onChange={this.onChangeText} ref={(el) => { this.reactQuillRef = el }} />

Удачи...

person Ramu N    schedule 25.07.2019

Использование 'html-react-parser' сработало для меня

person Cesar Peguero    schedule 13.06.2020
comment
Подумайте о том, чтобы опубликовать это как комментарий, а не как ответ. - person Rahul Bhobe; 14.06.2020