SPA componenten toewijzen aan AEM componenten map-components

Leer hoe u React-componenten toewijst aan Adobe Experience Manager (AEM)-componenten met de AEM SPA Editor JS SDK. Met componenttoewijzing kunnen gebruikers dynamische updates uitvoeren naar SPA componenten in de AEM SPA Editor, net als bij traditionele AEM ontwerpen.

In dit hoofdstuk wordt dieper ingegaan op de AEM JSON-model-API en wordt uitgelegd hoe de JSON-inhoud die door een AEM wordt aangeboden, automatisch kan worden geïnjecteerd in een React-component als props.

Doelstelling

  1. Leer hoe u AEM componenten kunt toewijzen aan SPA.
  2. Inspect hoe een component React dynamische eigenschappen gebruikt die van AEM worden overgegaan.
  3. Meer informatie over het gebruik van de doos Reageren AEM kerncomponenten.

Wat u gaat maken

In dit hoofdstuk wordt geïnspecteerd hoe de beschikbare Text SPA component wordt toegewezen aan de AEM Textcomponent. Reageer de Componenten van de Kern zoals Image SPA component wordt gebruikt in de SPA en in AEM ontworpen. De functies van het selectievakje Layout Container en Sjablooneditor het beleid wordt ook gebruikt om een mening tot stand te brengen die iets gevarieerder van verschijning is.

Definitieve ontwerpversie van hoofdstukvoorbeeld

Vereisten

Controleer de vereiste gereedschappen en instructies voor het instellen van een plaatselijke ontwikkelomgeving. Dit hoofdstuk is een voortzetting van het De SPA integreren hoofdstuk, nochtans om langs alles te volgen u wenst is een SPA-toegelaten AEM project.

Toewijzingsmethode

Het basisconcept is om een SPA Component aan een AEM Component in kaart te brengen. AEM componenten, voer server-kant in, voer inhoud als deel van JSON model API uit. De JSON-inhoud wordt door de SPA verbruikt en wordt in de browser op de client uitgevoerd. Er wordt een 1:1-toewijzing gemaakt tussen SPA componenten en een AEM component.

Overzicht op hoog niveau van het toewijzen van een AEM component aan een React Component

Overzicht op hoog niveau van het toewijzen van een AEM component aan een React Component

De tekstcomponent Inspect

De Projectarchetype AEM verstrekt Text component die is toegewezen aan de AEM Tekstcomponent. Dit is een voorbeeld van content component, in die zin dat deze wordt gerenderd content van AEM.

Laten we eens kijken hoe de component werkt.

Inspect het JSON-model

  1. Voordat u in de SPA code springt, is het belangrijk dat u het JSON-model begrijpt dat AEM biedt. Ga naar de Core Component Library en bekijk de pagina voor de component Text. De Core Component Library bevat voorbeelden van alle AEM Core Components.

  2. Selecteer de JSON tabblad voor een van de voorbeelden:

    JSON-model tekst

    Er moeten drie eigenschappen worden weergegeven: text, richText, en :type.

    :type is een gereserveerde eigenschap die de sling:resourceType (of pad) van de AEM Component. De waarde van :type is wat wordt gebruikt om de AEM component aan de SPA component in kaart te brengen.

    text en richText zijn aanvullende eigenschappen die aan de SPA component worden blootgesteld.

  3. De JSON-uitvoer weergeven op http://localhost:4502/content/wknd-spa-react/us/en.model.json. U zou een ingang moeten kunnen vinden gelijkend op:

    code language-json
    "text": {
        "id": "text-a647cec03a",
        "text": "<p>Hello World! Updated content!</p>\r\n",
        "richText": true,
        ":type": "wknd-spa-react/components/text",
        "dataLayer": {}
       }
    

