AEM Headless APIs and React
Välkommen till den här självstudiekursen där vi ska utforska hur du konfigurerar en React-app för att ansluta till Adobe Experience Manager (AEM) Headless API:er med AEM Headless SDK. Vi ska ta upp hämtning av data från innehållsfragment från AEM GraphQL API:er och visa dem i React-appen.
AEM Headless-API:er tillåter åtkomst AEM innehåll från alla klientprogram. Vi vägleder dig genom att konfigurera React-appen för att ansluta till AEM Headless-API:er med AEM Headless SDK. Med den här inställningen skapas en återanvändbar kommunikationskanal mellan appen React och AEM.
Därefter använder vi AEM Headless SDK för att hämta data för innehållsfragment från AEM GraphQL API:er. Innehållsfragment i AEM tillhandahåller strukturerad innehållshantering. Genom att använda AEM Headless SDK kan du enkelt hämta data för innehållsfragment med GraphQL.
När vi har data från Content Fragment integrerar vi dem i React-appen. Du får lära dig att formatera och visa data på ett tilltalande sätt. Vi kommer att beskriva de bästa sätten att hantera och återge Content Fragment-data i React-komponenter, vilket säkerställer en smidig integrering med appens användargränssnitt.
Under hela självstudiekursen kommer vi att ge förklaringar, kodexempel och praktiska tips. När allt kommer omkring kan du konfigurera appen React så att du kan ansluta till AEM Headless API:er, hämta data för innehållsfragment med hjälp av AEM Headless SDK och smidigt visa den i din React-app. Kom så börjar vi!
Klona React-appen
-
Klona appen från Github genom att köra följande kommando på kommandoraden.
code language-none $ git clone git@github.com:lamontacrook/headless-first.git
-
Ändra till katalogen
headless-first
och installera beroendena.code language-none $ cd headless-first $ npm ci
Konfigurera React-appen
-
Skapa en fil med namnet
.env
i projektets rot. Ange följande värden i.env
:code language-none REACT_APP_AEM=<URL of the AEM instance> REACT_APP_ENDPOINT=<the name of the endpoint> REACT_APP_PROJECT=<the name of the folder with Content Fragments> REACT_APP_TOKEN=<developer token>
-
Du kan hämta en utvecklartoken i Cloud Manager. Logga in på Adobe Cloud Manager. Klicka på Experience Manager > Cloud Manager. Välj lämpligt program och klicka sedan på ellipserna bredvid Miljön.
- Klicka på fliken Integrationer
- Klicka på fliken Lokal token och knappen Hämta lokal utvecklingstoken
- Kopiera åtkomsttoken med början efter den öppna offerten till före avslutande citattecken.
- Klistra in den kopierade token som värde för
REACT_APP_TOKEN
i filen.env
. - Nu skapar vi appen genom att köra
npm ci
på kommandoraden. - Starta nu React-appen och kör
npm run start
på kommandoraden. - I ./src/utils en fil med namnet
context.js
innehåller koden som anger värdena i filen.env
i appens kontext.
Kör React-appen
-
Starta React-appen genom att köra
npm run start
på kommandoraden.code language-none $ npm run start
Appen React startar och öppnar ett webbläsarfönster till
http://localhost:3000
. Ändringar i React-appen läses automatiskt in igen i webbläsaren.
Anslut till AEM Headless API:er
-
Om du vill ansluta React-appen till AEM as a Cloud Service lägger du till några saker i
App.js
. Lägg tilluseContext
iReact
-importen.code language-javascript import React, {useContext} from 'react';
Importera
AppContext
från filencontext.js
.code language-javascript import { AppContext } from './utils/context';
Definiera en kontextvariabel i programkoden.
code language-javascript const context = useContext(AppContext);
Och radbryt till slut returkoden i
<AppContext.Provider> ... </AppContext.Provider>
.code language-javascript ... return(<div className='App'> <AppContext.Provider value={context}> ... </AppContext.Provider> </div>);
Som referens bör
App.js
nu vara så här.code language-javascript import React, {useContext} from 'react'; import './App.css'; import { BrowserRouter, Routes, Route } from 'react-router-dom'; import Home from './screens/home/home'; import { AppContext } from './utils/context'; const App = () => { const context = useContext(AppContext); return ( <div className='App'> <AppContext.Provider value={context}> <BrowserRouter> <Routes> <Route exact={true} path={'/'} element={<Home />} /> </Routes> </BrowserRouter> </AppContext.Provider> </div> ); }; export default App;
-
Importera
AEMHeadless
SDK. Detta SDK är ett hjälpbibliotek som används av programmet för att interagera med AEM Headless API:er.Lägg till den här importsatsen i
home.js
.code language-javascript import AEMHeadless from '@adobe/aem-headless-client-js';
Lägg till följande
{ useContext, useEffect, useState }
i importsatsenReact
.code language-javascript import React, { useContext, useEffect, useState } from 'react';
Importera
AppContext
.code language-javascript import { AppContext } from '../../utils/context';
I komponenten
Home
hämtar du variabelncontext
frånAppContext
.code language-javascript const Home = () => { const context = useContext(AppContext); ... }
-
Initiera AEM Headless SDK inuti en
useEffect()
, eftersom AEM Headless SDK måste ändras när variabelncontext
ändras.code language-javascript useEffect(() => { const sdk = new AEMHeadless({ serviceURL: context.url, endpoint: context.endpoint, auth: context.token }); }, [context]);
note note NOTE Det finns en context.js
-fil under/utils
som läser element från filen.env
. Som referens ärcontext.url
webbadressen för AEM as a Cloud Service-miljön.context.endpoint
är den fullständiga sökvägen till slutpunkten som skapades i föregående lektion. Slutligen ärcontext.token
utvecklartoken. -
Skapa React-läge som visar innehållet som kommer från AEM Headless SDK.
code language-javascript const Home = () => { const [content, setContent] = useState({}); ... }
-
Anslut appen till AEM. Använd den beständiga fråga som skapades i föregående lektion. Vi lägger till följande kod i
useEffect
efter att AEM Headless SDK har initierats. GöruseEffect
beroende av variabelncontext
enligt nedan.code language-javascript useEffect(() => { ... sdk.runPersistedQuery('<name of the endpoint>/<name of the persisted query>', { path: `/content/dam/${context.project}/<name of the teaser fragment>` }) .then(({ data }) => { if (data) { setContent(data); } }) .catch((error) => { console.log(`Error with pure-headless/teaser. ${error.message}`); }); }, [context]);
-
Öppna nätverksvyn för utvecklingsverktygen för att granska GraphQL begäran.
<url to environment>/graphql/execute.json/pure-headless/teaser%3Bpath%3D%2Fcontent%2Fdam%2Fpure-headless%2Fhero
AEM Headless SDK kodar begäran för GraphQL och lägger till de angivna parametrarna. Du kan öppna begäran i webbläsaren.
note note NOTE Eftersom begäran går till redigeringsmiljön måste du vara inloggad i miljön på en annan flik i samma webbläsare.
Återge innehåll i innehållsfragment
-
Visa innehållets fragment i appen. Returnera en
<div>
med teaserns titel.code language-javascript return ( <div className='main-body'> <div>{content.component && (content.component.item.title)}</div> </div> );
Textfältet för teaser visas på skärmen.
-
Det sista steget är att lägga till suddgummit på sidan. En React Teaser-komponent ingår i paketet. Först tar vi med importen. Lägg till raden längst upp i filen
home.js
:import Teaser from '../../components/teaser/teaser';
Uppdatera programsatsen return:
code language-javascript return ( <div className='main-body'> <div>{content.component && <Teaser content={content.component.item} />}</div> </div> );
Nu bör du se suddgummit med innehållet inuti fragmentet.
Nästa steg
Grattis! Du har uppdaterat React-appen för att integrera med AEM Headless-API:er med AEM Headless SDK!
Sedan skapar vi en mer komplex bildlistekomponent som dynamiskt återger refererade innehållsfragment från AEM.
Nästa kapitel: Skapa en bildlistkomponent