Fondamenti del Web e Frontend

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

Considerando l'evoluzione dei frontend web, quale affermazione descrive più accuratamente il passaggio dalle prime interfacce statiche alle moderne applicazioni web basate su componenti?

  • Non c'è stata una vera evoluzione, le applicazioni web sono rimaste uguali nel tempo.
  • Le prime interfacce statiche utilizzavano JavaScript per connettere direttamente i modelli del server alle viste client-side, mentre le moderne applicazioni web si basano esclusivamente su HTML e CSS.
  • Le prime interfacce statiche offrivano interazione limitata tramite form, mentre le moderne applicazioni web disaccoppiano la logica applicativa dalla presentazione tramite pattern come MVC e utilizzano framework basati su componenti riusabili. (correct)
  • Le prime interfacce statiche erano generate dinamicamente lato server tramite template HTML, mentre le moderne applicazioni web sono completamente statiche per migliorare le prestazioni.

Qual è il principale vantaggio offerto dal Virtual DOM in React rispetto alla manipolazione diretta del DOM reale con JavaScript vaniglia, in termini di prestazioni e aggiornamenti dell'interfaccia utente?

  • Il Virtual DOM permette a React di confrontare efficientemente le differenze tra stati successivi dell'interfaccia e aggiornare solo le parti del DOM che necessitano di un cambiamento, riducendo i re-rendering non necessari. (correct)
  • Non offre vantaggi.
  • Il Virtual DOM semplifica la sintassi del codice JavaScript, rendendo lo sviluppo più veloce.
  • Il Virtual DOM elimina completamente la necessità di aggiornare il DOM reale, migliorando drasticamente le prestazioni.

Analizzando il seguente frammento di codice React:

const element = React.createElement('h1', { id: 'recipe-0' }, 'Hello World!'); ReactDOM.render(element, document.getElementById('root'));

Quale delle seguenti affermazioni descrive correttamente la funzione del secondo argomento di React.createElement?

  • Definisce gli stili CSS inline per l'elemento HTML.
  • Specifica il contenuto testuale dell'elemento HTML.
  • Rappresenta le proprietà (props) dell'elemento, permettendo di passare attributi e dati che possono essere utilizzati nel contenuto dell'elemento. (correct)
  • Specifica il tipo di elemento HTML da creare.

Data la seguente porzione di codice JSX:

const name = 'Mario Rossi'; const element = <h1>Hello, {name}!</h1>; ReactDOM.render(element, document.getElementById('root'));

Cosa succede se si tenta di renderizzare il seguente codice JSX direttamente nel DOM senza racchiuderlo in un elemento contenitore?

<p>React genererà un errore, perché JSX richiede che tutti gli elementi siano racchiusi in un singolo elemento radice. (B)</p> Signup and view all the answers

Analizzando il processo di "transpiling" in React, quale delle seguenti affermazioni descrive più accuratamente il ruolo e il vantaggio di Babel nell'ecosistema di sviluppo React?

<p>Babel è un preprocessore che converte il codice JSX in chiamate a funzioni JavaScript comprensibili dal browser, permettendo l'utilizzo di sintassi moderna non ancora supportata nativamente. (C)</p> Signup and view all the answers

Supponendo di voler ottimizzare le prestazioni di un'applicazione React in produzione, quale dei seguenti approcci per il "transpiling" è generalmente considerato più efficiente e perché?

<p>Eseguire il transpiling offline (durante la build) utilizzando Node.js e Babel, in modo da evitare che gli utenti debbano scaricare e compilare il codice ad ogni visita. (B)</p> Signup and view all the answers

Data la seguente struttura di componenti React:

<App /> <MyHeader /> <MyInfo /> <MyFooter /> <MyLogo /> <MyGreeting /> <div>...</div> <footer>...</footer>

Qual è il vantaggio principale di questa composizione di componenti in React?

<p>Facilita l'organizzazione e la manutenzione del codice, separando le responsabilità e rendendo i componenti più modulari e riusabili. (B)</p> Signup and view all the answers

Considerando l'esercizio 10.2 (Creare la UI della slide precedente utilizzando una toolchain... e organizzando i componenti in moduli separati), quale delle seguenti affermazioni descrive meglio l'uso dell'attributo className in React e lo compara correttamente con l'approccio tradizionale in HTML?

