편집 가능한 고정 구성 요소

편집 가능한 React 구성 요소는 "고정" 또는 SPA 보기로 하드 코딩할 수 있습니다. 이 경우 개발자는 SPA 편집기 호환 구성 요소를 SPA 보기에 배치하고 사용자가 AEM SPA 편집기에서 구성 요소의 컨텐츠를 작성할 수 있습니다.

고정 구성 요소

이 장에서는 의 하드 코딩된 텍스트인 홈 보기의 제목인 "현재 모험"을 바꿉니다 Home.js ( 고정되었지만 편집 가능한 제목 구성 요소 사용) 고정 구성 요소는 제목을 배치하도록 하지만, 제목의 텍스트를 작성할 수도 있고, 개발 주기 외부에서 변경할 수도 있습니다.

WKND 앱 업데이트

을(를) 추가하려면 고정 구성 요소를 홈 보기에 추가합니다.

  • 사용자 지정 편집 가능한 제목 구성 요소를 만들어 프로젝트의 제목 리소스 유형에 등록합니다
  • 편집 가능한 제목 구성 요소를 SPA 홈 보기에 배치합니다

편집 가능한 React 제목 구성 요소 만들기

SPA 홈 보기에서 하드 코딩된 텍스트를 바꿉니다 <h2>Current Adventures</h2> 편집 가능한 사용자 지정 제목 구성 요소에 사용할 수 있습니다. 제목 구성 요소를 사용하려면 먼저 다음을 수행해야 합니다.

  1. 사용자 지정 Title React 구성 요소 만들기
  2. 다음 방법으로 사용자 지정 제목 구성 요소 장식 @adobe/aem-react-editable-components 편집 가능하게 만듭니다.
  3. 편집 가능한 제목 구성 요소를 MapTo 따라서 나중에 컨테이너 구성 요소.

이를 위해 진행되는 작업:

  1. 원격 SPA 프로젝트 열기 위치 ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app IDE에서

  2. 에서 React 구성 요소 만들기 react-app/src/components/editable/core/Title.js

  3. 다음 코드를 Title.js.

    import React from 'react'
    import { RoutedLink } from "./RoutedLink";
    
    const TitleLink = (props) => {
    return (
        <RoutedLink className={props.baseCssClass + (props.nested ? '-' : '__') + 'link'}
            isRouted={props.routed}
            to={props.linkURL}>
        {props.text}
        </RoutedLink>
    );
    };
    
    const TitleV2Contents = (props) => {
        if (!props.linkDisabled) {
            return <TitleLink {...props} />
        }
    
        return <>{props.text}</>
    };
    
    export const Title = (props) => {
        if (!props.baseCssClass) {
            props.baseCssClass = 'cmp-title'
        }
    
        const elementType = (!!props.type) ? props.type.toString() : 'h3';
        return (<div className={props.baseCssClass}>
            {
                React.createElement(elementType, {
                        className: props.baseCssClass + (props.nested ? '-' : '__') + 'text',
                    },
                    <TitleV2Contents {...props} />
                )
            }
    
            </div>)
    }
    
    export const titleIsEmpty = (props) => props.text == null || props.text.trim().length === 0
    

    이 React 구성 요소는 아직 AEM SPA Editor를 사용하여 편집할 수 없습니다. 이 기본 구성 요소는 다음 단계에서 편집할 수 있게 됩니다.

    구현 세부 사항에 대해서는 코드의 주석을 참조하십시오.

  4. 에서 React 구성 요소 만들기 react-app/src/components/editable/EditableTitle.js

  5. 다음 코드를 EditableTitle.js.

    // Import the withMappable API provided bu the AEM SPA Editor JS SDK
    import { EditableComponent, MapTo } from '@adobe/aem-react-editable-components';
    import React from 'react'
    
    // Import the AEM the Title component implementation and it's Empty Function
    import { Title, titleIsEmpty } from "./core/Title";
    import { withConditionalPlaceHolder } from "./core/util/withConditionalPlaceholder";
    import { withStandardBaseCssClass } from "./core/util/withStandardBaseCssClass";
    
    // The sling:resourceType of the AEM component used to collected and serialize the data this React component displays
    const RESOURCE_TYPE = "wknd-app/components/title";
    
    // Create an EditConfig to allow the AEM SPA Editor to properly render the component in the Editor's context
    const EditConfig = {
        emptyLabel: "Title",        // The component placeholder in AEM SPA Editor
        isEmpty: titleIsEmpty,      // The function to determine if this component has been authored
        resourceType: RESOURCE_TYPE // The sling:resourceType this component is mapped to
    };
    
    export const WrappedTitle = (props) => {
        const Wrapped = withConditionalPlaceHolder(withStandardBaseCssClass(Title, "cmp-title"), titleIsEmpty, "TitleV2")
        return <Wrapped {...props} />
    }
    
    // EditableComponent makes the component editable by the AEM editor, either rendered statically or in a container
    const EditableTitle = (props) => <EditableComponent config={EditConfig} {...props}><WrappedTitle /></EditableComponent>
    
    // MapTo allows the AEM SPA Editor JS SDK to dynamically render components added to SPA Editor Containers
    MapTo(RESOURCE_TYPE)(EditableTitle);
    
    export default EditableTitle;
    

    EditableTitle React 구성 요소는 다음과 같이 래핑됩니다. Title React 구성 요소, 포장 및 장식용으로 AEM SPA Editor에서 편집할 수 있습니다.

