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
'웹개발' 카테고리의 다른 글
[React] React Context API로 상태 공유하기 (0) | 2024.09.09 |
---|---|
[React] 'react-beautiful-dnd' 를 사용하여, 드래그 엔 드롭 구현하기 (drag and drop) (0) | 2024.09.05 |
[React] IntersectionObserver DOM의 업데이트(예: 좋아요 버튼 클릭) 이후에야 비로소 IntersectionObserver가 다시 작동할때 (3) | 2024.08.28 |
[React] URLSearchParams (0) | 2024.08.26 |
[React] SSE로 프론트엔드 쪽 코드 구현할때, 헤더(Authorization 등)설정하기 (feat. event-source-polyfill) (0) | 2024.08.20 |