Integratie van clienttoepassingen
In het vorige hoofdstuk, creeerde en bijwerkte voortgeduurde vragen gebruikend Ontdekkingsreiziger GraphiQL.
Dit hoofdstuk begeleidt u door de stappen om de voortgeduurde vragen met de WKND cliënttoepassing (alias WKND App) te integreren gebruikend de verzoeken van HTTP GET binnen bestaande componenten van het Reageren. Het biedt ook een optionele uitdaging om uw AEM headless lessen toe te passen, codeerexpertise om de WKND-clienttoepassing te verbeteren.
Vereisten prerequisites
Dit document is onderdeel van een zelfstudie met meerdere onderdelen. Controleer of de vorige hoofdstukken zijn voltooid voordat u verdergaat met dit hoofdstuk. De WKND cliënttoepassing verbindt met AEM publiceer dienst, zodat is het belangrijk dat u het volgende aan de AEM publicatiedienst publiceerde.
- Projectconfiguraties
- GraphQL-eindpunten
- Modellen van inhoudsfragmenten
- Geautoriseerde inhoudsfragmenten
- GraphQL blijft vragen
De IDE screenshots in dit hoofdstuk komen uit Code van Visual Studio
Hoofdstuk 1-4 Oplossingspakket (optioneel) solution-package
Er is een oplossingspakket beschikbaar om te worden geïnstalleerd dat de stappen in AEM UI voor hoofdstukken 1-4 voltooit. Dit pakket is niet nodig als de vorige hoofdstukken zijn voltooid.
- Download geavanceerd-GraphQL-Tutorial-Oplossing-Pakket-1.2.zip.
- In AEM, navigeer aan Hulpmiddelen > Plaatsing > Pakketten om tot de Manager van het Pakket toegang te hebben.
- Upload en installeer het pakket (ZIP-bestand) dat u in de vorige stap hebt gedownload.
- Repliceer het pakket naar de AEM Publish-service
Doelstellingen objectives
In dit leerprogramma, leert u hoe te om de verzoeken om voortgeduurde vragen in de steekproefWKND GraphQL React app te integreren gebruikend AEM Koploze Cliënt voor JavaScript.
De voorbeeldclienttoepassing klonen en uitvoeren clone-client-app
Om de zelfstudie te versnellen, wordt een startapp van React JS geleverd.
-
Kloon de adobe/aem-guides-wknd-grafischbewaarplaats:
code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
-
Bewerk het
aem-guides-wknd-graphql/advanced-tutorial/.env.development
-bestand en stelREACT_APP_HOST_URI
zo in dat het naar uw doel AEM publicatieservice wijst.Werk de authentificatiemethode bij als het verbinden met een auteursinstantie.
code language-plain # Server namespace REACT_APP_HOST_URI=https://publish-pxx-eyy.adobeaemcloud.com #AUTH (Choose one method) # Authentication methods: 'service-token', 'dev-token', 'basic' or leave blank to use no authentication REACT_APP_AUTH_METHOD= # For Bearer auth, use DEV token (dev-token) from Cloud console REACT_APP_DEV_TOKEN= # For Service toke auth, provide path to service token file (download file from Cloud console) REACT_APP_SERVICE_TOKEN=auth/service-token.json # For Basic auth, use AEM ['user','pass'] pair (eg for Local AEM Author instance) REACT_APP_BASIC_AUTH_USER= REACT_APP_BASIC_AUTH_PASS=
note note NOTE De bovenstaande instructies moeten Reageren app met de AEM dienst van Publish verbinden, nochtans om met de AEM dienst van de Auteur een lokaal ontwikkelingstoken voor uw milieu van doelAEM as a Cloud Service te verbinden. Het is ook mogelijk om app met a lokale instantie van de Auteur te verbinden gebruikend AEMaaCS SDKgebruikend basisauthentificatie. -
Open een terminal en voer de opdrachten uit:
code language-shell $ cd aem-guides-wknd-graphql/advanced-tutorial $ npm install $ npm start
-
Een nieuw browser venster zou op http://localhost:3000moeten laden
-
Tik Camping > Yosemite Backpackaging om de Yosemite details van het Backpackaging-avontuur te bekijken.
-
Open de ontwikkelaarsgereedschappen van de browser en inspecteer de aanvraag
XHR
U zou
GET
verzoeken aan het eindpunt van GraphQL met project config naam (wknd-shared
), voortgeduurde vraagnaam (adventure-by-slug
), veranderlijke naam (slug
), waarde (yosemite-backpacking
), en speciale karaktercoderingen moeten zien.
http://localhost:3000
en NIET tegen het AEM domein van de Dienst van Publish wordt gemaakt, herzie onder het Hoodvan Basisleerprogramma.De code controleren
In het Basisleerprogramma - bouw een Reactie app die AEM 1} stap van GraphQL APIs gebruikt hadden wij herzien en enkele zeer belangrijke dossiers verbeterd om hands-on deskundigheid te krijgen.Controleer de belangrijkste bestanden voordat u de WKND-app verbetert.
Component redigeren Adventures
Reageren
De WKND React app belangrijkste mening is de lijst van alle avonturen en u kunt deze die avonturen filtreren op activiteitstype zoals Camping, Cyclling worden gebaseerd. Deze weergave wordt gerenderd door de component Adventures
. Hieronder vindt u de belangrijkste implementatiedetails:
-
Het argument
src/components/Adventures.js
calluseAllAdventures(adventureActivity)
haak en hereadventureActivity
is activity type. -
De
useAllAdventures(adventureActivity)
haak wordt gedefinieerd in hetsrc/api/usePersistedQueries.js
-bestand. Gebaseerd opadventureActivity
waarde, bepaalt het welke voortgezette vraag om te roepen. Als de waarde null is, wordtwknd-shared/adventures-by-activity
aangeroepen, anders worden alle beschikbare avonturenwknd-shared/adventures-all
opgehaald. -
De haak gebruikt de hoofdfunctie
fetchPersistedQuery(..)
die de uitvoering van de query aanAEMHeadless
viaaemHeadlessClient.js
delegeert. -
De haak retourneert ook alleen de relevante gegevens van de AEM GraphQL-respons op
response.data?.adventureList?.items
, zodat deAdventures
React view-componenten niet op de hoogte zijn van de bovenliggende JSON-structuren. -
Op succesvolle vraaguitvoering,
AdventureListItem(..)
geef functie vanAdventures.js
terug voegt HTML element toe om het Beeld, de Lengte van de Trip, de Prijs, en de informatie van de Titel te tonen.
Component redigeren AdventureDetail
Reageren
De component AdventureDetail
React geeft de details van het avontuur terug. Hieronder vindt u de belangrijkste implementatiedetails:
-
Het argument
src/components/AdventureDetail.js
calluseAdventureBySlug(slug)
haak en hereslug
is queryparameter. -
Zoals hierboven wordt de
useAdventureBySlug(slug)
haak gedefinieerd in hetsrc/api/usePersistedQueries.js
-bestand.wknd-shared/adventure-by-slug
persisted query wordt aangeroepen door te delegeren aanAEMHeadless
viaaemHeadlessClient.js
. -
Als de query met succes is uitgevoerd, voegt de renderfunctie
AdventureDetailRender(..)
vanAdventureDetail.js
het element HTML toe om de Adventure-details weer te geven.
De code verbeteren
Gebruik adventure-details-by-slug
voortgezette query
In het vorige hoofdstuk, creeerden wij de adventure-details-by-slug
voortgezette vraag, verstrekt het extra informatie van het avontuur zoals plaats, instructorTeam, en beheerder. Vervang adventure-by-slug
door adventure-details-by-slug
aanhoudende query om deze extra informatie te renderen.
-
Open
src/api/usePersistedQueries.js
. -
De functie zoeken
useAdventureBySlug()
en query bijwerken als
...
// Call the AEM GraphQL persisted query named "wknd-shared/adventure-details-by-slug" with parameters
response = await fetchPersistedQuery(
"wknd-shared/adventure-details-by-slug",
queryParameters
);
...
Aanvullende informatie weergeven
-
Open
src/components/AdventureDetail.js
als u aanvullende informatie over de avontuur wilt weergeven -
Zoek de functie
AdventureDetailRender(..)
en werk de retourfunctie bij alscode language-javascript ... return (<> <h1 className="adventure-detail-title">{title}</h1> <div className="adventure-detail-info"> <LocationInfo {...location} /> ... <Location {...location} /> <Administrator {...administrator} /> <InstructorTeam {...instructorTeam} /> </div> </>); ...
-
Definieer ook de corresponderende renderfuncties:
LocationInfo
code language-javascript function LocationInfo({name}) { if (!name) { return null; } return ( <> <div className="adventure-detail-info-label">Location</div> <div className="adventure-detail-info-description">{name}</div> </> ); }
Plaats
code language-javascript function Location({ contactInfo }) { if (!contactInfo) { return null; } return ( <> <div className='adventure-detail-location'> <h2>Where we meet</h2> <hr /> <div className="adventure-detail-addtional-info">Phone:{contactInfo.phone}</div> <div className="adventure-detail-addtional-info">Email:{contactInfo.email}</div> </div> </>); }
InstructorTeam
code language-javascript function InstructorTeam({ _metadata }) { if (!_metadata) { return null; } return ( <> <div className='adventure-detail-team'> <h2>Instruction Team</h2> <hr /> <div className="adventure-detail-addtional-info">Team Name: {_metadata.stringMetadata[0].value}</div> </div> </>); }
Beheerder
code language-javascript function Administrator({ fullName, contactInfo }) { if (!fullName || !contactInfo) { return null; } return ( <> <div className='adventure-detail-administrator'> <h2>Administrator</h2> <hr /> <div className="adventure-detail-addtional-info">Name: {fullName}</div> <div className="adventure-detail-addtional-info">Phone: {contactInfo.phone}</div> <div className="adventure-detail-addtional-info">Email: {contactInfo.email}</div> </div> </>); }
Nieuwe stijlen definiëren
-
Open
src/components/AdventureDetail.scss
en voeg de volgende klassendefinities toecode language-css .adventure-detail-administrator, .adventure-detail-team, .adventure-detail-location { margin-top: 1em; width: 100%; float: right; } .adventure-detail-addtional-info { padding: 10px 0px 5px 0px; text-transform: uppercase; }
Nadat de bovenstaande verbeteringen zijn voltooid, ziet de WKND-app er als volgt uit en toont de ontwikkelaarsgereedschappen van de browser adventure-details-by-slug
de voortgezette queryaanroep.
Uitdaging voor uitbreiding (optioneel)
WKND Reageer app's belangrijkste mening staat u toe om deze avonturen te filtreren die op activiteitentype zoals worden gebaseerd Camping, het Cycliseren. Nochtans het bedrijfsteam van WKND wil een extra Gebaseerde het filtreren van de Plaats vermogen hebben. De eisen zijn:
- Op WKND App's belangrijkste mening, in de hoogste linkerzijde of juiste hoek voeg het filtreren van de Plaats pictogram toe.
- Het klikken het filtreren van de Plaats pictogram zou lijst van plaatsen moeten tonen.
- Als u op een gewenste locatie in de lijst klikt, worden alleen overeenkomende avonturen weergegeven.
- Als er slechts één passend avontuur is, wordt de mening van de Details van het Avontuur getoond.
Gefeliciteerd
Gefeliciteerd! U hebt de voortgezette query's nu geïntegreerd en geïmplementeerd in de WKND-voorbeeldapp.