웹개발
[React] ReactQuill 을 사용하여 이미지를 서버에 보낼 때 src 길이 줄이기 및 실제 이미지에는 영향 안끼치는 방법
Heeyeon Choi
2024. 9. 5. 16:27
728x90
이번 'MK-Blog' 를 개발하면서 글 작성 / 수정 하는 페이지에 ReactQuill을 넣었습니다.
해당 툴에다가 이미지들을 넣으면 이미지 태그의 src 가 한없이 깁니다.
서버에 전송할 때, 길이 제한때문에 전송 실패할 확률이 큽니다.
그래서 저는 src 를 image_1, image_2 이런식으로 보내기로 했습니다.
(저희는 이미지파일만을 또 추출하여 서버에 전송하기 때문에 가능한 방법이었습니다!! 잘 알아보셔야 합니다)
/**
* content 영역의 img 태그들을 모두 가져와서 src를 image_${index + 1}로 변경하는 작업
*/
let newContent = '';
const quillEditor = quillRef.current?.getEditor();
if (quillEditor) {
// 에디터의 내용을 복사하여 수정
const clonedEditor = quillEditor.root.cloneNode(true) as HTMLElement;
const imgTags = clonedEditor.querySelectorAll('img'); // img 태그들을 모두 가져옴
Array.from(imgTags).forEach((img, index) => {
// img 태그의 src를 순서대로 image_1, image_2로 변경
const newSrc = `image_${index + 1}`;
img.src = newSrc;
});
// 변경된 content를 다시 업데이트
newContent = clonedEditor.innerHTML;
console.log('변경된 content:', quillEditor.root.innerHTML);
}
1.
ReactQuill의 ref인 quillRef 를 참조하여, quillEditor 변수에 담아줍니다.
2. quillEditor를 그대로 사용하면, 이미지 태그의 src 를 변경하고 깨지게 보입니다. 따라서 clonedEditor 변수에 cloneNode 를 해줍니다.
[cloneNode]
전체 노드 트리 복사 (cloneNode(true))
이 옵션을 사용하면 선택한 요소와 그 안에 포함된 모든 자식 요소까지 복사됩니다.
3. clonedEditor.querySelectorAll('img') 를 통해 이미지 태그들을 모두 담습니다.
4. 순회하면서, img.src 에 변경할 값을 넣어줍니다.
5. 이렇게 하면, 서버에는 newContent 를 보내고, 실제 화면에는 ReactQuill 원래 값을 그대로 보여줄 수 있습니다.
728x90