De SPA Tekst Inspect

  1. In winde van uw keus open omhoog het AEM Project voor de SPA. Breid uit ui.frontend en opent u het bestand Text.js krachtens ui.frontend/src/components/Text/Text.js.

  2. Het eerste gebied dat we zullen inspecteren is het class Text op ~regel 40:

    code language-js
    class Text extends Component {
    
        get richTextContent() {
            return (<div
                    id={extractModelId(this.props.cqPath)}
                    data-rte-editelement
                    dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(this.props.text)}} />
                    );
        }
    
        get textContent() {
            return <div>{this.props.text}</div>;
        }
    
        render() {
            return this.props.richText ? this.richTextContent : this.textContent;
        }
    }
    

    Text is een standaard React component. De component gebruikt this.props.richText om te bepalen of de inhoud die moet worden gerenderd rijke tekst of gewone tekst zal zijn. De werkelijk gebruikte "inhoud" komt van this.props.text.

    Om een potentiële aanval van XSS te vermijden, wordt de rijke tekst ontsnapt via DOMPurify voordat u gevaarlijkSetInnerHTML om de inhoud te renderen. Herstel de richText en text eigenschappen van het JSON-model eerder in de oefening.

  3. Volgende, openen ui.frontend/src/components/import-components.js kijk eens naar de TextEditConfig op ~regel 86:

    code language-js
    const TextEditConfig = {
    emptyLabel: 'Text',
    
        isEmpty: function(props) {
            return !props || !props.text || props.text.trim().length < 1;
        }
    };
    

    De bovenstaande code bepaalt wanneer de tijdelijke aanduiding in de AEM auteursomgeving moet worden weergegeven. Als de isEmpty methode retourneert true wordt de tijdelijke aanduiding weergegeven.

  4. Kijk ten slotte naar de MapTo bellen op ~regel 94:

    code language-js
    export default MapTo('wknd-spa-react/components/text')(LazyTextComponent, TextEditConfig);
    

    MapTo wordt geleverd door de AEM SPA Editor JS SDK (@adobe/aem-react-editable-components). Het pad wknd-spa-react/components/text vertegenwoordigt de sling:resourceType van de AEM component. Dit pad komt overeen met het :type door het JSON-model dat eerder werd waargenomen. MapTo zorgt ervoor dat de JSON-modelrespons wordt geparseerd en dat de juiste waarden als props naar de SPA component.

    U kunt de AEM vinden Text componentdefinitie bij ui.apps/src/main/content/jcr_root/apps/wknd-spa-react/components/text.

Reageren kerncomponenten gebruiken

AEM WCM-componenten - React Core-implementatie en AEM WCM-componenten - Spa-editor - React Core-implementatie. Dit is een reeks herbruikbare UI-componenten die uit de doos AEM componenten worden toegewezen. De meeste projecten kunnen deze componenten als uitgangspunt voor hun eigen implementatie hergebruiken.

  1. Open het bestand in de projectcode import-components.js om ui.frontend/src/components.
    Dit bestand importeert alle SPA componenten die zijn toegewezen aan AEM componenten. Gezien de dynamische aard van de implementatie van de SPARedacteur, moeten wij om het even welke SPA componenten uitdrukkelijk van verwijzingen voorzien die aan AEM auteur-able componenten gebonden zijn. Hierdoor kan een AEM auteur ervoor kiezen om een component te gebruiken waar hij of zij dat in de toepassing wil.

  2. De volgende instructies voor importeren bevatten SPA componenten die in het project zijn geschreven:

    code language-js
    import './Page/Page';
    import './Text/Text';
    import './Container/Container';
    import './ExperienceFragment/ExperienceFragment';
    
  3. Er zijn verschillende andere imports van @adobe/aem-core-components-react-spa en @adobe/aem-core-components-react-base. Deze importeren de React Core-componenten en stellen deze beschikbaar in het huidige project. Deze worden dan in kaart gebracht aan project specifieke AEM componenten gebruikend MapTo, net als bij de Text eerder.

AEM bijwerken

