React で TipTap を使用してリッチテキスト エディターを構築する (メンション付き)

Barbara Streisand
リリース: 2024-11-25 11:48:15
オリジナル
634 人が閲覧しました

Building a RichText Editor with TipTap in React (with Mentions)

強力でカスタマイズ可能なリッチテキスト エディターで React アプリを強化したい場合は、TipTap が最適な選択肢です。このチュートリアルでは、TipTap をプロジェクトに統合し、動的なユーザー エクスペリエンスを実現するメンション機能を追加する方法を説明します。

構築するもの

このチュートリアルが終わるまでに、次のことができるようになります:

  1. TipTap で構築された完全に機能するリッチテキスト エディター。
  2. @ によってトリガーされるメンションをサポートし、動的な提案リストを完備します。
  3. プレースホルダーの表示やカーソルの保存などの特殊なケースの解決に関する洞察。

TipTap の詳細については、公式ドキュメントを参照するか、GitHub リポジトリを参照してください。

ステップ 1: 依存関係をインストールする
始める前に、必要なライブラリをインストールしてください:

npm install @tiptap/react @tiptap/starter-kit @tiptap/extension-mention
ログイン後にコピー

ステップ 2: 基本的なリッチテキスト エディターを作成する

まず、RichTextEditor コンポーネントを作成します。簡単な実装は次のとおりです:

import { useEditor, EditorContent } from '@tiptap/react';  

import StarterKit from '@tiptap/starter-kit';  

export const RichTextEditor = ({ content, onChange }) => {  
  const editor = useEditor({  
    extensions: [StarterKit],  
    content: content,  
    onUpdate: ({ editor }) => {  
      onChange(editor.getHTML());  
    },  
  });  
  return <EditorContent editor={editor} />;  
};
ログイン後にコピー

ステップ 3: メンションを追加する

メンションは、特にチャットや共同アプリケーションでのユーザーの対話性を高めます。実装するには:

  1. メンション拡張機能をインストールして構成します

RichTextEditor コンポーネントを変更して Mention 拡張機能を含めます。

import Mention from '@tiptap/extension-mention';  

export const RichTextEditor = ({ content, onChange, mentions }) => {  
  const editor = useEditor({  
    extensions: [  
      StarterKit,  
      Mention.configure({  
        HTMLAttributes: { class: 'mention' },  
        suggestion: {  
          items: ({ query }) =>  
            mentions.filter(item => item.display.toLowerCase().includes(query.toLowerCase())).slice(0, 5),  
          render: () => {  
            let component;  
            let popup;  
            return {  
              onStart: (props) => {  
                popup = document.createElement('div');  
                popup.className = 'mention-popup';  
                document.body.appendChild(popup);  
                component = {  
                  updateProps: () => {  
                    popup.innerHTML = `  
                      <div>



<h3>
  
  
  Step 4: Style the Mentions Popup
</h3>

<p>Mentions should be visually distinct. Add the following styles to enhance usability:<br>
</p>

<pre class="brush:php;toolbar:false">.mention-popup {  
  background: white;  
  border-radius: 8px;  
  box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.1);  
  padding: 8px;  
  position: absolute;  
  z-index: 1000;  
}  
.mention-popup .items {  
  display: flex;  
  flex-direction: column;  
}  
.mention-popup .item {  
  padding: 8px;  
  cursor: pointer;  
  border-radius: 4px;  
}  

.mention-popup .item:hover,  
.mention-popup .item.is-selected {  
  background: #f0f0f0;  
}
ログイン後にコピー

ステップ 5: 実装中に直面したエッジケース

  1. カーソルジャンプ: 入力中にカーソルがジャンプしないようにするには、コンテンツの更新でカーソルの位置が保持されるようにします。
const editor = useEditor({  
  extensions: [StarterKit],  
  content,  
  onUpdate: ({ editor }) => {  
    const selection = editor.state.selection;  
    onChange(editor.getHTML());  
    editor.commands.setTextSelection(selection);  
  },  
});
ログイン後にコピー
  1. プレースホルダーが表示されません:

エディターが空の場合にヒントを表示するには、プレースホルダー拡張機能を使用します。

import Placeholder from '@tiptap/extension-placeholder';  
const editor = useEditor({  
  extensions: [  
    StarterKit,  
    Placeholder.configure({ placeholder: 'Type something...' }),  
  ],  
});
ログイン後にコピー
  1. メンションの提案が表示されない: フィルタリングされ、期待どおりのリストが返されることを確認するには、suggestion.items メソッドをチェックしてください。

ステップ 6: アプリに統合する

エディターをモーダルまたはフォーム コンポーネントでラップして、通知やコメントなどのより大きな機能の一部にします。以下に例を示します:

import React from 'react';  

const NotificationForm = ({ mentions, onSubmit }) => {  
  const [content, setContent] = React.useState('');  
  return (  
    <form onSubmit={() => onSubmit(content)}>  
      <RichTextEditor content={content} onChange={setContent} mentions={mentions} />  
      <button type="submit">Send</button>  
    </form> 
  );  
};
ログイン後にコピー

結論

TipTap を使用すると、強力で使いやすいリッチテキスト エディターを構築できます。メンションを追加すると、アプリの対話性が強化され、ユーザーにとってより魅力的なものになります。

詳細については、TipTap の公式 Web サイトをご覧ください。この記事から何か新しいことを学びましたか?コメントで知らせてください! ?

以上がReact で TipTap を使用してリッチテキスト エディターを構築する (メンション付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート