[javascript] Draft.js에서 텍스트 에디터의 드래그 앤 셀렉트 기능 구현하기
Draft.js는 텍스트 에디터를 쉽게 구현하고 사용할 수 있는 JavaScript 라이브러리입니다. 이 라이브러리를 사용하여 드래그 앤 셀렉트 기능을 구현하는 방법에 대해 알아보겠습니다.
드래그 앤 셀렉트 기능 구현하기
드래그 앤 셀렉트 기능을 구현하기 위해서는 Draft.js에서 제공하는 SelectionState 객체를 사용해야 합니다. SelectionState는 현재 선택된 텍스트의 상태를 나타내는 객체입니다.
다음은 드래그 앤 셀렉트 기능을 구현하는 코드입니다.
import { Editor, EditorState, DefaultDraftBlockRenderMap, SelectionState } from 'draft-js';
const MyEditor = () => {
// 텍스트 에디터의 상태를 관리하는 EditorState 객체
const [editorState, setEditorState] = useState(EditorState.createEmpty());
// 드래그한 텍스트의 시작과 끝 오프셋을 저장하는 상태
const [selection, setSelection] = useState({ startOffset: null, endOffset: null });
// 에디터 클릭 시 SelectionState 초기화
const handleClick = () => {
setSelection({ startOffset: null, endOffset: null });
};
// 텍스트 드래그 시작 시 SelectionState 업데이트
const handleMouseDown = (e) => {
const selection = window.getSelection();
const startOffset = selection.focusOffset;
setSelection({ startOffset, endOffset: null });
};
// 텍스트 드래그 중 시 SelectionState 업데이트
const handleMouseUp = (e) => {
const selection = window.getSelection();
const endOffset = selection.focusOffset;
setSelection((prevSelection) => ({ ...prevSelection, endOffset }));
};
// 에디터 렌더링
return (
<div onClick={handleClick}>
<Editor
editorState={editorState}
blockRenderMap={DefaultDraftBlockRenderMap}
onMouseDown={handleMouseDown}
onMouseUp={handleMouseUp}
onChange={(newEditorState) => setEditorState(newEditorState)}
/>
</div>
);
};
위 코드에서는 MyEditor
컴포넌트 내에서 드래그 앤 셀렉트 기능을 구현하고 있습니다.
handleMouseDown
: 텍스트 드래그 시작 시,window.getSelection()
을 사용하여 선택된 시작 오프셋을 저장합니다.handleMouseUp
: 텍스트 드래그 중 시,window.getSelection()
을 사용하여 선택된 끝 오프셋을 저장합니다.handleClick
: 에디터 클릭 시, SelectionState를 초기화합니다.Editor
: Draft.js에서 제공하는 텍스트 에디터 컴포넌트입니다.onMouseDown
,onMouseUp
,onChange
속성을 사용하여 각각 드래그 시작, 드래그 중, 텍스트 변경 이벤트를 처리합니다.
마무리
위의 코드 예시를 참고하여 Draft.js를 사용하여 텍스트 에디터에 드래그 앤 셀렉트 기능을 구현할 수 있습니다. 드래그한 텍스트의 오프셋을 저장하는 상태를 사용하여 필요한 기능을 추가로 구현할 수도 있습니다.
더 자세한 내용은 Draft.js 공식 문서를 참고하시기 바랍니다.