<p><code>className</code> in React ha la stessa funzione dell'attributo <code>class</code> in HTML, ovvero specificare le classi CSS da applicare all'elemento. (A)</p> Signup and view all the answers

Nel contesto dei componenti React e delle proprietà (props), quale delle seguenti affermazioni descrive correttamente la natura e il flusso dei dati in React?

<p>Le proprietà (props) sono immutabili e rappresentano un modo per passare dati da un componente genitore a un componente figlio, consentendo la personalizzazione e la dinamicità. (D)</p> Signup and view all the answers

Considerando l'elenco dei componenti mostrato (Mr. Whiskerson, Fluffykins), quale è la pratica raccomandata per renderizzare dinamicamente una lista di componenti React a partire da un array di dati e qual è il ruolo cruciale dell'attributo key in questo contesto?

<p>Utilizzare il metodo <code>map()</code> dell'array per trasformare ogni elemento in un componente React, assegnando un valore univoco all'attributo <code>key</code> per facilitare l'identificazione degli elementi durante gli aggiornamenti. (A)</p> Signup and view all the answers

Nel contesto dei componenti React, quale delle seguenti affermazioni distingue correttamente tra le proprietà (props) e lo stato (state) e ne descrive l'utilizzo appropriato?

<p>Le proprietà (props) sono immutabili e passate da un componente genitore a un componente figlio, mentre lo stato (state) è mutabile e gestito internamente dal componente. (C)</p> Signup and view all the answers

Analizzando il codice fornito nella slide 20, perché l'approccio di dichiarare index e showDetails come variabili locali all'interno della funzione Gallery è inadeguato per gestire lo stato del componente in React?

<p>Perché le variabili locali vengono reimpostate ad ogni re-rendering del componente, perdendo il valore aggiornato e impedendo la persistenza dello stato. (B)</p> Signup and view all the answers

Considerando il codice fornito nella slide 21 (Componenti e stato), qual è il ruolo fondamentale della funzione useState in React e come influenza il ciclo di vita di un componente?

<p><code>useState</code> permette di dichiarare variabili di stato all'interno di un componente e fornisce una funzione per aggiornarle, causando il re-rendering del componente e dei suoi figli quando lo stato cambia. (B)</p> Signup and view all the answers

Analizzando il codice fornito nella slide 23 (Componenti e stato), cosa accadrebbe se si modificasse direttamente la variabile count (ad esempio, count = count + 1) invece di utilizzare la funzione setCount?

<p>Il valore di <code>count</code> verrebbe aggiornato, ma il componente non verrebbe re-renderizzato, causando una discrepanza tra lo stato interno e l'interfaccia utente. (D)</p> Signup and view all the answers

Considerando lo scenario descritto nella slide numero 24, in cui si vuole far sì che due componenti MyButton si aggiornino "insieme", quale delle seguenti strategie è più appropriata per gestire lo stato e come si riflette sulla struttura dei componenti?

<p>Spostare lo stato <code>count</code> al componente genitore <code>MyApp</code> e passarlo ai componenti <code>MyButton</code> come proprietà (props), insieme alla funzione per aggiornare lo stato. (B)</p> Signup and view all the answers

Esaminando il codice fornito nella slide 26 , quale delle seguenti affermazioni spiega correttamente perché incrementare la variabile number tre volte all'interno della funzione onClick non risulta in un incremento di 3 al primo click?

<p>Perché React esegue il batching degli aggiornamenti di stato, combinando più aggiornamenti in un singolo re-rendering. (A)</p> Signup and view all the answers

Nel contesto della gestione dello stato in React, come illustrato nella slide 27, perché è fondamentale trattare gli oggetti e gli array nello stato come dati immutabili e quale tecnica si dovrebbe utilizzare per aggiornare tali dati correttamente?

<p>Perché React si basa sul confronto shallow per rilevare i cambiamenti nello stato, e si dovrebbe creare nuove copie degli oggetti e degli array utilizzando lo spread operator o metodi come <code>filter</code>, <code>map</code>, o <code>slice</code>. (D)</p> Signup and view all the answers

