Utilizzare una libreria di react personalizzata per eseguire il rendering di un modulo headless

Puoi creare e implementare componenti personalizzati per personalizzare l’aspetto e la funzionalità (Comportamento) dei moduli adattivi headless in base ai requisiti e alle linee guida della tua organizzazione.

Questi componenti hanno due finalità principali: controllare l’aspetto o lo stile dei campi modulo e memorizzare i dati raccolti attraverso questi campi all’interno dell’istanza del modello di modulo. Se questo può sembrare confuso, non preoccuparti: esploreremo questi scopi in modo più dettagliato a breve. Per il momento, concentriamoci sui passaggi iniziali della creazione di componenti personalizzati, del rendering del modulo utilizzando questi componenti e dell’utilizzo di eventi per salvare e inviare dati a un endpoint REST.

In questo tutorial, vengono utilizzati i componenti dell’interfaccia utente di Google Material per dimostrare come eseguire il rendering di un modulo adattivo headless utilizzando i componenti React personalizzati. Tuttavia, non sei limitato a questa libreria e sei libero di utilizzare qualsiasi libreria di componenti React o di sviluppare componenti personalizzati.

Alla conclusione di questo articolo, il modulo Contattaci creato in Crea e pubblica un modulo headless utilizzando il kit di avvio si trasforma nel seguente:

I passaggi principali necessari per l’utilizzo dei componenti dell’interfaccia utente Materiale di Google per il rendering di un modulo sono i seguenti:

1. Installare l’interfaccia utente dei materiali di Google

Per impostazione predefinita, il kit di avvio utilizza i componenti Spectrum🔗 di Adobe. Impostiamolo per utilizzare l'interfaccia utente dei materiali di Google:

  1. Verificare che il kit di avvio non sia in esecuzione. Per arrestare il kit di avvio, apri il terminale, passa a react-starter-kit-aem-headless-forms e premi Ctrl-C (lo stesso avviene su Windows, Mac e Linux).

    Non tentare di chiudere il terminale. La chiusura del terminale non arresta il kit di avvio.

  2. Esegui il comando seguente:


    npm install @mui/material @emotion/react @emotion/styled --force

Installa le librerie npm dell’interfaccia utente di Google Material e aggiunge le librerie alle dipendenze dei kit di avvio. È ora possibile utilizzare i componenti dell’interfaccia utente Materiale per eseguire il rendering dei componenti del modulo.

2. Creare componenti React personalizzati

Creiamo un componente personalizzato che sostituisce il componente predefinito immissione testo con il componente Campo di testo interfaccia utente materiale Google.

È necessario un componente separato per ogni tipo di componente (fieldType o :type) utilizzato in una definizione di modulo headless. Ad esempio, nel modulo Contattaci creato nella sezione precedente, i campi Nome, E-mail e Telefono di tipo text-input (fieldType: "text-input") e il campo del messaggio è di tipo multiline-input ("fieldType": "multiline-input").

Creiamo un componente personalizzato per sovrapporre tutti i campi modulo che utilizzano la proprietà fieldType: "text-input" con il componente Material UI Text Field.

Per creare il componente personalizzato e mappare il componente personalizzato con la proprietà fieldType:

  1. Apri la directory react-starter-kit-aem-headless-forms in un editor di codice e passa a \react-starter-kit-aem-headless-forms\src\components.

  2. Crea una copia della cartella slider o richtext e rinomina la cartella copiata in materialtextfield. Slider e richtext sono due esempi di componenti personalizzati disponibili nell’app iniziale. Puoi utilizzarli per creare componenti personalizzati.

    Componente personalizzato materialtextfield in VSCode

  3. Apri il file \react-starter-kit-aem-headless-forms\src\components\materialtextfield\index.tsx e sostituisci il codice esistente con il codice seguente. Questo codice restituisce ed esegue il rendering di un componente Google Material UI Text Field.


     import React from 'react';
     import {useRuleEngine} from '@aemforms/af-react-renderer';
     import {FieldJson, State} from '@aemforms/af-core';
     import { TextField } from '@mui/material';
     import Box from '@mui/material/Box';
     import { richTextString } from '@aemforms/af-react-components';
     import Typography from '@mui/material/Typography';


     const MaterialtextField = function (props: State<FieldJson>) {

         const [state, handlers] = useRuleEngine(props);

         return(

         <Box>
             <Typography component="legend">{state.visible ? richTextString(state?.label?.value): ""} </Typography>
             <TextField variant="filled"/>
         </Box>

         )
     }

     export default MaterialtextField;

La parte state.visible controlla se il componente è impostato per essere visibile. In caso affermativo, l'etichetta del campo viene recuperata e visualizzata utilizzando richTextString(state?.label?.value).

Il componente personalizzato materialtextfield è pronto. Impostiamo questo componente personalizzato in modo da sostituire tutte le istanze di fieldType: "text-input" con il campo di testo dell'interfaccia utente di Google Material.

3. Mappatura del componente personalizzato con campi modulo headless

Il processo di utilizzo di componenti libreria di terze parti per il rendering dei campi modulo è noto come mappatura. Mappa ogni (fieldType) al componente corrispondente della libreria di terze parti.

Tutte le informazioni relative alla mappatura vengono aggiunte al file mappings.ts. L'istruzione ...mappings nel file mappings.ts fa riferimento alle mappature predefinite, che sovrappongono (fieldType o :type) con i componenti Adobe Spectrum.

Per aggiungere la mappatura per il componente materialtextfield, creato nell'ultimo passaggio:

  1. Aprire il file mappings.ts.

  2. Aggiungere la seguente istruzione di importazione per includere il componente materialtextfield nel file mappings.ts:

    code language-javascript
        import MaterialtextField from "../components/materialtextfield";
    
  3. Aggiungere l'istruzione seguente per associare text-input al componente materialtextfield.

    code language-javascript
        "text-input": MaterialtextField
    

    Il codice finale del file è simile al seguente:

    code language-javascript
          import { mappings } from "@aemforms/af-react-components";
          import MaterialtextField from "../components/materialtextfield";
    
    
          const customMappings: any = {
            ...mappings,
            "text-input": MaterialtextField
         };
         export default customMappings;
    
  4. Salva ed esegui l’app. Viene eseguito il rendering dei primi tre campi del modulo utilizzando Campo di testo interfaccia utente materiale Google:

    Allo stesso modo, puoi creare componenti personalizzati per i campi messaggio ("fieldType": "multi-line-input") e valutazione del servizio ("fieldType": "number-input"). Puoi clonare il seguente archivio Git per i componenti personalizzati del messaggio e valutare i campi del servizio:

    https://github.com/singhkh/react-starter-kit-aem-headless-forms

Passaggio successivo

Il rendering del modulo con i componenti personalizzati che utilizzano l’interfaccia utente Materiale di Google è stato eseguito correttamente. Hai provato a inviare il modulo facendo clic sul pulsante Invia (mappato con il componente corrispondente dell’interfaccia utente di Google Material)? In caso contrario, prova.

Il modulo invia i dati a un'origine dati? No? Non preoccuparti. Questo perché il modulo non è configurato per comunicare con la libreria runtime.

Come configurare il modulo per comunicare con esso? Presto sarà disponibile un articolo che spiegherà tutto nel dettaglio. Continua a seguirci!

recommendation-more-help
ce8b2828-9203-402e-a565-7b758c99b2ba