React EditableTitle 구성 요소 사용

EditableTitle React 구성 요소가에 등록되었으며 React 앱 내에서 사용할 수 있으므로, 홈 보기에서 하드 코딩된 제목 텍스트를 대체합니다.

  1. 편집 react-app/src/components/Home.js

  2. 에서 Home() 맨 아래에 있는 가져오기 EditableTitle 하드 코딩된 제목을 AEMTitle 구성 요소:

    ...
    import EditableTitle from './editable/EditableTitle';
    ...
    function Home() {
        return (
            <div className="Home">
    
            <EditableTitle
                pagePath='/content/wknd-app/us/en/home'
                itemPath='root/title'/>
    
                <Adventures />
            </div>
        );
    }
    

다음 Home.js 파일 형식은 다음과 같습니다.

Home.js

AEM에서 제목 구성 요소 작성

  1. AEM 작성자에 로그인

  2. 다음으로 이동 Sites > WKND 앱

  3. 을(를) 선택합니다. 편집 맨 위 작업 표시줄에서

  4. 선택 편집 페이지 편집기의 오른쪽 상단에 있는 편집 모드 선택기에서

  5. 파란색 편집 윤곽선이 표시될 때까지 WKND 로고 아래 및 모험 목록 위에 기본 제목 텍스트를 마우스로 가리킵니다

  6. 탭하여 구성 요소의 작업 표시줄을 표시한 다음, 렌치 편집하려면 다음을 수행하십시오.

    제목 구성 요소 작업 표시줄

  7. 제목 구성 요소를 작성합니다.

    • 제목: WKND 어드벤처

    • 유형/크기: H2

      제목 구성 요소 대화 상자

  8. 완료 저장

  9. AEM SPA 편집기에서 변경 사항 미리 보기

  10. 로컬에서 실행되는 WKND 앱 새로 고침 http://localhost:3000 작성된 제목 변경 사항을 즉시 반영합니다.

    SPA의 제목 구성 요소

축하합니다!

WKND 앱에 고정 편집 가능한 구성 요소를 추가했습니다. 이제 방법을 알 수 있습니다.

  • SPA에 고정되었지만 편집 가능한 구성 요소를 만들었습니다.
  • AEM에서 고정 구성 요소 작성
  • Remote SPA에서 작성된 컨텐츠를 참조하십시오

다음 단계

다음 단계는 다음과 같습니다 AEM ResponsiveGrid 컨테이너 구성 요소 추가 작성자가 SPA에 구성 요소를 추가 및 편집할 수 있도록 하는 SPA에 추가하시기 바랍니다!

이 페이지에서는