[javascript] Draft.js를 사용한 텍스트 에디터의 지오로케이션(Geolocation) 기능 구현하기

이 포스트는 Draft.js 라이브러리를 사용하여 텍스트 에디터에서 사용자의 위치를 가져와서 특정 텍스트에 적용하는 기능을 구현하는 방법을 안내합니다.

1. Draft.js 설치 및 설정

먼저, npm을 사용하여 Draft.js를 설치합니다.

npm install draft-js --save

설치가 완료되면, 사용하기 위해 Draft.js를 import 합니다.

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

그리고, Draft.js 텍스트 에디터를 컴포넌트에 추가합니다.

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

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

2. 지오로케이션(Geolocation) API 사용하기

Draft.js 에디터에서 사용자의 위치를 가져오기 위해 지오로케이션 API를 사용합니다. 먼저, 사용자의 위치 정보를 담을 상태 변수를 추가합니다.

this.state = {
  editorState: EditorState.createEmpty(),
  location: null,
};

그리고, componentDidMount() 함수에서 사용자의 위치를 가져오는 코드를 작성합니다.

componentDidMount() {
  navigator.geolocation.getCurrentPosition(
    (position) => {
      const { latitude, longitude } = position.coords;
      this.setState({
        location: {
          latitude,
          longitude,
        },
      });
    },
    (error) => {
      console.error(error);
    }
  );
}

위 코드에서, navigator.geolocation.getCurrentPosition() 함수는 사용자의 위치를 비동기적으로 가져옵니다. 성공적으로 위치를 가져온 경우, 받아온 위치 정보를 상태 변수에 설정합니다. 에러가 발생한 경우, 에러를 콘솔에 출력합니다.

3. 위치 정보 적용하기

Draft.js 에디터에서 사용자의 위치 정보를 특정 텍스트에 적용하기 위해 EditorState에 위치 정보를 함께 저장해야 합니다. 이를 위해, EditorState를 업데이트하는 코드를 작성합니다.

this.onChange = (editorState) => {
  const selection = editorState.getSelection();
  const currentContent = editorState.getCurrentContent();
  const contentWithGeo = Modifier.setBlockData(
    currentContent,
    selection,
    { geolocation: this.state.location }
  );

  const newState = EditorState.push(
    editorState,
    contentWithGeo,
    'add-geo-location'
  );

  this.setState({ editorState: newState });
};

위 코드에서, Modifier.setBlockData() 함수를 사용하여 선택된 블록의 데이터에 지오로케이션 정보를 추가합니다. 그리고, EditorState.push() 함수를 사용하여 변경된 컨텐츠를 적용한 새로운 에디터 상태를 생성합니다. 최종적으로, setState() 함수를 사용하여 새로운 상태를 설정합니다.

4. 결과 확인하기

위 코드를 모두 작성하고 실행하면, Draft.js 텍스트 에디터가 렌더링될 때 사용자의 위치를 가져와서 에디터에 위치 정보가 함께 저장됩니다. 이를 확인하기 위해, 에디터에서 특정 텍스트를 입력한 후 컨텐츠의 블록 데이터를 확인해보면, 지오로케이션 정보가 저장된 것을 확인할 수 있습니다.

이제, Draft.js를 사용한 텍스트 에디터에서 지오로케이션 기능을 구현하는 방법을 알게 되었습니다. 이를 활용하여 원하는 기능을 추가하거나 개선할 수 있습니다.

참고: 이 예시 코드는 React와 함께 사용하는 Draft.js를 기반으로 작성되었습니다. 필요에 따라 사용하는 프레임워크에 맞게 수정하여 사용하시면 됩니다.

참고 자료