Considerando il rendering condizionale in React, come illustrato nella slide 28, quale dei seguenti approcci è più flessibile e dinamico per visualizzare diversi componenti basati sullo stato di un componente?

<p>Utilizzare operatori ternari (<code>? :</code>) o l'operatore logico <code>&amp;&amp;</code> all'interno del JSX per rendere condizionalmente diversi componenti. (C)</p> Signup and view all the answers

Nell'ambito della gestione dei form in React, e in riferimento alla slide 30, quale principio fondamentale viene rispettato mantenendo il valore degli elementi del form all'interno dello stato del componente e gestendo le modifiche tramite l'evento onChange?

<p>Single Source of Truth (B)</p> Signup and view all the answers

Considerando le specificità dei checkbox nei form React (slide 31), perché è necessario gestire l'attributo checked in modo diverso rispetto all'attributo value degli altri elementi e come si implementa correttamente tale gestione?

<p>Perché l'attributo <code>checked</code> rappresenta lo stato corrente del checkbox e deve essere gestito tramite JavaScript nello stato del componente. Si deve utilizzare l'attributo <code>checked</code> per riflettere il valore dello stato e aggiornare lo stato nell'handler <code>onChange</code>. (C)</p> Signup and view all the answers

In relazione all'esercizio 10.5 (continuazione), quale approccio sarebbe più efficace per aggiornare lo stato del componente ToDoList quando un checkbox all'interno di un componente ToDoItem viene selezionato o deselezionato, garantendo una corretta gestione dello stato immutabile?

<p>Creare una copia dell'array nello stato del componente <code>ToDoList</code> utilizzando lo spread operator, modificare l'elemento corrispondente nella copia, e aggiornare lo stato con la nuova copia. (A)</p> Signup and view all the answers

Considerando le best practices per la gestione dei form in React, in che modo è possibile ottimizzare l'esperienza utente durante l'invio di un form, fornendo un feedback visivo immediato e prevenendo multiple invii?

<p>Disabilitare il pulsante di invio dopo il primo click e visualizzare un messaggio di conferma, gestendo lo stato del form per riflettere lo stato di invio. (A)</p> Signup and view all the answers

Quali sono le differenze tra l'utilizzo di variabili ref e variabili di stato in React?

<p>Le variabili ref non causano un re-render del componente quando vengono modificate, mentre le variabili di stato sì. (C)</p> Signup and view all the answers

In che modo gli useEffect Hook possono essere utilizzati per ottimizzare le prestazioni di un componente React e per gestire correttamente gli effetti collaterali?

<p>Gli <code>useEffect</code> Hook possono essere utilizzati per sincronizzare un componente con sistemi esterni, eseguire codice dopo il rendering e gestire gli effetti collaterali controllando le dipendenze. (C)</p> Signup and view all the answers

Flashcards

Cos'è React?

Libreria JavaScript per lo sviluppo dichiarativo di interfacce utente complesse basate su componenti.

Cosa permette React?

Conservare lo stato dell'applicazione e aggiornare in maniera efficiente solo le parti della UI che dipendono dai cambiamenti.

Cos'è il Virtual DOM?

Rappresentazione interna della UI, sincronizzata con il DOM reale per aggiornamenti efficienti.

Cos'è la riconciliazione?

Processo mediante il quale il Virtual DOM viene sincronizzato con il DOM reale.

Signup and view all the flashcards

Cos'è JSX?

Linguaggio che semplifica la creazione di elementi React, convertito in chiamate a funzioni JavaScript.

Signup and view all the flashcards

A cosa serve useState?

Permette di aggiungere una variabile di stato a un componente funzionale, triggerando il re-rendering quando lo stato cambia.

Signup and view all the flashcards

Cosa permettono gli Effect?

Eseguire codice subito dopo il rendering iniziale e dopo i successivi re-rendering basati sulle dipendenze specificate.

Signup and view all the flashcards

A cosa serve il metodo map?

Mapping di un array di informazioni in componenti React per renderizzare dinamicamente liste di elementi.

Signup and view all the flashcards

Cos'è il rendering condizionale?

Tecnica per mostrare elementi diversi nell'UI in base a una condizione, spesso legata allo stato del componente.

Signup and view all the flashcards

Cos'è il transpiling?

Effettuato con Babel, trasforma il codice JSX in elementi React per essere interpretato dal browser.

