[javascript] Draft.js에서 텍스트 에디터의 검색 및 필터링 기능 구현하기

텍스트 에디터를 개발할 때, 사용자가 입력한 내용을 신속하게 검색하고 필터링할 수 있는 기능은 매우 유용합니다. 이를 위해 Facebook에서 개발한 Draft.js 라이브러리를 사용하여 텍스트 에디터에 검색 및 필터링 기능을 구현해 보겠습니다.

Draft.js란?

Draft.js는 React 기반의 텍스트 에디팅 라이브러리로, Facebook에서 개발하였습니다. 이 라이브러리는 효율적인 텍스트 에디팅을 위한 다양한 기능을 제공하며, 커스터마이징이 가능한 에디터를 빠르게 구축할 수 있습니다.

필요한 패키지 설치하기

먼저, Draft.js와 관련 패키지를 설치해야 합니다. 아래의 명령어를 사용하여 필요한 패키지를 설치합니다.

npm install draft-js

에디터 컴포넌트 생성하기

다음으로, 필터링 및 검색 기능을 추가할 텍스트 에디터 컴포넌트를 생성합니다.

import React, { useState } from "react";
import { Editor, EditorState, ContentState } from "draft-js";

const TextEditor = () => {
  const [editorState, setEditorState] = useState(
    EditorState.createEmpty() // 초기 에디터 상태 설정
  );

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

  return (
    <div>
      <Editor
        editorState={editorState}
        onChange={handleChange}
      />
    </div>
  );
};

export default TextEditor;

위의 코드는 Draft.js의 Editor 컴포넌트를 사용하여 텍스트 에디터를 생성하는 기본적인 컴포넌트 구조입니다. useState 훅을 사용하여 에디터의 상태를 관리합니다.

검색 및 필터링 기능 구현하기

이제 텍스트 에디터에서 검색 및 필터링 기능을 구현해보겠습니다. 아래의 코드를 TextEditor 컴포넌트에 추가합니다.

const [filterText, setFilterText] = useState(""); // 필터링 텍스트 상태 추가

const handleFilterChange = (event) => {
  setFilterText(event.target.value); // 필터링 텍스트 업데이트
};

const filteredContent = editorState.getCurrentContent().getBlockMap().filter(block => {
  const text = block.getText();
  return text.includes(filterText); // 필터링 텍스트와 일치하는 블록 필터링
});

return (
  <div>
    <input type="text" value={filterText} onChange={handleFilterChange} placeholder="검색" />
    <Editor
      editorState={editorState}
      onChange={handleChange}
      blockRendererFn={blockRenderer(filteredContent)}
    />
  </div>
);

위의 코드에서는 filterText라는 상태를 추가하여 필터링할 텍스트를 관리합니다. handleFilterChange 함수는 필터링 텍스트의 변경을 처리하고, filteredContent 변수에서는 현재 텍스트 에디터의 컨텐츠에서 필터링 텍스트와 일치하는 블록만을 필터링합니다.

마지막으로, <input> 요소를 통해 검색할 필터링 텍스트를 입력할 수 있도록 추가합니다.

결과 확인하기

이제 검색 및 필터링 기능이 추가된 텍스트 에디터를 확인해보세요! 사용자가 입력한 내용 중에서 필터링 텍스트와 일치하는 블록만을 표시할 수 있습니다.

결론

Draft.js를 사용하여 텍스트 에디터에 검색 및 필터링 기능을 구현하는 방법을 알아보았습니다. 이러한 기능은 사용자가 작성한 내용을 효율적으로 관리할 수 있도록 도와줍니다. Draft.js의 다양한 기능을 활용하여 더욱 풍부한 텍스트 에디팅 환경을 구축해보세요.

참고 자료