Bewerkbare vaste componenten
Bewerkbare React-componenten kunnen 'vast' zijn of hard gecodeerd in de SPA weergaven. Op deze manier kunnen ontwikkelaars SPA met de Editor compatibele componenten in de SPA weergaven plaatsen en kunnen gebruikers de inhoud van de componenten schrijven in AEM SPA Editor.
In dit hoofdstuk vervangen we de titel 'Huidige avonturen' van de weergave Home. Dit is een vaste, maar bewerkbare titel in Home.js
. Vaste componenten garanderen de plaatsing van de titel, maar staan ook toe dat de tekst van de titel wordt geschreven en dat de titel buiten de ontwikkelingscyclus wordt gewijzigd.
De WKND-app bijwerken
Om a Vaste component aan de mening van het Huis toe te voegen:
- Creeer een douane editable component van de Titel en registreer het aan het middeltype van de Titel van het project
- Plaats de bewerkbare component Titel in de SPA Home-weergave
Een bewerkbare component React Title maken
Vervang in de SPA Home-weergave de tekst met harde codes <h2>Current Adventures</h2>
door een aangepaste bewerkbare component Title. Voordat de component Titel kan worden gebruikt, moeten we:
- Een aangepaste component Title React maken
- Decoreer de component van de Titel van de douane gebruikend methodes van
@adobe/aem-react-editable-components
om het editable te maken. - Registreer de editable component van de Titel met
MapTo
zodat kan het in containercomponent laterworden gebruikt.
Dit doet u als volgt:
-
Open Verre SPA project bij
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app
in uw winde -
Een component React maken op
react-app/src/components/editable/core/Title.js
-
Voeg de volgende code toe aan
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
Deze React-component kan nog niet worden bewerkt met AEM SPA Editor. Deze basiscomponent wordt in de volgende stap bewerkbaar gemaakt.
Lees de opmerkingen van de code voor de implementatiedetails.
-
Een component React maken op
react-app/src/components/editable/EditableTitle.js
-
Voeg de volgende code toe aan
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;
Met deze
EditableTitle
React-component wordt deTitle
React-component verpakt, verpakt en decoreert deze zodat deze bewerkbaar is in AEM SPA Editor.
De component React EditableTitle gebruiken
Nu de component EditableTitle React is geregistreerd in en beschikbaar is voor gebruik in de React-app, vervangt u de tekst van de hard-gecodeerde titel in de weergave Home.
-
Bewerken
react-app/src/components/Home.js
-
Importeer
EditableTitle
in deHome()
onderaan en vervang de hard-gecodeerde titel door de nieuweAEMTitle
-component: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> ); }
Het bestand Home.js
moet er als volgt uitzien:
De component Titel in AEM maken
-
Aanmelden bij AEM auteur
-
Navigeer aan Plaatsen > app WKND
-
Tik Huis en selecteer uitgeven van de hoogste actiebar
-
Selecteer uitgeven van uitgeeft wijzesselecteur in het hoogste recht van de Redacteur van de Pagina
-
Houd de muisaanwijzer boven de standaardtiteltekst onder het WKND-logo en boven de lijst met avonturen totdat de omtrek voor blauwe bewerking wordt weergegeven
-
Tik om de actiebar van de component bloot te stellen, en dan de moersleutel te ontsteken om uit te geven
-
Auteur van de component Title:
-
Titel: WKND avonturen
-
Type/Grootte: H2
-
-
Tik Gedaan om te bewaren
-
Wijzigingen voorvertonen in AEM SPA Editor
-
Vernieuw de WKND App die plaatselijk op http://localhost:3000loopt en zie de authored onmiddellijk weerspiegelde titelveranderingen.
Gefeliciteerd!
U hebt een vaste, bewerkbare component toegevoegd aan de WKND-app! Nu weet u hoe:
- Een vaste, maar bewerkbare component voor de SPA maken
- Auteur van de vaste component in AEM
- Zie de geschreven inhoud in de Verre SPA
Volgende stappen
De volgende stappen moeten een AEM container ResponsiveGrid componentaan de SPA toevoegen die auteur toestaat om en editable componenten aan de SPA toe te voegen!