Podcast
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?
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?
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
?
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?
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?
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?
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?
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é?
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é?
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?
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?
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?
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?
Nel contesto dei componenti React e delle proprietà (props), quale delle seguenti affermazioni descrive correttamente la natura e il flusso dei dati in React?
Nel contesto dei componenti React e delle proprietà (props), quale delle seguenti affermazioni descrive correttamente la natura e il flusso dei dati in React?
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?
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?
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?
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?
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?
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?
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?
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?
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
?
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
?
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?
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?
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?
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?
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?
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?
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?
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?
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
?
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
?
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?
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?
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?
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?
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?
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?
Quali sono le differenze tra l'utilizzo di variabili ref e variabili di stato in React?
Quali sono le differenze tra l'utilizzo di variabili ref e variabili di stato in React?
In che modo gli useEffect
Hook possono essere utilizzati per ottimizzare le prestazioni di un componente React e per gestire correttamente gli effetti collaterali?
In che modo gli useEffect
Hook possono essere utilizzati per ottimizzare le prestazioni di un componente React e per gestire correttamente gli effetti collaterali?
Flashcards
Cos'è React?
Cos'è React?
Libreria JavaScript per lo sviluppo dichiarativo di interfacce utente complesse basate su componenti.
Cosa permette React?
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?
Cos'è il Virtual DOM?
Rappresentazione interna della UI, sincronizzata con il DOM reale per aggiornamenti efficienti.
Cos'è la riconciliazione?
Cos'è la riconciliazione?
Signup and view all the flashcards
Cos'è JSX?
Cos'è JSX?
Signup and view all the flashcards
A cosa serve useState?
A cosa serve useState?
Signup and view all the flashcards
Cosa permettono gli Effect?
Cosa permettono gli Effect?
Signup and view all the flashcards
A cosa serve il metodo map?
A cosa serve il metodo map?
Signup and view all the flashcards
Cos'è il rendering condizionale?
Cos'è il rendering condizionale?
Signup and view all the flashcards
Cos'è il transpiling?
Cos'è il transpiling?
Signup and view all the flashcards
Come far fluire lo stato?
Come far fluire lo stato?
Signup and view all the flashcards
Come realizzare un form?
Come realizzare un form?
Signup and view all the flashcards
Componenti React 'pure'?
Componenti React 'pure'?
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>
- Esempio senza JSX:
- Le espressioni JavaScript possono essere incorporate in JSX tramite
{}
.- Esempio:
const name = 'Mario Rossi'; const element = <h1>Hello, {name}</h1>;
- Esempio:
- 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”));
- Esempio Corretto:
- 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
- Esempi di comandi:
- 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
- Esempio di comando:
- 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.
- Non dovrebbe essere modificato con
- 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 });
- Esempio:
- In caso di modifica, è possibile lasciare invariate tutte le proprietà dell'oggetto attraverso lo spread operator.
- Esempio:
setPosition({ ...position, x: 10 });
- Esempio:
- Allo stesso modo, gli array possono essere ritornati mediante lo spread operator, oppure ottenuti mediante
filter
,map
oslice
.
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.