Tiptap Editor - Headless-WYSIWYG-Editor
(github.com/ueberdosis)- Ein Headless-Framework ohne eigenes UI, daher vorteilhaft für das Styling
- Funktioniert sehr gut mit React, Vue, Svelte, Alpine.js, Next.js, Nuxt.js und Vanilla JS
- Basiert auf ProseMirror
9 Kommentare
Persönlich fand ich ihn von allem, was ich bisher verwendet habe, am angenehmsten in der Nutzung und am einfachsten zu erweitern.
Viele der Unannehmlichkeiten, die ich beim Erstellen eines Editors mit Slate empfunden habe, wurden hier wirklich in großem Umfang gelöst.
Könnten Sie vielleicht mitteilen, welche Unannehmlichkeiten Sie bei der Nutzung des Slate-Editors erlebt haben?
Ich habe bisher nur Tiptap verwendet, aber da ich gehört habe, dass Slate ziemlich gut sein soll, bin ich neugierig geworden!!
Der Teil zum Erstellen externer Komponenten ist deutlich komfortabler. Besonders wenn wie bei React ein eigenes DOM verwendet wird, braucht man Rendering als Komponente statt als HTML, und
tiptap, das von Anfang an mit Blick auf Modularisierung entwickelt wurde, lässt sich dadurch leichter anpassen.Insgesamt hatte ich das Gefühl, dass die Slate-Dokumentation schwer zugänglich ist, und weil alles so raw ist, hatte ich den Eindruck, dass ich noch deutlich mehr lernen müsste, um die Funktionen umzusetzen, die ich wollte.
Es ist eine Erinnerung von vor etwa 2 Jahren, daher kann es leicht anders gewesen sein, aber ich hatte mit solchen Problemen zu tun.
select: Es war äußerst knifflig, eine Funktion hinzuzufügen, die Eigenschaften für ausgewählte Zeichen verarbeitet. (Das Objekt selbst ist komplex.)Oh ... vielen Dank~!
Unter https://tiptap.dev/docs/editor/installation/react#7-the-complete-setup kann man sich ein funktionierendes Editor-Beispiel ansehen.
Ich persönlich finde, dass die Dokumentation ziemlich gut gemacht ist, allerdings sind zwischendurch Elemente eingestreut, für die ein kostenpflichtiges Abo nötig ist.
Es ist nicht so störend, dass das Lesen der Doku unangenehm wird, aber obwohl man es gar nicht braucht, bekommt man trotzdem Lust darauf — irgendwie beeindruckend und gleichzeitig ein bisschen unerquicklich … ein ziemlich zwiespältiges Gefühl.
Es fällt mir schwer, der Aussage zuzustimmen, dass die Dokumentation einigermaßen gut ist. Meiner Einschätzung nach ist die Lücke zwischen der Getting-Started-Dokumentation und der API-Dokumentation zu groß, wodurch die Lernkurve steil ausfällt. In unserem React-Projekt kamen wir zu dem Schluss, dass der Dokumentationsstil von Prosemirror und react-prosemirror benutzerfreundlicher und ausgereifter ist, daher haben wir uns für react-prosemirror und gegen tiptap entschieden.
Während wir versucht haben, Beispielcode für einen PoC zu unseren Anforderungen zu erstellen und dabei die React-Beispiele nachvollzogen haben, sind wir auf folgende Probleme gestoßen.
srcnur zwei Dateien liegen, kann ich nur seufzen. Ich verstehe die Absicht hinter einem derart kleinteiligen Modul nicht. Wenn selbst so eine kleine Funktion als Paket ausgeliefert wird, ist dann der Aufwand für die Verwaltung von Abhängigkeitsversionen nicht größer als der Gewinn an Wiederverwendbarkeit?Bei 1–3, 4–6 und 8 empfinde ich persönlich überhaupt keine Zweifel oder Unannehmlichkeiten, deshalb fällt es mir schwer, dem zuzustimmen.
1–2
StarterKit ist, wie der Name schon sagt, ein Kit für den Einstieg und scheint zum Zeitpunkt der tatsächlichen Nutzung nicht besonders bedeutungsvoll zu sein.
Bei
ListItemist es, wie Sie gesagt haben. Es ist ein Element für die Konfiguration der Color-Extension. Ich denke ebenfalls, dass das einfach ein Punkt ist, der entfällt, wenn man StarterKit nicht verwendet.3
chain().something().run()ist zwar so etwas wie bloßer Syntax Sugar, bietet aber meiner Meinung nach eine Funktion, die gut zum Konzept einer Batteries-included-Bibliothek passt.In mobilen Umgebungen, in denen Aktionen wie etwa nach dem Fettsetzen wieder den Fokus zu setzen, praktisch unverzichtbar sind, nutze ich das sehr hilfreich.
4
Da ich diese Funktion nicht nutze, kenne ich mich damit nicht gut aus.
(Ich denke aber, dass darin auch ein Vorteil als Kehrseite des bei Punkt 1 erwähnten Nachteils liegt, aus dem Konzentrationszustand gerissen zu werden: Man muss Informationen zu Funktionen, die man selbst nicht verwenden will, nicht extra ansehen.)
5–6
Es ist nicht nur in der Dokumentation der jeweiligen Extensions gut beschrieben, sondern unterscheidet sich im Allgemeinen auch überhaupt nicht von der gewöhnlichen Implementierung eines Editors.
Ehrlich gesagt bin ich mir bei dem unter Punkt 6 Gesagten nicht einmal sicher, ob ich savvykangs Aussage richtig verstanden habe ... Ich denke die ganze Zeit nur: „Warum ist das überhaupt ein Fragezeichen ...? Was für ein Hinweis wird denn da bitteschön benötigt ...?“ haha ...
7
„Wie bei den anderen Nodes auch“ kann man den Fokus mit
editor.isActive('table')prüfen.Allerdings scheint mir das kein Problem zu sein, das sich allein dadurch lösen lässt, dass man einfach nur den fokussierten Node bestimmt. Es wirkt eher wie eine Anforderung, bei der viele Aspekte berücksichtigt werden müssen, etwa Filterung beim Einfügen oder das Einfügen über die Entwicklertools.
8
Dem Punkt, dass die Verwaltung von Abhängigkeitsversionen zur Belastung werden kann, stimme ich zu, aber ich denke auch, dass es ein Vorteil ist, keinen Code für Funktionen mitführen zu müssen, die man gar nicht benötigt.
Genau in unserem Fall war es nämlich so, dass wir die von Ihnen erwähnte Color-Extension nicht verwenden würden. Es scheint, als hätten beide Seiten ihre jeweiligen Vor- und Nachteile.
.
Ich denke,
react-prosemirrorundtiptap, die Sie erwähnt haben, sind konzeptionell völlig unterschiedliche Kandidaten.Eines, mit dem man
prosemirrorauf React-artige Weise verwenden kannvs
Eines, bei dem es gar nicht wichtig ist, ob es auf
prosemirrorbasiert oder nicht, sondern das einfach alles zusammenbringt, was man braucht, um einen Editor zu implementieren, der zum eigenen Service passtDa das Teil im Vue-Umfeld schon ziemlich beliebt ist, habe ich überlegt, ob ich überhaupt etwas dazu schreiben soll,
aber nachdem ich es diesmal in SvelteKit eingesetzt habe, war ich so zufrieden, dass ich es hier teile.
Im Svelte-Ökosystem habe ich bislang keinen wirklich überzeugenden WYSIWYG-Editor gefunden, daher war ich etwas am Grübeln.
Falls es anderen ähnlich geht, ist es auf jeden Fall einen Versuch wert.