[javascript] Draft.js를 이용한 텍스트 에디터의 북마크 기능 구현하기

텍스트 에디터는 많은 기능을 제공하며, 이 중에서 북마크 기능은 사용자가 중요한 부분을 표시하고 나중에 쉽게 참조할 수 있도록 도와줍니다. 이번 포스트에서는 Draft.js를 사용하여 텍스트 에디터에 북마크 기능을 구현하는 방법을 알아보겠습니다.

Draft.js 개요

Draft.js는 React 기반의 텍스트 에디터 라이브러리로, 웹 애플리케이션에서 사용자가 텍스트 입력을 할 수 있는 기능을 제공합니다. Draft.js는 많은 기능과 확장성을 제공하며, 텍스트 에디터에 다양한 기능을 구현하기에 적합합니다.

북마크 기능 구현하기

1. Draft.js 설치하기

먼저, 프로젝트에 Draft.js를 설치해야 합니다. 다음 명령을 사용하여 npm을 통해 Draft.js를 설치합니다.

npm install draft-js

2. 에디터 컴포넌트 생성하기

Draft.js를 사용하여 북마크 기능을 추가하기 위해 먼저 에디터 컴포넌트를 생성합니다. 이 컴포넌트는 Draft.js의 Editor 컴포넌트를 사용하여 텍스트 입력 영역을 렌더링합니다.

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

class MyEditor extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      editorState: EditorState.createEmpty()
    };
  }

  onChange = (editorState) => {
    this.setState({ editorState });
  }

  render() {
    return (
      <div>
        <Editor editorState={this.state.editorState} onChange={this.onChange} />
      </div>
    );
  }
}

export default MyEditor;

3. 북마크 기능 추가하기

북마크 기능을 구현하기 위해서는 우선 에디터 상태에 포커스된 부분을 추적해야 합니다. 그리고 사용자가 북마크를 추가할 때 해당 위치를 특정한 스타일로 표시하는 작업이 필요합니다.

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

class MyEditor extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      editorState: EditorState.createEmpty()
    };
  }

  onChange = (editorState) => {
    this.setState({ editorState });
  }

  toggleBookmark = () => {
    this.onChange(RichUtils.toggleInlineStyle(this.state.editorState, 'BOOKMARK'));
  }

  keyBindingFn = (event) => {
    // 북마크를 토글하기 위해 사용자가 단축키를 입력했는지 확인합니다.
    if (event.key === 'b' && event.shiftKey) {
      return 'toggle-bookmark';
    }
    return Draft.getDefaultKeyBinding(event);
  }

  handleKeyCommand = (command) => {
    // 단축키를 처리하여 북마크를 토글합니다.
    if (command === 'toggle-bookmark') {
      this.toggleBookmark();
      return 'handled';
    }
    return 'not-handled';
  }

  render() {
    return (
      <div>
        <div>
          <button onClick={this.toggleBookmark}>북마크 추가</button>
        </div>
        <div>
          <Editor
            editorState={this.state.editorState}
            onChange={this.onChange}
            handleKeyCommand={this.handleKeyCommand}
            keyBindingFn={this.keyBindingFn}
          />
        </div>
      </div>
    );
  }
}

export default MyEditor;

위 코드에서는 toggleBookmark 함수를 통해 북마크를 토글하고, keyBindingFn 함수를 통해 사용자가 북마크를 토글하기 위해 단축키를 입력하도록 설정하였습니다. 또한, handleKeyCommand 함수를 통해 단축키 입력을 처리하고 북마크를 토글합니다.

4. 북마크 스타일 추가하기

북마크를 추가할 때 해당 부분이 특정한 스타일로 표시되도록 스타일을 추가해야 합니다. 이를 위해 draft-js-inline-toolbar-plugin과 같은 Draft.js 플러그인을 사용할 수 있습니다.

npm install draft-js-inline-toolbar-plugin

이 플러그인을 사용하면 북마크 스타일을 적용하는 버튼을 표시하고, 버튼을 클릭하여 북마크를 추가할 수 있습니다. 자세한 내용은 해당 플러그인의 문서를 참고하시기 바랍니다.

마무리

이번 포스트에서는 Draft.js를 사용하여 텍스트 에디터에 북마크 기능을 구현하는 방법을 알아보았습니다. Draft.js의 다양한 기능과 확장성을 활용하면 더 많은 기능을 추가하고 사용자 경험을 향상시킬 수 있습니다. 다음 글에서는 Draft.js와 다른 라이브러리와의 통합에 대해 살펴보겠습니다.

참고자료: