API AEM headless e React
Benvenuti in questo capitolo di esercitazione in cui esploreremo la configurazione di un’app React per la connessione con le API headless di Adobe Experience Manager (AEM) tramite AEM Headless SDK. Scopriremo come recuperare i dati dei frammenti di contenuto dalle API GraphQL di AEM e come visualizzarli nell’app React.
Le API AEM Headless consentono di accedere ai contenuti di AEM da qualsiasi app client. Ti guideremo attraverso la configurazione della tua app React per connettersi alle API AEM Headless tramite AEM Headless SDK. Questa configurazione stabilisce un canale di comunicazione riutilizzabile tra l’app React e AEM.
Ora utilizzeremo AEM Headless SDK per recuperare i dati dei frammenti di contenuto dalle API GraphQL di AEM. I frammenti di contenuto in AEM forniscono una gestione strutturata dei contenuti. Utilizzando AEM Headless SDK, puoi facilmente eseguire query e recuperare dati dei frammenti di contenuto utilizzando GraphQL.
Una volta ottenuti i dati dei frammenti di contenuto, li integreremo nella tua app React. Scoprirai come formattare e visualizzare i dati in modo interessante. Vengono descritte le best practice per la gestione e il rendering dei dati dei frammenti di contenuto nei componenti React, garantendo un’integrazione perfetta con l’interfaccia utente dell’app.
Nel corso dell’esercitazione forniremo spiegazioni, esempi di codice e suggerimenti pratici. Entro la fine, potrai configurare l’app React per connettersi alle API AEM Headless, recuperare i dati dei frammenti di contenuto utilizzando AEM Headless SDK e visualizzarli direttamente nell’app React. Iniziamo!
Clonare l’app React
-
Clona l'app da Github eseguendo il comando seguente sulla riga di comando.
code language-none $ git clone git@github.com:lamontacrook/headless-first.git -
Passare alla directory
headless-firste installare le dipendenze.code language-none $ cd headless-first $ npm ci
Configurare l’app React
-
Creare un file denominato
.envnella directory principale del progetto. In.envimpostare i seguenti valori: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> -
Puoi recuperare un token sviluppatore in Cloud Manager. Accedi a Adobe Cloud Manager. Fare clic su Experience Manager > Cloud Manager. Scegli il programma appropriato, quindi fai clic sui puntini di sospensione accanto all’ambiente.
- Fai clic sulla scheda Integrazioni
- Fai clic sulla scheda Token locale e sul pulsante Ottieni token di sviluppo locale ____
- Copia il token di accesso che inizia dopo la virgoletta aperta fino a prima della virgoletta di chiusura.
- Incolla il token copiato come valore per
REACT_APP_TOKENnel file.env. - Ora creiamo l'app eseguendo
npm cisulla riga di comando. - Avviare l'app React ed eseguire
npm run startsulla riga di comando. - Tra ./src/utils un file denominato
context.jsinclude il codice per impostare i valori nel file.envnel contesto dell'app.
Eseguire l’app React
-
Avviare l'app React eseguendo
npm run startsulla riga di comando.code language-none $ npm run startL'app React verrà avviata e aprirà una finestra del browser per
http://localhost:3000. Le modifiche all’app React verranno ricaricate automaticamente nel browser.
Connettersi alle API AEM Headless
-
Per collegare l'app React ad AEM as a Cloud Service, aggiungiamo alcuni elementi a
App.js. Nell'importazioneReact, aggiungiuseContext.code language-javascript import React, {useContext} from 'react';Importa
AppContextdal filecontext.js.code language-javascript import { AppContext } from './utils/context';Ora all’interno del codice dell’app, definisci una variabile di contesto.
code language-javascript const context = useContext(AppContext);Infine, racchiudere il codice restituito in
<AppContext.Provider> ... </AppContext.Provider>.code language-javascript ... return(<div className='App'> <AppContext.Provider value={context}> ... </AppContext.Provider> </div>);Per riferimento,
App.jsora dovrebbe essere così.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; -
Importa il SDK
AEMHeadless. Questa SDK è una libreria di supporto utilizzata dall’app per interagire con le API headless di AEM.Aggiungi questa istruzione di importazione a
home.js.code language-javascript import AEMHeadless from '@adobe/aem-headless-client-js';Aggiungi
{ useContext, useEffect, useState }seguente all'istruzione di importazioneReact.code language-javascript import React, { useContext, useEffect, useState } from 'react';Importa
AppContext.code language-javascript import { AppContext } from '../../utils/context';All'interno del componente
Home, ottenere la variabilecontextdaAppContext.code language-javascript const Home = () => { const context = useContext(AppContext); ... } -
Inizializza AEM Headless SDK in un
useEffect(), poiché AEM Headless SDK deve cambiare quando cambia la variabilecontext.code language-javascript useEffect(() => { const sdk = new AEMHeadless({ serviceURL: context.url, endpoint: context.endpoint, auth: context.token }); }, [context]);note note NOTE È presente un file context.jsin/utilsche sta leggendo elementi dal file.env. Per riferimento,context.urlè l'URL dell'ambiente AEM as a Cloud Service.context.endpointè il percorso completo dell'endpoint creato nella lezione precedente. Infine,context.tokenè il token sviluppatore. -
Creare uno stato di React che espone il contenuto proveniente da AEM Headless SDK.
code language-javascript const Home = () => { const [content, setContent] = useState({}); ... } -
Connetti l’app ad AEM. Utilizza la query persistente creata nella lezione precedente. Aggiungiamo il seguente codice in
useEffectdopo l'inizializzazione di AEM Headless SDK. RendiuseEffectdipendente dalla variabilecontext, come illustrato di seguito.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]); -
Apri la vista Rete degli strumenti per sviluppatori per rivedere la richiesta GraphQL.
<url to environment>/graphql/execute.json/pure-headless/teaser%3Bpath%3D%2Fcontent%2Fdam%2Fpure-headless%2Fhero
AEM Headless SDK codifica la richiesta per GraphQL e aggiunge i parametri forniti. Puoi aprire la richiesta nel browser.
note note NOTE Poiché la richiesta viene indirizzata all’ambiente di authoring, devi aver effettuato l’accesso a tale ambiente in un’altra scheda dello stesso browser.
Rendering contenuto frammento di contenuto
-
Visualizza i Frammenti di contenuto nell’app. Restituisce
<div>con il titolo del teaser.code language-javascript return ( <div className='main-body'> <div>{content.component && (content.component.item.title)}</div> </div> );Sullo schermo dovrebbe essere visualizzato il campo del titolo del teaser.
-
L’ultimo passaggio consiste nell’aggiungere il teaser alla pagina. Il pacchetto include un componente teaser di React. Innanzitutto, includiamo l’importazione. Nella parte superiore del file
home.js, aggiungi la riga:import Teaser from '../../components/teaser/teaser';Aggiornare l'istruzione return:
code language-javascript return ( <div className='main-body'> <div>{content.component && <Teaser content={content.component.item} />}</div> </div> );Ora dovresti visualizzare il teaser con il contenuto incluso all’interno del frammento.
Passaggi successivi
Congratulazioni Hai aggiornato correttamente l’app React per l’integrazione con le API AEM Headless tramite AEM Headless SDK.
Quindi, creiamo un componente Elenco immagini più complesso che esegue il rendering dinamico dei frammenti di contenuto di riferimento da AEM.
Capitolo successivo: Creare un componente Elenco immagini