본문으로 건너뛰기

React와의 통합

React의 기본 개념과 패턴을 숙지하고 있는지 확인하십시오. 복습이 필요한 경우 React 문서를 참고하십시오.

DHTMLX RichText는 React와 함께 동작합니다. 전체 코드 예제는 GitHub 데모를 참고하십시오.

프로젝트 생성

정보

새 프로젝트를 생성하기 전에 Node.js와 (선택적으로) Vite를 설치하십시오.

Create React App으로 새 my-react-richtext-app 프로젝트를 생성합니다:

npx create-react-app my-react-richtext-app

의존성 설치

새 앱 디렉토리로 이동합니다:

cd my-react-richtext-app

패키지 매니저를 사용하여 의존성을 설치하고 개발 서버를 시작합니다.

yarn을 사용하는 경우 실행합니다:

yarn
yarn start

npm을 사용하는 경우 실행합니다:

npm install
npm start

앱은 localhost에서 실행됩니다 (예: http://localhost:3000).

RichText 생성

앱을 중지하고 RichText 패키지를 설치합니다.

1단계. 패키지 설치

RichText 평가판 패키지를 다운로드하고 README 파일의 단계를 따르십시오. 평가판 라이선스는 30일 동안 유효합니다.

2단계. 컴포넌트 생성

RichText를 애플리케이션에 추가하는 React 컴포넌트를 생성합니다. src/ 디렉토리에 Richtext.jsx라는 새 파일을 생성합니다.

소스 파일 가져오기

Richtext.jsx를 열고 RichText 소스 파일을 가져옵니다.

로컬 폴더에서 설치한 PRO 버전의 경우 다음을 사용합니다:

Richtext.jsx
import { Richtext } from 'dhx-richtext-package';
import 'dhx-richtext-package/dist/richtext.css';

평가판 버전의 경우 다음을 사용합니다:

Richtext.jsx
import { Richtext } from '@dhx/trial-richtext';
import "@dhx/trial-richtext/dist/richtext.css";

이 튜토리얼에서는 RichText 평가판 버전을 사용합니다.

컨테이너 설정 및 RichText 초기화

RichText용 컨테이너 요소를 설정하고 useEffect() 내에서 Richtext 생성자로 컴포넌트를 초기화합니다. RichText를 제거하려면 클린업 함수에서 destructor() 메서드를 호출합니다:

Richtext.jsx
import { useEffect, useRef } from "react";
import { Richtext } from '@dhx/trial-richtext';
import '@dhx/trial-richtext/dist/richtext.css'; // RichText 스타일 포함

export default function RichTextComponent(props) {
let richtext_container = useRef(); // RichText용 컨테이너

useEffect(() => {
// RichText 컴포넌트 초기화
const editor = new Richtext(richtext_container.current, {});

return () => {
editor.destructor(); // RichText 제거
};
}, []);

return <div className="component_container">
<div ref={richtext_container} className="widget"></div>
</div>
}

스타일 추가

프로젝트의 메인 CSS 파일에 RichText와 컨테이너의 스타일을 추가합니다:

index.css
/* 기본 페이지 스타일 */
html,
body,
#root {
height: 100%;
padding: 0;
margin: 0;
}

/* RichText 컨테이너 */
.component_container {
height: 100%;
margin: 0 auto;
}

/* RichText 위젯 */
.widget {
height: calc(100% - 56px);
}

데이터 로드

RichText에 데이터를 제공합니다. src/ 디렉토리에 data.js 파일을 생성합니다:

data.js
export function getData() {
const value = `
<h2>RichText 2.0</h2>
<p>Repository at <a href="https://git.webix.io/xbs/richtext">https://git.webix.io/xbs/richtext</a></p>
<p><img src="https://placecats.com/500/300" style={{width: '500px', height: '300px'}}></p>`;
return { value };
}

App.js를 열고 데이터를 가져옵니다. value를 <RichText/> 컴포넌트에 prop으로 전달합니다:

App.js
import RichText from "./Richtext";
import { getData } from "./data";

function App() {
const { value } = getData();
return <RichText value={value} />;
}

export default App;

Richtext.jsx를 열고 props.value를 RichText 구성에 전달합니다:

Richtext.jsx
import { useEffect, useRef } from "react";
import { Richtext } from "@dhx/trial-richtext";
import "@dhx/trial-richtext/dist/richtext.css";

export default function RichTextComponent(props) {
let richtext_container = useRef();

useEffect(() => {
const editor = new Richtext(richtext_container.current, {
value: props.value, // 값 적용
// 기타 설정 속성
});

return () => {
editor.destructor();
};
}, []);

return <div className="component_container">
<div ref={richtext_container} className="widget"></div>
</div>
}

또는 useEffect() 내에서 setValue() 메서드를 호출하여 RichText에 데이터를 로드할 수도 있습니다:

Richtext.jsx
import { useEffect, useRef } from "react";
import { Richtext } from "@dhx/trial-richtext";
import "@dhx/trial-richtext/dist/richtext.css";

export default function RichTextComponent(props) {
let richtext_container = useRef();

let value = props.value;

useEffect(() => {
const editor = new Richtext(richtext_container.current, {
// 설정 속성
});

editor.setValue(value);

return () => {
editor.destructor();
};
}, []);

return <div className="component_container">
<div ref={richtext_container} className="widget"></div>
</div>
}

RichText 컴포넌트를 사용할 준비가 되었습니다. <RichText/> 요소가 마운트될 때 React가 데이터와 함께 에디터를 렌더링합니다. 전체 구성 옵션 목록은 RichText API 개요를 참고하십시오.

이벤트 처리

RichText는 사용자 동작 시 이벤트를 발생시킵니다. api.on() 메서드로 이벤트를 구독하여 사용자 입력에 반응하십시오. 전체 이벤트 목록을 참고하십시오.

Richtext.jsx를 열고 useEffect() hook을 업데이트합니다. 아래 예제는 print 이벤트가 발생할 때마다 메시지를 로그에 기록합니다:

Richtext.jsx
// ...
useEffect(() => {
const editor = new Richtext(richtext_container.current, {});

editor.api.on("print", () => {
console.log("The document is printing");
});

return () => {
editor.destructor();
};
}, []);
// ...

앱을 시작하면 페이지에 데이터와 함께 RichText가 렌더링되는 것을 확인할 수 있습니다.

샘플 콘텐츠와 함께 React 애플리케이션에 렌더링된 DHTMLX RichText

이제 React에서 RichText 통합이 완료되었습니다. 필요에 맞게 코드를 커스터마이즈하십시오. 전체 예제는 GitHub에서 확인할 수 있습니다.