구성 요소가 AEM 프로젝트에 없습니다.
먼저 합성 구성 요소를 구성할 구성 요소, 즉 이미지와 해당 텍스트에 대한 구성 요소를 만듭니다.
-
AEM 프로젝트에서 텍스트 구성 요소를 만듭니다.
-
구성 요소의
editConfig
노드에 있는 프로젝트에서 해당resourceType
을(를) 추가합니다.resourceType: 'wknd-spa/components/text'
-
withMappable
도우미를 사용하여 구성 요소에 대한 편집을 사용하도록 설정하십시오.export const AEMText = withMappable(Text, TextEditConfig);
텍스트 구성 요소는 다음과 유사합니다.
import React from 'react';
import { withMappable } from '@adobe/aem-react-editable-components';
export const TextEditConfig = {
emptyLabel: 'Text',
isEmpty: function(props) {
return !props || !props.text || props.text.trim().length < 1;
},
resourceType: 'wknd-spa/components/text'
};
export const Text = ({ cqPath, richText, text }) => {
const richTextContent = () => (
<div className="aem_text"
id={cqPath.substr(cqPath.lastIndexOf('/') + 1)}
data-rte-editelement
dangerouslySetInnerHTML={{__html: text}} />
);
return richText ? richTextContent() : (
<div className="aem_text">{text}</div>
);
};
export const AEMText = withMappable(Text, TextEditConfig);
유사한 방법으로 이미지 구성 요소를 만든 경우 이미지 및 텍스트 구성 요소를 하위 구성 요소로 사용하여 AEMText
구성 요소와 결합하여 새 카드 구성 요소로 만들 수 있습니다.
import React from 'react';
import { AEMText } from './AEMText';
import { AEMImage } from './AEMImage';
export const AEMCard = ({ pagePath, itemPath}) => (
<div>
<AEMText
pagePath={pagePath}
itemPath={`text`} />
<AEMImage
pagePath={pagePath}
itemPath={`image`} />
</div>
);
이렇게 만들어진 합성 구성 요소는 이제 앱의 어느 위치에나 배치할 수 있으며 SPA 편집기에서 텍스트 및 이미지 구성 요소에 대한 자리 표시자를 추가합니다. 아래 샘플에서 카드 구성 요소는 제목 아래의 홈 구성 요소에 추가됩니다.
function Home() {
return (
<div className="Home">
<h2>Current Adventures</h2>
<AEMCard
pagePath='/content/wknd-spa/home' />
</div>
);
}
편집기에 텍스트 및 이미지에 대한 빈 자리 표시자가 표시됩니다. 편집기를 사용하여 이러한 값에 대한 값을 입력할 때 지정된 페이지 경로, 즉 루트 수준에서 itemPath
에 지정된 이름으로 /content/wknd-spa/home
에 저장됩니다.
구성 요소는 AEM 프로젝트에 존재하지만 필수 콘텐츠는 존재하지 않습니다.
이 경우 카드 구성 요소는 제목 및 이미지 노드가 포함된 AEM 프로젝트에 이미 생성되었습니다. 하위 노드(텍스트 및 이미지)에는 해당 리소스 유형이 있습니다.
카드 구성 요소의
그런 다음 SPA에 추가하고 콘텐츠를 검색할 수 있습니다.
-
이에 대한 해당 구성 요소를 SPA에서 만듭니다. 하위 구성 요소가 SPA 프로젝트 내의 해당 AEM 리소스 유형에 매핑되어 있는지 확인합니다. 이 예제에서는 앞의 과(와) 동일한
AEMText
및AEMImage
구성 요소를 사용합니다.import React from 'react'; import { Container, withMappable, MapTo } from '@adobe/aem-react-editable-components'; import { Text, TextEditConfig } from './AEMText'; import Image, { ImageEditConfig } from './AEMImage'; export const AEMCard = withMappable(Container, { resourceType: 'wknd-spa/components/imagecard' }); MapTo('wknd-spa/components/text')(Text, TextEditConfig); MapTo('wknd-spa/components/image')(Image, ImageEditConfig);
-
imagecard
구성 요소에 대한 콘텐츠가 없으므로 카드를 페이지에 추가하십시오. AEM의 기존 컨테이너를 SPA에 포함합니다.- AEM 프로젝트에 이미 컨테이너가 있는 경우 SPA에 이 내용을 대신 포함하고 AEM의 컨테이너에 구성 요소를 대신 추가할 수 있습니다.
- 카드 구성 요소가 SPA의 해당 리소스 유형에 매핑되어 있는지 확인합니다.
<ResponsiveGrid pagePath='/content/wknd-spa/home' itemPath='root/responsivegrid' />
-
만든
wknd-spa/components/imagecard
구성 요소를 페이지 템플릿🔗의 컨테이너 구성 요소 에 대해 허용되는 구성 요소에 추가하십시오.
이제 imagecard
구성 요소를 AEM 편집기의 컨테이너에 바로 추가할 수 있습니다.
구성 요소와 필수 콘텐츠는 모두 AEM 프로젝트에 있습니다.
콘텐츠가 AEM에 있는 경우 콘텐츠에 대한 경로를 제공하여 SPA에 직접 포함될 수 있습니다.
<AEMCard
pagePath='/content/wknd-spa/home'
itemPath='root/responsivegrid/imagecard' />
AEMCard
구성 요소는 이전 사용 사례🔗에서 정의된 과(와) 동일합니다. 여기에서 AEM 프로젝트의 위 위치에 정의된 콘텐츠는 SPA에 포함됩니다.