Het beleid is een eigenschap van AEM malplaatjes geeft ontwikkelaars en macht-gebruikers korrelige controle waarover de componenten beschikbaar zijn om te worden gebruikt. De componenten React Core zijn inbegrepen in de SPA Code maar moeten via een beleid worden toegelaten alvorens zij in de toepassing kunnen worden gebruikt.

  1. Navigeer van het scherm AEM Start naar Gereedschappen > Sjablonen > WKND SPA React.

  2. Selecteer en open SPA pagina sjabloon voor bewerken.

  3. Selecteer de Layout Container en klik op beleid pictogram om het beleid te bewerken:

    indelingscontainerbeleid

  4. Onder Toegestane componenten > WKND SPA React - Inhoud > controleren Afbeelding, Teaser, en Titel.

    Bijgewerkte componenten beschikbaar

    Onder Standaardcomponenten > Toewijzing toevoegen en kiest u Afbeelding - WKND SPA Reageren - Inhoud component:

    Standaardcomponenten instellen

    Voer een mime-type van image/*.

    Klikken Gereed om de beleidsupdates op te slaan.

  5. In de Layout Container klik op beleid pictogram voor de Tekst component.

    Een nieuw beleid maken met de naam WKND-SPA. Onder Plug-ins > Opmaak > schakel alle vakken in om extra opmaakopties in te schakelen:

    RTE-opmaak inschakelen

    Onder Plug-ins > Alineastijlen > selectievakje in Alineastijlen inschakelen:

    Alineastijlen inschakelen

    Klikken Gereed om de beleidsupdate op te slaan.

Inhoud auteur

  1. Ga naar de Homepage http://localhost:4502/editor.html/content/wknd-spa-react/us/en/home.html.

  2. U moet nu de aanvullende componenten kunnen gebruiken Afbeelding, Teaser, en Titel op de pagina.

    Aanvullende componenten

  3. U moet ook de opdracht Text en voeg extra alineastijlen toe in volledig scherm -modus.

    Tekst bewerken op volledig scherm

  4. U moet ook een afbeelding uit de Asset Finder:

    Afbeelding slepen en neerzetten

  5. Ervaring met de Titel en Teaser componenten.

  6. Voeg uw eigen afbeeldingen toe via AEM Assets of installeer de voltooide codebasis voor de norm WKND-referentiesite. De WKND-referentiesite bevat veel afbeeldingen die opnieuw kunnen worden gebruikt op de WKND-SPA. Het pakket kan worden geïnstalleerd met AEM Package Manager.

    Pakketbeheer installeren wknd.all

Inspect the Layout Container

Steun voor de Layout Container wordt automatisch verstrekt door de AEM SPA Editor SDK. De Layout Container, zoals aangegeven door de naam, een container component. Containercomponenten zijn componenten die JSON-structuren accepteren die overige componenten te maken en ze dynamisch te instantiëren.

Controleer de container voor lay-out verder.

  1. Blader in een browser naar http://localhost:4502/content/wknd-spa-react/us/en.model.json

    JSON-model-API - Responsief raster

    De Layout Container component heeft een sling:resourceType van wcm/foundation/components/responsivegrid en wordt door de SPA Editor herkend met de :type eigenschap, net als de Text en Image componenten.

    Dezelfde mogelijkheden om de grootte van een component te wijzigen met Lay-outmodus zijn beschikbaar in de SPA Editor.

  2. Terug naar http://localhost:4502/editor.html/content/wknd-spa-react/us/en/home.html. Extra toevoegen Afbeelding en probeer deze opnieuw in te stellen met de Layout optie:

    Afbeeldingen vergroten/verkleinen met de modus Lay-out

  3. Het JSON-model opnieuw openen http://localhost:4502/content/wknd-spa-react/us/en.model.json en de columnClassNames als onderdeel van de JSON:

    Klassennamen wolken

    De klassenaam aem-GridColumn--default--4 Hiermee wordt aangegeven dat de component 4 kolommen breed moet zijn op basis van een raster van 12 kolommen. Meer informatie over de responsief raster is hier te vinden.

  4. Terugkeren naar de IDE en in de ui.apps er een client-side bibliotheek is gedefinieerd op ui.apps/src/main/content/jcr_root/apps/wknd-spa-react/clientlibs/clientlib-grid. Het bestand openen less/grid.less.

    Dit bestand bepaalt de onderbrekingspunten (default, tablet, en phone) gebruikt door de Layout Container. Dit dossier is bedoeld om per projectspecificaties worden aangepast. Momenteel zijn de onderbrekingspunten ingesteld op 1200px en 768px.

  5. U moet de responsieve mogelijkheden en het bijgewerkte rijke tekstbeleid van het Text aan auteur een mening als het volgende:

    Definitieve ontwerpversie van hoofdstukvoorbeeld

Gefeliciteerd! congratulations

Gefeliciteerd, leerde u hoe te om SPA componenten aan AEM Componenten in kaart te brengen en u gebruikte de Componenten van de Kern React. U hebt ook de kans om de responsieve mogelijkheden van de Layout Container.

Volgende stappen next-steps

Navigatie en routering - Leer hoe meerdere weergaven in de SPA kunnen worden ondersteund door aan AEM Pagina's toe te wijzen met de SPA Editor SDK. De dynamische navigatie wordt uitgevoerd gebruikend React Router en React de Componenten van de Kern.

(Bonus) zet configuraties aan broncontrole aan bonus-configs

In veel gevallen, vooral aan het begin van een AEM project is het waardevol om configuraties, zoals malplaatjes en verwant inhoudsbeleid, aan broncontrole voort te zetten. Dit zorgt ervoor dat alle ontwikkelaars tegen de zelfde reeks inhoud en configuraties werken en extra consistentie tussen milieu's kunnen verzekeren. Wanneer een project een bepaald ontwikkelingsniveau heeft bereikt, kan het beheren van sjablonen worden overgedragen aan een speciale groep van energiegebruikers.

De volgende paar stappen zullen plaatsvinden gebruikend winde van de Code van Visual Studio en VSCode AEM Sync maar kon doen gebruikend om het even welk hulpmiddel en om het even welke winde die u hebt gevormd om trekken of import inhoud van een lokale AEM.

  1. In winde van de Code van Visual Studio, zorg ervoor dat u hebt VSCode AEM Sync geïnstalleerd via de Marketplace-extensie:

    VSCode AEM Sync

  2. Breid uit ui.content in de ontdekkingsreiziger van het Project en navigeer aan /conf/wknd-spa-react/settings/wcm/templates.

  3. Rechts + klikken de templates map en selecteer Importeren vanaf AEM server:

    VSCode-importsjabloon

  4. Herhaal de stappen om inhoud te importeren, maar selecteer de beleid map op /conf/wknd-spa-react/settings/wcm/templates/policies.

  5. Inspect the filter.xml bestand bevindt zich op ui.content/src/main/content/META-INF/vault/filter.xml.

    code language-xml
    <!--ui.content filter.xml-->
    <?xml version="1.0" encoding="UTF-8"?>
     <workspaceFilter version="1.0">
         <filter root="/conf/wknd-spa-react" mode="merge"/>
         <filter root="/content/wknd-spa-react" mode="merge"/>
         <filter root="/content/dam/wknd-spa-react" mode="merge"/>
         <filter root="/content/experience-fragments/wknd-spa-react" mode="merge"/>
     </workspaceFilter>
    

    De filter.xml is verantwoordelijk voor het identificeren van de paden van knooppunten die samen met het pakket zijn geïnstalleerd. Let op: mode="merge" op elk van de filters wordt aangegeven dat bestaande inhoud niet wordt gewijzigd, alleen nieuwe inhoud toegevoegd. Aangezien de inhoudsauteurs deze wegen kunnen bijwerken, is het belangrijk dat een codeplaatsing doet niet overschrijven, inhoud. Zie de FileVault-documentatie voor meer informatie over het werken met filterelementen.

    Ververgelijken ui.content/src/main/content/META-INF/vault/filter.xml en ui.apps/src/main/content/META-INF/vault/filter.xml om de verschillende knopen te begrijpen die door elke module worden beheerd.

(Bonus) Aangepaste afbeeldingscomponent maken bonus-image

Er is al een SPA Image-component geleverd door de React Core-componenten. Als u echter extra oefening wilt, maakt u uw eigen React-implementatie die aan de AEM is toegewezen Afbeeldingscomponent. De Image is een ander voorbeeld van een component content component.

Inspect the JSON

Voordat u in de SPA code gaat springen, moet u het JSON-model controleren dat AEM biedt.

  1. Ga naar de Voorbeelden van afbeeldingen in de Core Component-bibliotheek.

    Image Core Component JSON

    Eigenschappen van src, alt, en title worden gebruikt om de SPA te vullen Image component.

    note note
    NOTE
    Er zijn andere afbeeldingseigenschappen blootgesteld (lazyEnabled, widths) waarmee een ontwikkelaar een adaptieve en uitgestelde component kan maken. De component die in deze zelfstudie is ingebouwd, is eenvoudig en werkt als volgt niet gebruik deze geavanceerde eigenschappen.

De component Image implementeren

  1. Maak vervolgens een nieuwe map met de naam Image krachtens ui.frontend/src/components.

  2. Onder de Image map maken een nieuw bestand met de naam Image.js.

    Image.js, bestand

  3. Voeg het volgende toe import instructies voor Image.js:

    code language-js
    import React, {Component} from 'react';
    import {MapTo} from '@adobe/aem-react-editable-components';
    
  4. Voeg vervolgens de knop ImageEditConfig bepalen wanneer de tijdelijke aanduiding in AEM moet worden weergegeven:

    code language-js
    export const ImageEditConfig = {
    
        emptyLabel: 'Image',
    
        isEmpty: function(props) {
            return !props || !props.src || props.src.trim().length < 1;
        }
    };
    

    De tijdelijke aanduiding geeft aan of de src eigenschap is niet ingesteld.

  5. De volgende implementatie van Image klasse:

    code language-js
     export default class Image extends Component {
    
        get content() {
            return <img     className="Image-src"
                            src={this.props.src}
                            alt={this.props.alt}
                            title={this.props.title ? this.props.title : this.props.alt} />;
        }
    
        render() {
            if(ImageEditConfig.isEmpty(this.props)) {
                return null;
            }
    
            return (
                    <div className="Image">
                        {this.content}
                    </div>
            );
        }
    }
    

    De bovenstaande code geeft een <img> op basis van de aanbevelingen src, alt, en title doorgegeven door het JSON-model.

  6. Voeg de MapTo code om de component React aan de AEM toe te wijzen component:

    code language-js
    MapTo('wknd-spa-react/components/image')(Image, ImageEditConfig);
    

    Noteer de tekenreeks wknd-spa-react/components/image komt overeen met de locatie van de AEM component in ui.apps om: ui.apps/src/main/content/jcr_root/apps/wknd-spa-react/components/image.

  7. Een nieuw bestand maken met de naam Image.css in dezelfde map en voeg het volgende toe:

    code language-scss
    .Image-src {
        margin: 1rem 0;
        width: 100%;
        border: 0;
    }
    
  8. In Image.js Voeg een verwijzing naar het bestand toe boven onder het tabblad import instructies:

    code language-js
    import React, {Component} from 'react';
    import {MapTo} from '@adobe/aem-react-editable-components';
    
    require('./Image.css');
    
  9. Het bestand openen ui.frontend/src/components/import-components.js en een verwijzing naar de nieuwe Image component:

    code language-js
    import './Page/Page';
    import './Text/Text';
    import './Container/Container';
    import './ExperienceFragment/ExperienceFragment';
    import './Image/Image'; //add reference to Image component
    
  10. In import-components.js Bekijk de React Core Component Image (React Core-componentafbeelding):

    code language-js
    //MapTo('wknd-spa-react/components/image')(ImageV2, {isEmpty: ImageV2IsEmptyFn});
    

    Op deze manier zorgt u ervoor dat de aangepaste component Image wordt gebruikt.

  11. Van de wortel van het project stel de SPA code aan AEM gebruikend Maven op:

    code language-shell
    $ cd aem-guides-wknd-spa.react
    $ mvn clean install -PautoInstallSinglePackage
    
  12. Inspect de SPA in AEM. Alle onderdelen van de afbeelding op de pagina blijven werken. Inspect de gerenderde uitvoer en u moet de markering voor onze aangepaste afbeeldingscomponent zien in plaats van de React Core-component.

    Aangepaste markering voor afbeeldingscomponent

    code language-html
    <div class="Image">
        <img class="Image-src" src="/content/image-src.jpg">
    </div>
    

    Opmaak van Core Component Image Reageren

    code language-html
    <div class="cmp-image cq-dd-image">
        <img src="/content/image-src.jpg" class="cmp-image__image">
    </div>
    

    Dit is een goede inleiding om uw eigen componenten uit te breiden en uit te voeren.

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