2017-02-03 1 views
2

Ich habe ein Problem beim Erstellen eines Texteditors mit Unterstützung von bildbasierten Tags festgestellt. Es besteht die Notwendigkeit, diese Tags frei im Text zu verschieben, was durch dieses Problem unpraktisch wird.Inkonsistentes Bildbewegungsverhalten in quilljs mit react

Grundsätzlich, wenn ich anfange, ein Bild zu ziehen und es an der gewünschten Stelle abzusetzen, kann eines von zwei Ergebnissen passieren: A) es funktioniert wie beabsichtigt und B) wird das Bild bis zum Ende/Anfang des Satzes fallengelassen. Sie können das Verhalten in angehängten gif sehen.

Ich benutze react und Typoskript-Kombination zum Erstellen der Seite mit Pinole in einer Komponente eingefügt wird.

// TextEditor/index.tsx 
 
import * as React from 'react'; 
 
import * as Quill from 'quill'; 
 

 
import { TextEditorState, TextEditorProps } from '../@types'; 
 
import { generateDelta } from '../@utils/generateDelta'; 
 

 
const formats = [ 
 
    'image' 
 
]; 
 

 
class TextEditor extends React.Component<TextEditorProps, TextEditorState> { 
 
    constructor(props: TextEditorProps) { 
 
    super(props); 
 
    this.state = { 
 
     Editor: undefined 
 
    } 
 
    } 
 

 
    componentDidMount() { 
 
    const self = this; 
 
    this.setState({Editor: new Quill('#editor-container', {formats: formats, debug: 'warn'})}); 
 
    
 
    } 
 

 
    changeText(text: string) { 
 
    if(typeof(this.state.Editor) !== 'undefined') { 
 
     this.state.Editor.setContents(generateDelta(text), 'api'); 
 
    } 
 
    } 
 

 
    render() { 
 
    return (
 
     <div id="editor-container"></div> 
 
    ); 
 
    } 
 
} 
 

 
export default TextEditor;

Und die Verwendung dieser Komponente in einer anderen Komponente ist nur

// editor.tsx 
 
import TextEditor from '../QuillEditor/TextEditor'; 
 

 
... 
 

 
onUpdate(text: string) { 
 
    this.refs.targetEditor.changeText(text); 
 
} 
 

 
... 
 
render() { 
 
    return (
 
    ... 
 
    <TextEditor 
 
     ref={'targetEditor'} 
 
    /> 
 
    ... 
 
) 
 
}

Ich habe versucht, den Texteditor nur contentEditable div zu ändern und das hat tadellos funktioniert, also sollte es nicht wegen etwas css gl sein jucken.

Hat jemand eine Idee von was könnte dies verursachen?

EDIT 6. Februar: Ich habe herausgefunden, dass dieses Problem nur in Chrome manifestiert, wie IE und MS Ränder dieses Problem nicht aufgetreten sind. Ich habe versucht, alle Erweiterungen auszuschalten, aber das Problem ist immer noch da. Der private Modus hat auch nicht geholfen.

Antwort

0

Nach ein paar Tagen der Forschung habe ich herausgefunden, was das Problem verursacht.

Die Kombination aus Quill und React funktioniert nicht, da React Eingabeereignisse "stiehlt", während das Schatten-DOM erstellt wird. Im Grunde, weil es versucht, meine Eingabe in contenteditable div von Quill erstellt zu verarbeiten, verursacht es einige Aktionen nicht zu feuern, was zu dem seltsamen Verhalten führt. Und weil Quill es selbst versucht, außerhalb von React DOM.

Dies habe ich in meinem einfachen Testprojekt bewiesen, wo das Hinzufügen eines einfachen Eingabe-Tags irgendwo auf der Seite den Quill-Editor durchbrach.

Mögliche Lösung wäre, React-Quill oder einen anderen Komponentencontainer zu verwenden, aber ich habe es nicht geschafft, es erfolgreich zu arbeiten, oder schreiben Sie selbst, die Quill zu React in seiner DOM-kompatiblen Weise integrieren würde.

Verwandte Themen