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
- Leer hoe u AEM componenten kunt toewijzen aan SPA.
- Inspect hoe een component React dynamische eigenschappen gebruikt die van AEM worden overgegaan.
- Leer hoe te om uit de doos te gebruiken Reageer AEM de Componenten van de Kern.
Wat u gaat maken
Dit hoofdstuk inspecteert hoe de verstrekte Text
SPA component aan de AEM Text
component in kaart wordt gebracht. React Core Components zoals de Image
SPA component wordt gebruikt in de SPA en ontworpen in AEM. Uit de dooseigenschappen van de Container van de Lay-out en Redacteur van het Malplaatje beleid worden ook gebruikt om een mening tot stand te brengen die een weinig gevarieerder in verschijning is.
Vereisten
Herzie het vereiste tooling en de instructies voor vestiging a lokale ontwikkelomgeving. Dit hoofdstuk is een voortzetting van integreer het SPAhoofdstuk, nochtans om langs allen te volgen u een SPA-toegelaten AEM project nodig hebt.
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 in kaart brengen van een AEM Component aan een Component van het Reageren
De tekstcomponent Inspect
Het AEM Archetype van het Projectverstrekt een Text
component die aan de AEM component van de Tekstin kaart wordt gebracht. Dit is een voorbeeld van de component van de a inhoud, in die zin dat het inhoud van AEM teruggeeft.
Laten we eens kijken hoe de component werkt.
Inspect het JSON-model
-
Voordat u in de SPA code springt, is het belangrijk dat u het JSON-model begrijpt dat AEM biedt. Navigeer aan de Bibliotheek van de Component van de Kernen bekijk de pagina voor de component van de Tekst. De Core Component Library bevat voorbeelden van alle AEM Core Components.
-
Selecteer het JSON lusje voor één van de voorbeelden:
Er moeten drie eigenschappen worden weergegeven:
text
,richText
en:type
.:type
is een gereserveerde eigenschap die desling:resourceType
(of het pad) van de AEM Component opsomt. De waarde van:type
is wat wordt gebruikt om de AEM component aan de SPA toe te wijzen.text
enrichText
zijn extra eigenschappen die aan de SPA component worden blootgesteld. -
Bekijk de output JSON in 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
-
In winde van uw keus open omhoog het AEM Project voor de SPA. Vouw de module
ui.frontend
uit en open het bestandText.js
onderui.frontend/src/components/Text/Text.js
. -
Het eerste gebied dat we zullen inspecteren, is de
class Text
bij ~line 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 standaardcomponent React. De component gebruiktthis.props.richText
om te bepalen of de inhoud die moet worden gerenderd RTF-tekst of tekst zonder opmaak is. De werkelijk gebruikte "inhoud" komt vanthis.props.text
.Om een potentiële aanval van XSS te vermijden, wordt de rijke tekst ontsnapt via
DOMPurify
alvorens gevaarlijkSetInnerHTMLte gebruiken om de inhoud terug te geven. Herhaal de eigenschappenrichText
entext
van het JSON-model eerder in de oefening. -
Open
ui.frontend/src/components/import-components.js
en bekijk vervolgens deTextEditConfig
bij ~line 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 waar terugkeert dan placeholder wordt teruggegeven. -
Bekijk ten slotte de
MapTo
oproep bij ~line 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 padwknd-spa-react/components/text
vertegenwoordigt desling:resourceType
van de AEM. Dit pad komt overeen met het pad:type
dat wordt weergegeven door het JSON-model dat u eerder hebt waargenomen.MapTo
zorgt ervoor dat de JSON-modelrespons wordt geparseerd en dat de juiste waarden alsprops
worden doorgegeven aan de SPA.U kunt de definitie van de AEM
Text
-component vinden opui.apps/src/main/content/jcr_root/apps/wknd-spa-react/components/text
.
Reageren kerncomponenten gebruiken
AEM componenten WCM - Reageer de implementatie van de Kernen AEM Componenten WCM - de redacteur van de SPA - Reageer de implementatie van de Kern. 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.
-
Open in de projectcode het bestand
import-components.js
opui.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. -
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';
-
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 vervolgens toegewezen aan projectspecifieke AEM componenten met behulp vanMapTo
, net als in het voorbeeld van deText
-component.
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.
-
Van het AEM scherm van het Begin navigeert aan Hulpmiddelen > Malplaatjes > WKND SPA Reageren.
-
Selecteer en open het SPA malplaatje van de Pagina voor het uitgeven.
-
Selecteer de Container van de Lay-out en klik het beleid pictogram om het beleid uit te geven:
-
Onder Toegestane Componenten > WKND SPA Reageren - Inhoud > controleer Beeld, Taser, en Titel.
Onder GebrekComponenten > voeg afbeelding toe en kies het Beeld - WKND SPA Reageren - Inhoud component:
Ga a mime type van
image/*
in.Klik Gedaan om de beleidsupdates te bewaren.
-
In de Container van de Lay-out klik het beleid pictogram voor de component van de Tekst.
Creeer een nieuw beleid genoemd WKND SPA Tekst. Onder Insteekmodules > Formatterend > controleer alle dozen om extra het formatteren opties toe te laten:
toe
Onder Insteekmodules > Stijlen van de Paragraaf > controleer de doos alineastijlen toelaten:
toe
Klik Gedaan om de beleidsupdate te bewaren.
Inhoud auteur
-
Navigeer aan de Homepage http://localhost:4502/editor.html/content/wknd-spa-react/us/en/home.html.
-
U zou nu de extra componenten Beeld, Taser, en Titel op de pagina moeten kunnen gebruiken.
-
U zou ook de
Text
component moeten kunnen uitgeven en extra paragraafstijlen op volledig-scherm wijze toevoegen. -
U zou ook een beeld van de Vinder van Activa moeten kunnen slepen en neerzetten:
-
Ervaring met de Titel en Taser componenten.
-
Voeg uw eigen beelden via AEM Assetstoe of installeer de gebeëindigde codebasis voor de standaard WKND verwijzingsplaats. De WKND verwijzingsplaatsomvat vele beelden die op de SPA kunnen worden opnieuw gebruikt WKND. Het pakket kan worden geïnstalleerd gebruikend AEM de Manager van het Pakket.
Inspect the Layout Container
De steun voor de Container van de Lay-out wordt automatisch verstrekt door de AEM SPA Redacteur SDK. De Container van de Lay-out, zoals die door de naam wordt vermeld, is a container component. De componenten van de container zijn componenten die structuren goedkeuren JSON die andere componenten vertegenwoordigen en dynamisch hen concretiseren.
Controleer de container voor lay-out verder.
-
In browser navigeert aan http://localhost:4502/content/wknd-spa-react/us/en.model.json
De component van de Container van de Lay-out heeft a
sling:resourceType
vanwcm/foundation/components/responsivegrid
en door de SPARedacteur gebruikend het:type
bezit, enkel alsText
enImage
componenten erkend.De zelfde mogelijkheden om een component opnieuw te rangschikken gebruikend Wijze van de Lay-outzijn beschikbaar met de SPARedacteur.
-
Keer terug naar http://localhost:4502/editor.html/content/wknd-spa-react/us/en/home.html. Voeg extra componenten van het Beeld 0} toe {en probeer re-sizing hen gebruikend de optie van de Lay-out :
-
Heropen het model JSON http://localhost:4502/content/wknd-spa-react/us/en.model.jsonen bekijk
columnClassNames
als deel van JSON:{de namen van de Klasse van 0} Wolk
De klassenaam
aem-GridColumn--default--4
geeft aan dat de component 4 kolommen breed moet zijn op basis van een raster van 12 kolommen. Meer details over het ontvankelijke net kunnen hierworden gevonden. -
Keer terug naar winde en in de
ui.apps
module is er een cliënt-zijbibliotheek die bijui.apps/src/main/content/jcr_root/apps/wknd-spa-react/clientlibs/clientlib-grid
wordt bepaald. Open het bestandless/grid.less
.Dit dossier bepaalt de breekpunten (
default
,tablet
, enphone
) die door de Container van de Lay-out worden gebruikt. Dit dossier is bedoeld om per projectspecificaties worden aangepast. Momenteel zijn de onderbrekingspunten ingesteld op1200px
en768px
. -
U moet de responsieve mogelijkheden en het bijgewerkte rijke tekstbeleid van de
Text
component kunnen gebruiken om een mening als het volgende te ontwerpen:
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 een kans om de ontvankelijke mogelijkheden van de Container van de Lay-out te onderzoeken.
Volgende stappen next-steps
Navigatie en het Verpletteren- leer hoe de veelvoudige meningen in de SPA door afbeelding aan AEM Pagina's met SPA Redacteur SDK kunnen worden gesteund. 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 Synchronisatiemaar zouden het gebruiken van om het even welk hulpmiddel en om het even welke winde kunnen doen die u aan trek of invoert inhoud van een lokale instantie van AEM hebt gevormd.
-
In winde van de Code van Visual Studio, zorg ervoor dat u VSCode AEM Synchronisatie geïnstalleerd via de uitbreiding van de Marketplace hebt:
-
Breid ui.content module in de ontdekkingsreiziger van het Project uit en navigeer aan
/conf/wknd-spa-react/settings/wcm/templates
. -
Right+Click de
templates
omslag en selecteer Invoer van AEM Server: -
Herhaal de stappen om inhoud in te voeren maar selecteer de beleid omslag die bij
/conf/wknd-spa-react/settings/wcm/templates/policies
wordt gevestigd. -
Inspect het
filter.xml
-bestand opui.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>
Het bestand
filter.xml
identificeert de paden van knooppunten die met het pakket zijn geïnstalleerd. Let opmode="merge"
op elk van de filters die aangeeft dat bestaande inhoud niet wordt gewijzigd, alleen nieuwe inhoud wordt toegevoegd. Aangezien de inhoudsauteurs deze wegen kunnen bijwerken, is het belangrijk dat een codeplaatsing geen inhoud overschrijft. Zie de documentatie FileVaultvoor meer details bij het werken met filterelementen.Vergelijk
ui.content/src/main/content/META-INF/vault/filter.xml
enui.apps/src/main/content/META-INF/vault/filter.xml
om inzicht te krijgen in de verschillende knooppunten 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. Nochtans, als u extra praktijk wilt, creeer uw eigen implementatie van het Reageren die kaarten aan de AEM component van het Beeld. De Image
component is een ander voorbeeld van a inhoud component.
Inspect the JSON
Voordat u in de SPA code gaat springen, moet u het JSON-model controleren dat AEM biedt.
-
Navigeer aan de voorbeelden van het Beeld in de bibliotheek van de Component van de Kern.
Eigenschappen van
src
,alt
entitle
worden gebruikt om de SPAImage
-component te vullen.note note NOTE Er zijn andere eigenschappen van het Beeld blootgesteld ( lazyEnabled
,widths
) die een ontwikkelaar toestaan om een adaptieve en lui-ladende component tot stand te brengen. De component die in dit leerprogramma wordt gebouwd is eenvoudig en gebruikt deze geavanceerde eigenschappen niet.
De component Image implementeren
-
Maak vervolgens een nieuwe map met de naam
Image
onderui.frontend/src/components
. -
Onder de map
Image
maakt u een nieuw bestand met de naamImage.js
. -
Voeg de volgende
import
instructies toe aanImage.js
:code language-js import React, {Component} from 'react'; import {MapTo} from '@adobe/aem-react-editable-components';
-
Voeg vervolgens de
ImageEditConfig
toe om te 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 plaatsaanduiding wordt weergegeven als de eigenschap
src
niet is ingesteld. -
Implementeer vervolgens de klasse
Image
: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>
weer op basis van de eigenschappensrc
,alt
entitle
die door het JSON-model zijn doorgegeven. -
Voeg de code
MapTo
toe om de component React aan de AEM toe te wijzen:code language-js MapTo('wknd-spa-react/components/image')(Image, ImageEditConfig);
De tekenreeks
wknd-spa-react/components/image
komt overeen met de locatie van de AEM component inui.apps
at:ui.apps/src/main/content/jcr_root/apps/wknd-spa-react/components/image
. -
Maak een nieuw bestand 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; }
-
Voeg in
Image.js
een verwijzing naar het bestand toe boven onder de instructiesimport
:code language-js import React, {Component} from 'react'; import {MapTo} from '@adobe/aem-react-editable-components'; require('./Image.css');
-
Open het bestand
ui.frontend/src/components/import-components.js
en voeg een verwijzing naar de nieuwe componentImage
toe:code language-js import './Page/Page'; import './Text/Text'; import './Container/Container'; import './ExperienceFragment/ExperienceFragment'; import './Image/Image'; //add reference to Image component
-
Verwijder in
import-components.js
het commentaar React Core Component Image: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.
-
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
-
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.
de componentenprijsverhoging van het Beeld van de Douane
code language-html <div class="Image"> <img class="Image-src" src="/content/image-src.jpg"> </div>
React de prijsverhoging van het Beeld van de Component van de Kern
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.