Redigerbara fasta komponenter

Redigerbara Reaktionskomponenter kan vara"fasta" eller hårdkodade i SPA. Detta gör att utvecklare kan placera SPA redigerarkompatibla komponenter i SPA och tillåta användare att skapa komponenternas innehåll i AEM SPA Editor.

Korrigerade komponenter

I det här kapitlet ersätter vi hemvyns rubrik,"Aktuella annonser", som är hårdkodad text i Home.js med en fast, men redigerbar titelkomponent. Fasta komponenter garanterar titelns placering, men tillåter även att titeltexten kan redigeras och ändras utanför utvecklingscykeln.

Uppdatera WKND-appen

Så här lägger du till en fast-komponent i hemvyn:

  • Skapa en anpassad redigerbar titelkomponent och registrera den i projektets titelresurstyp
  • Placera den redigerbara titelkomponenten i SPA hemvy

Skapa en redigerbar React Title-komponent

I SPA hemvy ersätter du den hårdkodade texten <h2>Current Adventures</h2> med en anpassad redigerbar titelkomponent. Innan komponenten Title kan användas måste vi:

  1. Skapa en anpassad titelreaktionskomponent
  2. Dekorera den anpassade Title-komponenten med metoder från @adobe/aem-react-editable-components för att göra den redigerbar.
  3. Registrera den redigerbara titelkomponenten med MapTo så att den kan användas i behållarkomponenten senare.

Så här gör du:

  1. Öppna SPA på ~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app i din IDE

  2. Skapa en React-komponent på react-app/src/components/editable/core/Title.js

  3. Lägg till följande kod i Title.js.

    code language-javascript
    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
    

    Observera att React-komponenten ännu inte kan redigeras med AEM SPA Editor. Denna baskomponent kommer att göras redigerbar i nästa steg.

    Läs igenom kodens kommentarer för mer information om implementeringen.

  4. Skapa en React-komponent på react-app/src/components/editable/EditableTitle.js

  5. Lägg till följande kod i EditableTitle.js.

    code language-javascript
    // 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;
    

    Den här EditableTitle-reaktionskomponenten kapslar in Title-komponenten och kapslar in den så att den kan redigeras AEM redigeraren.

Använda komponenten React EditableTitle

Nu när React-komponenten EditableTitle är registrerad i och tillgänglig för användning i React-appen ersätter du den hårdkodade titeltexten i hemvyn.

  1. Redigera react-app/src/components/Home.js

  2. I Home() längst ned importerar du EditableTitle och ersätter den hårdkodade titeln med den nya AEMTitle-komponenten:

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

Filen Home.js ska se ut så här:

Home.js

Skapa komponenten Title i AEM

  1. Logga in på AEM författare

  2. Navigera till Webbplatser > WKND-app

  3. Tryck på Hem och välj Redigera i det övre åtgärdsfältet

  4. Välj Redigera i redigeringslägesväljaren längst upp till höger i sidredigeraren

  5. Håll muspekaren över standardtexten under WKND-logotypen och ovanför äventyrslistan tills den blå redigeringsramen visas

  6. Tryck för att visa komponentens åtgärdsfält och tryck sedan på skiftnyckeln för att redigera

    Åtgärdsfält för titelkomponent

  7. Skriv komponenten Title:

    • Titel: WKND-annonser

    • Typ/storlek: H2

      Dialogrutan Titelkomponent

  8. Tryck på Klar för att spara

  9. Förhandsgranska ändringarna i AEM SPA

  10. Uppdatera WKND-appen som körs lokalt på http://localhost:3000 och se hur den skapade titeln omedelbart återspeglas.

    Titelkomponent i SPA

Grattis!

Du har lagt till en fast, redigerbar komponent i WKND-appen! Nu kan du:

  • Skapade en fast, men redigerbar, komponent till SPA
  • Skapa den fasta komponenten i AEM
  • Se det innehåll som skapats i SPA

Nästa steg

Nästa steg är att lägga till en AEM ResponsiveGrid-behållarkomponent i SPA som gör att författaren kan lägga till och redigera komponenter i SPA!

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4