DocumentazioneAEM as a Cloud ServiceGuida utente

Guida introduttiva alle applicazioni a pagina singola in AEM con React

Ultimo aggiornamento: 12 giugno 2025
  • Si applica a:
  • Experience Manager as a Cloud Service
  • Argomenti:
  • Sviluppo

Creato per:

  • Amministratore
  • Sviluppatore

Le applicazioni a pagina singola (SPA) possono offrire esperienze coinvolgenti agli utenti di siti web. Gli sviluppatori desiderano essere in grado di creare siti utilizzando framework SPA e gli autori desiderano modificare facilmente i contenuti all’interno di AEM per un sito creato utilizzando framework SPA.

La funzione di authoring di applicazioni a pagina singola offre una soluzione completa per il supporto di applicazioni a pagina singola in AEM. Questo articolo presenta un’applicazione SPA semplificata sul framework React, spiega come viene creata e come iniziare subito a utilizzare un’applicazione SPA personale.

NOTA
Questo articolo si basa sul framework React. Per il documento corrispondente per il framework Angular, vedi Guida introduttiva alle applicazioni a pagina singola in AEM - Angular.
IMPORTANTE
L'editor per applicazioni a pagina singola (o editor SPA) è stato dichiarato obsoleto per i nuovi progetti. Continua a essere supportato da Adobe per i progetti esistenti, ma non dovrebbe essere utilizzato per i nuovi progetti. Gli editor preferiti per la gestione dei contenuti headless in AEM sono ora i seguenti:
  • Editor universale per la modifica visiva di contenuti headless.
  • Editor frammenti di contenuto per la modifica di contenuti headless basata su modulo.

Introduzione

Questo articolo riassume il funzionamento di base di una semplice applicazione a pagina singola e il minimo che è necessario sapere per eseguire l’operazione.

Per ulteriori dettagli sul funzionamento delle applicazioni a pagina singola in AEM, consulta i seguenti documenti:

  • Introduzione alla SPA e procedura dettagliata
  • Panoramica dell’editor di SPA
  • Blueprint SPA
NOTE
Per poter creare contenuti all’interno di un’applicazione a pagina singola, i contenuti devono essere memorizzati in AEM ed essere esposti dal modello di contenuto.
Un’applicazione a pagina singola sviluppata al di fuori di AEM non sarà autorizzabile se non rispetta il contratto del modello di contenuto.

Questo documento illustra la struttura di un’applicazione a pagina singola semplificata creata con il framework React e il suo funzionamento, consentendoti di applicare questa conoscenza all’applicazione a pagina singola.

Dipendenze, configurazione e generazione

Oltre alla prevista dipendenza da React, l’applicazione a pagina singola di esempio può utilizzare librerie aggiuntive per rendere più efficiente la creazione dell’applicazione a pagina singola.

Dipendenze

Il file package.json definisce i requisiti del pacchetto SPA complessivo. Le dipendenze minime di AEM per un’applicazione a pagina singola funzionante sono elencate qui.

  "dependencies": {
    "@adobe/aem-react-editable-components": "~1.0.4",
    "@adobe/aem-spa-component-mapping": "~1.0.5",
    "@adobe/aem-spa-page-model-manager": "~1.0.3"
  }

Poiché questo esempio si basa sul framework React, nel file package.json sono obbligatorie due dipendenze specifiche di React:

 react
 react-dom

aem-clientlib-generator viene utilizzato per rendere automatica la creazione di librerie client come parte del processo di compilazione.

"aem-clientlib-generator": "^1.4.1",

Per ulteriori dettagli vedi aem-clientlib-generator su GitHub.

aem-clientlib-generator è configurato nel file clientlib.config.js come segue.

