[javascript] Draft.js로 구현된 에디터를 이용한 문서 편집 기록 관리하기

많은 웹 애플리케이션에서는 사용자가 문서를 편집하는 과정을 기록하고 관리해야하는 경우가 있습니다. 예를 들어, 사용자가 작성한 문서의 변경 내용을 추적하고, 이전 버전으로 돌아갈 수 있게 지원하는 기능이 필요할 수 있습니다. 이러한 요구사항을 충족하기 위해 Draft.js라는 JavaScript 라이브러리를 활용하여 에디터에서의 편집 기록을 관리하는 방법에 대해 알아보겠습니다.

Draft.js란 무엇인가요?

Draft.js는 Facebook에서 개발한 오픈소스 라이브러리로, React 기반의 웹 에디터를 구현하기 위한 도구입니다. Draft.js는 풍부한 편집 기능을 제공하며, 텍스트 스타일링, 블록 요소 제어, 컨텐트 선택/변경 등 다양한 기능을 제공합니다.

Draft.js를 이용한 편집 기록 관리 방법

Draft.js를 이용하여 에디터에서의 편집 기록을 관리하기 위해서는 다음과 같은 단계를 따라야 합니다.

1. 에디터 구현하기

먼저, Draft.js를 이용하여 편집 가능한 에디터를 구현합니다. 사용자가 텍스트를 입력하고 편집할 수 있는 환경을 제공하는 것이 목표입니다. Draft.js에 대한 상세한 사용법은 공식 문서를 참고할 수 있습니다.

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 (
      <Editor
        editorState={this.state.editorState}
        onChange={this.onChange}
      />
    );
  }
}

2. 편집 기록 저장하기

사용자가 문서를 편집하고 변경 사항을 저장하기 위해, 편집 기록을 관리할 데이터 구조를 만들어야 합니다. 대표적으로 배열을 사용하여 편집 기록을 저장할 수 있습니다.

constructor(props) {
  super(props);
  this.state = {
    editorState: EditorState.createEmpty(),
    history: [],
  };
}

onChange = (editorState) => {
  // 현재 편집 내용을 기록에 추가
  const history = this.state.history;
  const contentState = editorState.getCurrentContent();
  history.push(contentState);
  
  this.setState({ editorState, history });
}

3. 이전 버전으로 돌아가기

사용자가 이전 버전으로 돌아갈 수 있게 하기 위해서는 이전 편집 기록을 가져와 에디터에 적용해야 합니다.

handleUndo = () => {
  // 가장 최근의 편집 기록 가져오기
  const history = this.state.history;
  const previousContentState = history.pop();
  
  // 이전 편집 내용으로 에디터 상태 변경
  const previousEditorState = EditorState.createWithContent(previousContentState);
  this.setState({ editorState: previousEditorState, history });
}

4. 추가 기능 구현하기

편집 기록을 관리하는 기능 외에도, 문서 버전 관리, 변경 내역 비교 등 추가적인 기능을 구현할 수 있습니다. 이러한 기능은 Draft.js의 확장성을 활용하여 구현할 수 있습니다.

마무리

Draft.js를 이용하여 에디터에서의 편집 기록을 관리하는 방법에 대해 알아보았습니다. 사용자의 편집 기록을 관리하고, 이전 버전으로 되돌아갈 수 있게 함으로써 에디터의 활용성을 높일 수 있습니다. Draft.js의 다양한 기능을 활용하여 웹 애플리케이션에서 편집 기록 관리를 구현해보세요!