Signup and view all the flashcards

Come far fluire lo stato?

Aggiornare lo stato del componente padre per far sì che i cambiamenti si riflettano nei componenti figli.

Signup and view all the flashcards

Come realizzare un form?

Mantenere il valore degli elementi di un form nello stato del componente, aggiornandolo ad ogni modifica.

Signup and view all the flashcards

Componenti React 'pure'?

Pratica in cui tutti i componenti React si comportano come funzioni pure rispetto alle loro proprietà.

Signup and view all the flashcards

Study Notes

Fondamenti del Web

  • Il materiale copre i fondamenti del web, l'ingegneria del software e i fondamenti del web, nell'ambito di un corso di laurea in Ingegneria Informatica e dell'Automazione per l'anno accademico 2023/2024, tenuto dal Prof. Antonio Ferrara.

Evoluzione dei Frontend

  • Nei primi anni del web, i siti web venivano serviti staticamente come pagine HTML, offrendo interfacce utente sostanzialmente statiche con interazioni limitate ai form.
  • La prima generazione di applicazioni web ha introdotto contenuti generati dinamicamente lato server.
  • Questi contenuti venivano realizzati tramite template, una tecnica che permetteva di mescolare codice HTML con la logica applicativa per creare "viste".
  • Lo sviluppo di applicazioni web è poi migliorato con l'adozione del pattern MVC (Model-View-Controller).
  • MVC permetteva di separare la logica applicativa dalla presentazione del contenuto.
  • Il pattern MVC è stato implementato con Node.js realizzando il rendering delle viste.
  • Le web app sono diventate simili alle applicazioni desktop funzionanti all'interno del browser.
  • Le web app sono capaci di connettere modelli scaricati da un server con viste realizzate e gestite client-side mediante JavaScript.
  • La nuova generazione di frontend si basa su framework come React, Vue.js e Angular(v2), utilizzando componenti riusabili per assemblare le viste, anziché semplici pagine.

React: Cos'è e perché usarlo

  • React è una libreria JavaScript per lo sviluppo dichiarativo di interfacce utente, basate su componenti.
  • React si concentra sulla gestione dello stato dei componenti e sul rendering di questi all'interno del DOM (Document Object Model).
  • La logica di React permette l'isolamento dei componenti, la loro composizione e il riuso del codice per lo sviluppo della UI (User Interface).
  • React conserva lo stato dell'applicazione e aggiorna in modo efficiente solo le parti della UI che dipendono dai cambiamenti di stato.
  • Il concetto di Virtual DOM permette di rappresentare internamente la UI con elementi React.
  • Il Virtual DOM si sincronizza con il DOM reale attraverso un processo di riconciliazione.
  • L'uso del Virtual DOM consente a React di interpretare le differenze fra stati successivi dell'interfaccia in maniera efficiente, aggiornando solo le parti del DOM che necessitano di modifiche dopo ogni re-rendering.
  • Questo processo rende l'aggiornamento del DOM più veloce rispetto all'uso di JavaScript vaniglia.
  • React è open-source ed è mantenuto da Meta, migliorando ed evolvendo costantemente.

