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

  1. 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
    
  2. Ändra till katalogen headless-first och installera beroendena.

    code language-none
    $ cd headless-first
    $ npm ci
    

Konfigurera React-appen

  1. 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>
    
  2. 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.

    AEM Developer Console

    1. Klicka på fliken Integrationer
    2. Klicka på fliken Lokal token och knappen Hämta lokal utvecklingstoken
    3. Kopiera åtkomsttoken med början efter den öppna offerten till före avslutande citattecken.
    4. Klistra in den kopierade token som värde för REACT_APP_TOKEN i filen .env.
    5. Nu skapar vi appen genom att köra npm ci på kommandoraden.
    6. Starta nu React-appen och kör npm run start på kommandoraden.
    7. 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

  1. 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

  1. Om du vill ansluta React-appen till AEM as a Cloud Service lägger du till några saker i App.js. Lägg till useContext i React-importen.

    code language-javascript
    import React, {useContext} from 'react';
    

    Importera AppContext från filen context.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;
    
  2. 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 importsatsen React.

    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 variabeln context från AppContext.

    code language-javascript
    const Home = () => {
    const context = useContext(AppContext);
    ...
    }
    
  3. Initiera AEM Headless SDK inuti en useEffect(), eftersom AEM Headless SDK måste ändras när variabeln context ä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 är context.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 är context.token utvecklartoken.
  4. Skapa React-läge som visar innehållet som kommer från AEM Headless SDK.

    code language-javascript
    const Home = () => {
    const [content, setContent] = useState({});
    ...
    }
    
  5. 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ör useEffect beroende av variabeln context 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]);
    
  6. Ö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

    Chrome Dev Tools

    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

  1. 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.

  2. 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

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4