가수면
리액트에서 CKEditor5 사용 본문
Classic, Inline, Balloon 등 공식 문서에서 제공하는 기본 빌더들이 있다.
해당 패키지를 설치한다.
예)
npm install --save @ckeditor/ckeditor5-react @ckeditor/ckeditor5-build-classic
필요하다면 import를 이용해 에디터에 한국어 설정을 적용한다.
이후 간단하게 입력한 값을 확인해보는 로직
import React from "react";
import { CKEditor } from "@ckeditor/ckeditor5-react";
import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
import "@ckeditor/ckeditor5-build-classic/build/translations/ko";
const editorConfiguration = {
placeholder: "내용을 입력하세요.",
language: "ko",
};
const CKeditor = () => {
const editorDataRef = React.useRef("");
const [text, setText] = React.useState("");
const submitHandler = () => {
console.log(editorDataRef.current);
setText(editorDataRef.current);
};
return (
<>
<div>
<CKEditor
editor={ClassicEditor}
data={editorDataRef.current}
config={editorConfiguration}
onReady={(editor) => {
// 에디터가 준비되면 이 함수가 호출됩니다.
console.log("Editor is ready to use!", editor);
}}
onChange={(event, editor) => {
const data = editor.getData();
console.log({ event, editor, data });
editorDataRef.current = data;
}}
// 필요한 다른 이벤트 핸들러들...
/>
</div>
<button onClick={submitHandler}>제출</button>
<section dangerouslySetInnerHTML={{ __html: text }}></section>
</>
);
};
export default CKeditor;
에디터 커스텀
공식 문서에서 제공하는 빌더들은 코드 블럭도 없고 플러그인이 좀 빈약하다.
에디터에 플러그인을 내 마음대로 커스텀하는 방법을 알아보자.
먼저 기본 베이스가 되는 리액트 ckeditor를 설치한다.
npm install --save @ckeditor/ckeditor5-react
에디터를 커스텀하는 방법에는 여러가지가 있지만 여기에선 온라인 빌더를 이용해 소스 코드를 받은 뒤 진행중인 프로젝트에 통합 빌드하는 방법을 사용했다.
먼저 아래의 홈페이지를 통해 입맛대로 커스텀한 빌더를 다운받는다.
https://ckeditor.com/ckeditor-5/online-builder/
다운 받은 폴더를 프로젝트로 내부로 이동시킨다.
공식 문서에선 노드가 오류를 반환할 수 있기 때문에 아래 그림처럼 src 폴더 가 아닌 src및 node_modules폴더 옆에 두길 권장하고 있다.
├── ckeditor5
│ ├── build
│ ├── sample
│ ├── src
│ ├── ...
│ ├── package.json
│ └── webpack.config.js
├── node_modules
├── public
├── src
├── ...
└── package.json
그런 다음 프로젝트의 pakage.json에 ckeditor5를 종속성으로 설치한다.
yarn add file:./ckeditor5
or
npm install file:./ckeditor5
설치가 완료되면 코드를 수정한다.
import React from "react";
import { CKEditor } from "@ckeditor/ckeditor5-react";
import Editor from "ckeditor5-custom-build/build/ckeditor";
const editorConfiguration = {
placeholder: "내용을 입력하세요.",
};
const CKeditor = () => {
const editorDataRef = React.useRef("");
const [text, setText] = React.useState("");
const submitHandler = () => {
console.log(editorDataRef.current);
setText(editorDataRef.current);
};
return (
<>
<div>
<CKEditor
editor={Editor}
data={editorDataRef.current}
config={editorConfiguration}
onReady={(editor) => {
// 에디터가 준비되면 이 함수가 호출됩니다.
console.log("Editor is ready to use!", editor);
}}
onChange={(event, editor) => {
const data = editor.getData();
console.log({ event, editor, data });
editorDataRef.current = data;
}}
// 필요한 다른 이벤트 핸들러들...
/>
</div>
<button onClick={submitHandler}>제출</button>
<section dangerouslySetInnerHTML={{ __html: text }}></section>
</>
);
};
export default CKeditor;
타입스크립트를 사용한다면 아래 타입을 추가
// src\@types\index.d.ts
declare module "ckeditor5-custom-build/build/ckeditor" {
const CustomEditorBuild: {
create(
elementOrData: HTMLElement | string,
config?: object,
): Promise<CustomEditor>;
};
export = CustomEditorBuild;
}
'React > 라이브러리' 카테고리의 다른 글
리액트에서 Socket.io 구현 (0) | 2023.07.27 |
---|---|
Zustand (0) | 2023.07.23 |
리액트에서 네이버 스마트 에디터 구현 (0) | 2023.07.20 |
[Sanity] CRUD (0) | 2023.06.29 |
SWR (0) | 2023.06.20 |
Comments