La prima app in React

  • Il Virtual DOM di React è composto da elementi React.
  • Gli elementi del DOM HTML e gli elementi React sono distinti.
  • Gli elementi React descrivono come gli elementi del DOM HTML dovrebbero apparire.
  • ReactDOM contiene gli strumenti per renderizzare gli elementi React nel browser.
  • Il secondo argomento (props) può essere utilizzato nel contenuto dell'elemento e denominato a piacimento.
  • React semplifica la creazione di elementi tramite JSX, uno pseudolinguaggio simile a HTML convertito in JavaScript.
    • Esempio senza JSX: React.createElement('h1', null, \Hello World!`);`
    • Esempio con JSX: <h1>Hello World!</h1>
  • Le espressioni JavaScript possono essere incorporate in JSX tramite {}.
    • Esempio: const name = 'Mario Rossi'; const element = <h1>Hello, {name}</h1>;
  • JSX non permette di specificare due elementi adiacenti a meno che non siano racchiusi in un unico elemento.
    • Esempio Corretto:ReactDOM.render(<div><h1>Hello World!</h1><p>Benvenuti!</p></div>, document.getElementById(“root”));
  • Il codice JSX viene compilato dal preprocessore Babel in elementi React.
  • Il secondo argomento di ReactDOM.render() specifica il nodo del DOM in cui renderizzare l'elemento React.
  • React DOM mantiene aggiornato il DOM del browser per coerenza con gli elementi React.
  • L'elemento da renderizzare rappresenta l'intero albero dell'UI.
  • React DOM confronta l'elemento renderizzato ogni secondo con il precedente ed aggiorna i soli nodi necessari.
  • Reacct è veloce da ricreare perchè gli elementi React sono oggetti semplici che non derivano da altri prototipi.

Componenti in React

  • ReactDOM.render() permette di inserire codice JSX per rappresentare il contenuto da renderizzare.
  • All'aumentare della complessità della vista, la manutenzione del codice diviene impossibile.
  • React consente di creare componenti funzionali riutilizzabili tramite funzioni che ritornano un elemento React.
  • I nomi dei componenti seguono la notazione PascalCase.
  • Componenti in React*
  • I nomi dei componenti seguono la notazione PascalCase.
  • Nell'organizzazione di un'app in React, i componenti funzionali sono inseriti in file separati.

Transpiling e Toolchain

  • React è eseguibile nel browser importando Babel, che effettua il transpiling di JSX.
  • Transpiling offline in produzione è preferibile per diverse ragioni:
    • Evitare download dello script Babel.
    • Il processo di compilazione richiede tempo.
    • Il risultato della compilazione non viene memorizzato nella cache del browser.
  • Il transpiling offline è possibile con Node.js.
  • Esempi di comandi: npm init -y, npm install babel-cli@6 babel-preset-react-app@3, npx babel --watch src --out-dir . --presets react-app/prod
  • Le toolchain aiutano a scalare su più file, usando librerie, individuando errori, visualizzando modifiche in tempo reale, ottimizzando l'output.
  • Create React App supporta lo sviluppo di Single Page Application in React ed è utile per apprendere React.
    • Esempi di comandi: npx create-react-app mia-app, cd mia-app, npm start
  • Create React App utilizza Babel per il transpiling e webpack per creare un pacchetto di asset.
  • webpack crea un pacchetto di asset utilizzabile nel browser da un codice sorgente strutturato in file, moduli e dipendenze.
  • Il deployment di un'applicazione creata con Create React App prevede una build servita staticamente da un server.
    • Esempio di comando: npm run build
  • Su Replit, Vite sostituisce Webpack utilizzando Esbuild (scritto in Go) per il pre-bundling.

Composizione di Componenti

  • Nonostante i casi visti in precedenza creino componenti semplici, i componenti possono essere composti tra loro, facendo riferimento ad altri componenti nel loro output.
  • React permette di separare le responsabilità tra diversi componenti attraverso la composizione.

Componenti e Proprietà

  • In React è possibile differenziare le istanze di un componente tramite le sue proprietà.
  • Le proprietà sono passate al componente tramite l'oggetto props come attributi HTML in JSX.
  • I componenti React devono comportarsi come funzioni pure rispetto ai propri props.

Liste e Chiavi

  • React consente l'uso di JavaScript vaniglia nella logica di rendering dei componenti.
  • Se le informazioni delle info card provengono da un server tramite API o da un file JSON, le mappe di array di informazioni possono essere create con componenti React.
  • React permette di renderizzare direttamente l'array di componenti, sempre racchiuso in un altro elemento.
  • A ogni elemento/componente di una lista va associato un attributo key univoco tra i diversi sibling.
  • L'uso di attributi key univoci aiuta React ad eseguire confronti più veloci tra alberi durante l'aggiornamento dell'UI.

Componenti e Stato

  • I dati danno vita ai componenti.
  • In React, i dati possono passare nella gerarchia dei componenti come proprietà.
  • Le proprietà sono immutabili, ed i componenti devono comportarsi come funzioni pure.
  • Lo stato di un componente ha la possibilità di cambiare.

Componenti e Stato

  • L'implementazione di una variabile locale alla funzione non può funzionare a causa di determinati motivi.
  • Per poter gestire l'interazione dello stato di un componente è necessario utilizzare una variabile di stato.
  • Per poter gestire l'interazione dello stato di un componente è necessario utilizzare una variabile di stato (e di suo setter) che:
    • Conservi i dati tra due rendering.
    • Ogni volta che viene settata a un nuovo valore, viene attivato il re-rendering del componente (e dei suoi figli)
  • useState è un React Hook che permette di aggiungere una variabile di stato ad un componente.
  • Il primo valore di ritorno è lo stato corrente, che nel primo render corrisponde al valore passato alla funzione.
  • Il secondo valore di ritorno è una funzione setter che permette di cambiare lo stato corrente.
  • Gli hook sono speciali funzioni che permettono di collegarsi a particolari feature di React durante il rendering.
  • Non usare gli hook in statement condizionali o loop, ma solo nel top-level del componente.

Componenti e Stato

  • Quando due componenti MyButton possiedono stati indipendenti

Componenti e Stato

  • Lo stato può essere spostato a un livello più alto della gerarchia e passato come proprietà.
  • Ad ogni modifica dello stato, i componenti dipendenti vengono renderizzati nuovamente.
  • La funzione di gestione eventi passata come proprietà ai componenti interni.

Componenti e Stato

  • Il valore di una variabile di stato non cambia mai durante il rendering.

Componenti e Stato

  • Stati che non contengono variabili semplici, ma array oppure oggetti:
    • Non dovrebbe essere modificato con position.x = 10, ma sempre utilizzando il setter apposito.
  • In altre parole, anche gli oggetti devono essere trattati come dati immutabili.
  • Per la modifica, è necessario creare un nuovo oggetto e passarlo alla funzione setter.
    • Esempio: setPosition({ x: 10, y: 0 });
  • In caso di modifica, è possibile lasciare invariate tutte le proprietà dell'oggetto attraverso lo spread operator.
    • Esempio: setPosition({ ...position, x: 10 });
  • Allo stesso modo, gli array possono essere ritornati mediante lo spread operator, oppure ottenuti mediante filter, map o slice.

Rendering Condizionale

  • Possibilità di effettuare rendering condizionale all'interno dell'Esercizio 10.2.
  • Tecnica ampiamente utilizzata in React, specialmente con lo stato di un componente.

Form in React

  • L'idea con cui viene realizzato un form in React è che il valore dei suoi elementi venga mantenuto all'interno dello stato del componente che lo realizza.
  • Implementa la Single Source of Truth.
  • Viene associato un handler che si aggiorna ad ogni modifica.
  • Verrà renderizzato a sua volta riflettendo lo stato attuale.

Form in React

  • Problemi di consistenza e praticità possono riscontrarsi.
  • Per la checkbox si presenta il problema dell’uso dell’attributo checked anziché dell’attributo value.
  • Differenza con gli altri elementi dovrà essere appositamente gestita nell’handleChange.
  • Per i radio button, si può continuare ad utilizzare l’handler utilizzato per gli altri elementi.
  • E' necessario ricordandoci che la proprietà checked proverrà dal valore dello stato.

Form in React

  • Per inoltrare un form, potremmo inserire un pulsante ed ascoltare l’evento submit sul form e agire.
  • Viene creata una UI interattiva in cui si identificano i diversi stati, si determina che cosa li possa cambiare e poi viene rappresentato lo stato in memoria mediante useState.
  • Infine, si connettono gli event handler allo stato.
  • La gestione degli eventi è asincrona.

Sincronizzazione con gli Effect

  • Alcuni componenti necessitano di sincronizzazione con sistemi esterni (es. server) quando appaiono sullo schermo.
  • Gli Effect permettono di eseguire codice dopo il rendering iniziale e il re-rendering, in base alle dipendenze.
  • Di default, gli Effect vengono eseguiti dopo ogni rendering.
  • La maggior parte degli Effect deve essere eseguita solo in determinati casi.
    • Animazione fade-in: eseguita solo al primo apparire del componente.
    • Connessione chat: eseguita ogni volta che si cambia "stanza".
  • Il secondo argomento dell'Effect specifica le props o le variabili di stato il cui cambiamento deve triggerare l'Effect.
    • useEffect(() => {...}, [state1, state2, props4]);

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

More Like This

Use Quizgecko on...
Browser
Browser