module.exports = {
    // default working directory (can be changed per 'cwd' in every asset option)
    context: __dirname,

    // path to the clientlib root folder (output)
    clientLibRoot: "./../content/jcr_root/apps/my-react-app/clientlibs",

    libs: {
        name: "my-react-app",
        allowProxy: true,
        categories: ["my-react-app"],
        embed: ["my-react-app.responsivegrid"],
        jsProcessor: ["min:gcc"],
        serializationFormat: "xml",
        assets: {
            js: [
                "dist/**/*.js"
            ],
            css: [
                "dist/**/*.css"
            ]
        }
    }
};

Generazione in corso

In realtà, la creazione dell'app utilizza Webpack per la transpilazione oltre a aem-clientlib-generator per la creazione automatica della libreria client. Pertanto, il comando build sarà simile al seguente:

"build": "webpack && clientlib --verbose"

Una volta generato, il pacchetto può essere caricato in un’istanza di AEM.

Archetipo di progetto AEM

Qualsiasi progetto AEM deve utilizzare l’archetipo di progetto AEM, che supporta progetti SPA utilizzando React o Angular e sfrutta l’SDK di SPA.

Struttura dell'applicazione

Se includi le dipendenze e crei l’app come descritto in precedenza, riceverai un pacchetto di applicazioni a pagina singola funzionante che puoi caricare nell’istanza di AEM.

La sezione successiva di questo documento illustra come è strutturata un’applicazione a pagina singola in AEM, i file importanti che guidano l’applicazione e come funzionano insieme.

Un componente immagine semplificato viene utilizzato come esempio, ma tutti i componenti dell’applicazione sono basati sullo stesso concetto.

index.js

Il punto di ingresso nell'applicazione a pagina singola è il file index.js qui mostrato semplificato per concentrarsi sul contenuto importante.

import ReactDOM from 'react-dom';
import App from './App';
import { ModelManager, Constants } from "@adobe/aem-spa-page-model-manager";

...

ModelManager.initialize().then((pageModel) => {
ReactDOM.render(
    <App cqChildren={pageModel[Constants.CHILDREN_PROP]} cqItems={pageModel[Constants.ITEMS_PROP]} cqItemsOrder={pageModel[Constants.ITEMS_ORDER_PROP]} cqPath={ModelManager.rootPath} locationPathname={ window.location.pathname }/>
, document.getElementById('page'));

});

La funzione principale di index.js consiste nell'utilizzare la funzione ReactDOM.render per determinare dove inserire l'applicazione nel DOM.

Si tratta di un utilizzo standard di questa funzione, non specifico di questa app di esempio.

Creazione di istanze statiche

Quando il componente viene creato in modo statico utilizzando il modello di componente (ad esempio, JSX), il valore deve essere trasmesso dal modello alle proprietà del componente.

App.js

Tramite il rendering dell'app, index.js chiama App.js, che viene mostrato qui in una versione semplificata per concentrarsi sul contenuto importante.

import {Page, withModel } from '@adobe/aem-react-editable-components';

...

class App extends Page {
...
}

export default withModel(App);

App.js serve principalmente per eseguire il wrapping dei componenti radice che compongono l'app. Il punto di ingresso di qualsiasi app è la pagina.

Page.js

Tramite il rendering della pagina, App.js chiama Page.js elencato qui in una versione semplificata.

import {Page, MapTo, withComponentMappingContext } from "@adobe/aem-react-editable-components";

...

class AppPage extends Page {
...
}

MapTo('my-react-app/components/structure/page')(withComponentMappingContext(AppPage));

In questo esempio la classe AppPage estende Page, che contiene i metodi di contenuto interno che possono quindi essere utilizzati.

Page acquisisce la rappresentazione JSON del modello di pagina ed elabora il contenuto per racchiudere/decorare ogni elemento della pagina. Ulteriori dettagli su Page sono disponibili nel documento Blueprint SPA.

Image.js

Con il rendering della pagina, è possibile eseguire il rendering dei componenti come Image.js, come mostrato di seguito.

import React, {Component} from 'react';
import {MapTo} from '@adobe/aem-react-editable-components';

