APIs do AEM Headless e React
Bem-vindo a este capítulo de tutorial, onde exploraremos a configuração de um aplicativo React para se conectar com as APIs do Adobe Experience Manager (AEM) Headless usando o AEM Headless SDK. Abordaremos a recuperação de dados do Fragmento de conteúdo das APIs do GraphQL do AEM e sua exibição no aplicativo React.
As APIs do AEM Headless permitem acessar o conteúdo do AEM de qualquer aplicativo cliente. Vamos orientá-lo na configuração do aplicativo React para se conectar às APIs do AEM Headless usando o AEM Headless SDK. Essa configuração estabelece um canal de comunicação reutilizável entre o aplicativo React e o AEM.
Em seguida, usaremos o AEM Headless SDK para recuperar dados do fragmento de conteúdo das APIs do GraphQL da AEM. Os fragmentos de conteúdo no AEM fornecem gerenciamento de conteúdo estruturado. Ao usar o AEM Headless SDK, você pode consultar e buscar facilmente os dados do fragmento de conteúdo usando o GraphQL.
Depois que tivermos os dados do fragmento de conteúdo, nós os integraremos ao seu aplicativo React. Você aprenderá a formatar e exibir os dados de maneira atraente. Abordaremos as práticas recomendadas para manipular e renderizar dados do Fragmento de conteúdo em componentes React, garantindo uma integração perfeita com a interface do usuário do seu aplicativo.
Ao longo do tutorial, forneceremos explicações, exemplos de código e dicas práticas. Ao final, você poderá configurar seu aplicativo React para se conectar às APIs do AEM Headless, recuperar dados do fragmento de conteúdo usando o AEM Headless SDK e exibi-los facilmente no aplicativo React. Vamos começar!
Clonar o aplicativo React
-
Clonar o aplicativo do Github executando o seguinte comando na linha de comando.
code language-none $ git clone git@github.com:lamontacrook/headless-first.git -
Altere para o diretório
headless-firste instale as dependências.code language-none $ cd headless-first $ npm ci
Configurar o aplicativo React
-
Crie um arquivo chamado
.envna raiz do projeto. Em.env, defina os seguintes valores: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> -
Você pode recuperar um token de desenvolvedor no Cloud Manager. Faça logon no Adobe Cloud Manager. Clique em Experience Manager > Cloud Manager. Escolha o Programa apropriado e clique nas reticências ao lado do Ambiente.
- Clique na guia Integrações
- Clique na guia Token local e no botão Obter token de desenvolvimento local
- Copie o token de acesso começando após a cotação aberta e até antes da cotação fechada.
- Cole o token copiado como o valor de
REACT_APP_TOKENno arquivo.env. - Agora vamos criar o aplicativo executando
npm cina linha de comando. - Agora inicie o aplicativo React e execute
npm run startna linha de comando. - Em ./src/utils um arquivo chamado
context.jsinclui o código para definir os valores no arquivo.envno contexto do aplicativo.
Executar o aplicativo React
-
Inicie o aplicativo React executando
npm run startna linha de comando.code language-none $ npm run startO aplicativo React iniciará e abrirá uma janela do navegador para
http://localhost:3000. As alterações no aplicativo React serão recarregadas automaticamente no navegador.
Conectar-se a APIs do AEM Headless
-
Para conectar o aplicativo React ao AEM as a Cloud Service, vamos adicionar algumas coisas a
App.js. Na importação deReact, adicioneuseContext.code language-javascript import React, {useContext} from 'react';Importar
AppContextdo arquivocontext.js.code language-javascript import { AppContext } from './utils/context';Agora, no código do aplicativo, defina uma variável de contexto.
code language-javascript const context = useContext(AppContext);E, por fim, envolva o código de retorno em
<AppContext.Provider> ... </AppContext.Provider>.code language-javascript ... return(<div className='App'> <AppContext.Provider value={context}> ... </AppContext.Provider> </div>);Para referência, o
App.jsagora deve ser assim.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; -
Importe o SDK
AEMHeadless. Esta SDK é uma biblioteca auxiliar usada pelo aplicativo para interagir com as APIs headless do AEM.Adicionar esta instrução de importação ao
home.js.code language-javascript import AEMHeadless from '@adobe/aem-headless-client-js';Adicione o seguinte
{ useContext, useEffect, useState }à instrução de importaçãoReact.code language-javascript import React, { useContext, useEffect, useState } from 'react';Importe o
AppContext.code language-javascript import { AppContext } from '../../utils/context';Dentro do componente
Home, obtenha a variávelcontextdeAppContext.code language-javascript const Home = () => { const context = useContext(AppContext); ... } -
Inicialize o AEM Headless SDK dentro de um
useEffect(), já que o AEM Headless SDK deve ser alterado quando a variávelcontextfor alterada.code language-javascript useEffect(() => { const sdk = new AEMHeadless({ serviceURL: context.url, endpoint: context.endpoint, auth: context.token }); }, [context]);note note NOTE Há um arquivo context.jsem/utilsque está lendo elementos do arquivo.env. Para referência, ocontext.urlé a URL do ambiente do AEM as a Cloud Service. Ocontext.endpointé o caminho completo para o ponto de extremidade criado na lição anterior. Por fim,context.tokené o token do desenvolvedor. -
Crie o estado React que expõe o conteúdo proveniente do AEM Headless SDK.
code language-javascript const Home = () => { const [content, setContent] = useState({}); ... } -
Conecte o aplicativo ao AEM. Use a consulta persistente criada na lição anterior. Vamos adicionar o seguinte código dentro do
useEffectdepois que o AEM Headless SDK for inicializado. TorneuseEffectdependente da variávelcontext, como visto abaixo.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]); -
Abra a exibição de rede das ferramentas do desenvolvedor para revisar a solicitação do GraphQL.
<url to environment>/graphql/execute.json/pure-headless/teaser%3Bpath%3D%2Fcontent%2Fdam%2Fpure-headless%2Fhero
O AEM Headless SDK codifica a solicitação do GraphQL e adiciona os parâmetros fornecidos. Você pode abrir a solicitação no navegador.
note note NOTE Como a solicitação vai para o ambiente de autor, é necessário fazer logon no ambiente em outra guia do mesmo navegador.
Renderizar conteúdo do fragmento de conteúdo
-
Exiba os fragmentos de conteúdo no aplicativo. Retorne um
<div>com o título do teaser.code language-javascript return ( <div className='main-body'> <div>{content.component && (content.component.item.title)}</div> </div> );Você deve ver o campo de título do teaser exibido na tela.
-
A última etapa é adicionar o teaser à página. Um componente de teaser do React é incluído no pacote. Primeiro, vamos incluir a importação. Na parte superior do arquivo
home.js, adicione a linha:import Teaser from '../../components/teaser/teaser';Atualize a declaração de devolução:
code language-javascript return ( <div className='main-body'> <div>{content.component && <Teaser content={content.component.item} />}</div> </div> );Agora você deve ver o teaser com o conteúdo incluído no fragmento.
Próximas etapas
Parabéns! Você atualizou com sucesso o aplicativo React para integrar-se às APIs do AEM Headless usando o SDK do AEM Headless.
Em seguida, vamos criar um componente mais complexo da Lista de imagens que renderiza dinamicamente os fragmentos de conteúdo referenciados do AEM.
Próximo capítulo: Criar um componente de lista de imagens