[javascript] Draft.js에서 텍스트 에디터의 자동 태그 추천 기능 추가하기

Draft.js는 JavaScript 기반의 리액트 라이브러리로, 텍스트 에디터를 구축하는 데 사용됩니다. 이 라이브러리를 사용하면 사용자가 텍스트를 입력할 수 있는 편리하고 유연한 에디터를 만들 수 있습니다. 이번에는 Draft.js를 이용하여 텍스트 에디터에 자동 태그 추천 기능을 추가하는 방법에 대해 알아보겠습니다.

1. 개요

자동 태그 추천 기능은 사용자가 텍스트를 입력하는 동안 해당 텍스트에 대해 가능한 태그를 추천해주는 기능입니다. 이는 사용자의 작업을 편리하게하고 태그를 선택하는 과정을 간소화하는 데 도움이 됩니다.

2. 구현 방법

다음은 Draft.js에서 자동 태그 추천 기능을 구현하는 단계입니다.

2.1. Draft.js 설정

먼저, Draft.js를 프로젝트에 설치하고 설정해야합니다. 이 단계는 텍스트 에디터를 구축하기 위한 기본 설정입니다.

npm install draft-js

2.2. 태그 추천 데이터 준비

자동 태그 추천 기능을 구현하기 위해 우선 태그 추천을 위한 데이터를 준비해야합니다. 이는 사용자가 입력할 수 있는 모든 태그들의 리스트입니다.

const tagData = ['HTML', 'CSS', 'JavaScript', 'React', 'Node.js', 'Angular', 'Vue.js', 'Python', 'Java', 'C++'];

2.3. 에디터 상태 관리

Draft.js에서는 텍스트에디터의 상태를 관리하기 위해 EditorState를 사용합니다. 이를 이용하여 사용자가 입력한 텍스트를 추적하고, 자동 태그 추천 기능을 구현할 것입니다.

import { Editor, EditorState } from 'draft-js';

// EditorState 초기화
const [editorState, setEditorState] = useState(() => EditorState.createEmpty());

// 에디터 상태 업데이트
const handleEditorChange = (newEditorState) => {
  setEditorState(newEditorState);
};

2.4. 텍스트 변화 감지 및 태그 추천 기능 추가

텍스트 변화를 감지하기 위해 Draft.js에서 제공하는 onChange 이벤트를 사용합니다. 이 이벤트에서 사용자가 입력한 텍스트를 추출하여 처리하고, 추천할 태그 목록을 동적으로 업데이트합니다.

// Draft.js의 onChange 이벤트 핸들러
const handleTextChange = (editorState) => {
  const contentState = editorState.getCurrentContent();
  const selectionState = editorState.getSelection();
  const startKey = selectionState.getStartKey();
  const startOffset = selectionState.getStartOffset();
  const blockWithFocus = contentState.getBlockForKey(startKey);
  const text = blockWithFocus.getText();

  let queryText = '';
  let tagSuggestions = [];

  // 커서 위치 이전 텍스트 추출
  for (let i = startOffset - 1; i >= 0; i--) {
    const char = text[i];
    if (char === ' ' || char === '@') {
      break;
    }
    queryText = char + queryText;
  }

  // 태그 추천 목록 생성
  if (queryText.length > 0) {
    tagSuggestions = tagData.filter((tag) =>
      tag.toLowerCase().startsWith(queryText.toLowerCase())
    );
  }

  // 추가적인 로직 처리 및 상태 업데이트
  // ...

  // 태그 추천 목록을 표시하기 위해 UI 업데이트
  // ...

  // 기존 에디터 상태 업데이트
  handleEditorChange(editorState);
};

2.5. 태그 선택 및 에디터에 삽입

사용자가 추천된 태그 중 하나를 선택하면, 해당 태그를 에디터에 삽입해야 합니다. 이는 Draft.js의 ContentState와 Modifier를 사용하여 구현할 수 있습니다.

import { ContentState, Modifier } from 'draft-js';

// 태그 선택 핸들러
const handleTagSelection = (tag) => {
  const contentState = editorState.getCurrentContent();
  const selectionState = editorState.getSelection();

  // 선택된 텍스트 영역에 태그 삽입
  const newContentState = Modifier.insertText(
    contentState,
    selectionState,
    `#${tag} `
  );

  // 에디터 상태 업데이트
  handleEditorChange(EditorState.push(editorState, newContentState));
};

3. 결과 확인

위의 단계를 거쳐 자동 태그 추천 기능을 구현했다면, 사용자가 텍스트를 입력하는 동안 태그 추천 목록이 동적으로 표시되고, 사용자가 태그를 선택하면 해당 태그가 에디터에 삽입되는 것을 확인할 수 있습니다.

마무리

이제 Draft.js를 사용하여 자동 태그 추천 기능을 텍스트 에디터에 추가하는 방법을 알아보았습니다. 이를 통해 사용자의 작업을 편리하게 하고, 태그를 선택하는 과정을 간소화할 수 있습니다. 자동 태그 추천 기능은 다양한 종류의 응용 프로그램에서 유용하게 사용될 수 있으므로, 다른 기능과 함께 조합하여 발전시킬 수도 있습니다.

참고 자료