require('./Image.css');

const ImageEditConfig = {

    emptyLabel: 'Image',

    isEmpty: function() {
        return !this.props || !this.props.src || this.props.src.trim().length < 1;
    }
};

class Image extends Component {

    render() {
        return (<img src={this.props.src}>);
    }
}

MapTo('my-react-app/components/content/image')(Image, ImageEditConfig);

L’idea centrale delle applicazioni a pagina singola in AEM è quella di mappare i componenti delle applicazioni a pagina singola ai componenti di AEM e di aggiornare il componente quando il contenuto viene modificato (e viceversa). Per un riepilogo di questo modello di comunicazione, vedere il documento Panoramica dell'editor SPA.

MapTo('my-react-app/components/content/image')(Image, ImageEditConfig);

Il metodo MapTo associa il componente SPA al componente AEM. Supporta l’utilizzo di una singola stringa o di un array di stringhe.

ImageEditConfig è un oggetto di configurazione che contribuisce ad abilitare le funzionalità di creazione di un componente fornendo i metadati necessari all'editor per generare segnaposto

Se non è presente alcun contenuto, le etichette vengono fornite come segnaposto per rappresentare il contenuto vuoto.

Proprietà passate dinamicamente

I dati provenienti dal modello vengono passati dinamicamente come proprietà del componente.

Esportazione di contenuti modificabili

Puoi esportare un componente e mantenerlo modificabile.

import React, { Component } from 'react';
import { MapTo } from '@adobe/aem-react-editable-components';

...

const EditConfig = {...}

class PageClass extends Component {...};

...

export default MapTo('my-react-app/react/components/structure/page')(PageClass, EditConfig);

La funzione MapTo restituisce un Component che è il risultato di una composizione che estende il PageClass fornito con i nomi e gli attributi della classe che abilitano l'authoring. Questo componente può essere esportato in un secondo momento e istanziato nel markup dell’applicazione.

Quando viene esportato utilizzando le funzioni MapTo o withModel, il componente Page è racchiuso in un componente ModelProvider che fornisce l'accesso ai componenti standard alla versione più recente del modello di pagina o a una posizione precisa nel modello di pagina.

Per ulteriori informazioni, vedi il documento Blueprint SPA.

NOTE
Per impostazione predefinita, quando si utilizza la funzione withModel si riceve l'intero modello del componente.

Condivisione di informazioni tra i componenti SPA

La condivisione delle informazioni è regolarmente necessaria per i componenti di un’applicazione a pagina singola. Esistono diversi modi consigliati per farlo, elencati di seguito in ordine crescente di complessità.

  • Opzione 1: Centralizza la logica e la trasmissione ai componenti necessari, ad esempio, utilizzando React Context.
  • Opzione 2: Condividere gli stati dei componenti utilizzando una libreria di stati come Redux.
  • Opzione 3: Sfrutta la gerarchia degli oggetti personalizzando ed estendendo il componente contenitore.

Passaggi successivi

  • La Guida introduttiva alle applicazioni a pagina singola in AEM con Angular mostra come un'applicazione a pagina singola di base viene creata per funzionare con l'editor di applicazioni a pagina singola in AEM con Angular.
  • La Panoramica dell’editor di SPA approfondisce il modello di comunicazione tra AEM e SPA.
  • Il progetto SPA WKND è un tutorial dettagliato sull'implementazione di un semplice progetto SPA in AEM.
  • Mappatura da modello dinamico a componente per applicazioni a pagina singola spiega il modello dinamico alla mappatura dei componenti e come funziona all'interno delle applicazioni a pagina singola in AEM.
  • Blueprint per applicazioni a pagina singola offre informazioni approfondite sul funzionamento di SPA SDK per AEM nel caso in cui si desideri implementare SPA in AEM per un framework diverso da React o Angular o semplicemente desideri una comprensione più approfondita.
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab