SlideShare a Scribd company logo
ReactJS
Ilaria Franchini
‘’A JavaScript library for building user interfaces’’
Presentazione a cura di:
UN PO’ DI STORIA...
2011 -Jordan Walk e il suo team rilasciano ReactJS per la gestione del
newsfeed di Facebook
2012 - ReactJS viene utilizzato per realizzare Instagram
2013 - La libreria viene rilasciata come strumento open source
2015 - Viene rilasciato React Native, per lo sviluppo di app per dispositivi
mobili iOS e Android
Componenti riutilizzabili e componibili
Approccio dichiarativo
Sintassi JSX
Virtual DOM
Flusso dei dati unidirezionale
PRINCIPALI CARATTERISTICHE
REALIZZAZIONE DI UNA SHOPPING LIST
npm install -g create-react-app
create-react-app shopping-list
cd shopping-list
npm start
INSTALLAZIONE CON “Create React App”
<!DOCTYPE html>
<html lang="en">
<head>
<title>Shopping list</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
INSTALLAZIONE CON “Create React App”
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from
'./registerServiceWorker';
ReactDOM.render(<App />,
document.getElementById('root'));
registerServiceWorker();
index.html
index.js
INSTALLAZIONE CON “Create React App”
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div className="App">
<header>
<h1>Shopping list</h1>
</header>
</div>
);
}
}
export default App;
App.js
I COMPONENTI
COMPONENTI
CLASSE
COMPONENTI
FUNZIONALI
PROPS DOM
PROPS DOM
STATO
COMPONENTE FUNZIONALE
import React from 'react';
import './index.css';
const Header = () => {
return (
<div>
<h1>Shopping list</h1>
</div>
)
};
export default Header;
Header.js
...
import Header from '../Header/header';
class App extends Component {
render() {
return (
<div>
<Header/>
</div>
...
App.js
Risultato:
INIZIALIZZAZIONE AGGIORNAMENTO DISTRUZIONE
getDefaultProps()
getInitialState()
componentWillMount()
componentDidMount()
componentWillUnmount()
componentWillReceiveProps()
shouldComponentUpdate()
componentWillUpdate()
render()
componentDidUpdate()
COMPONENTE CLASSE: CICLO DI VITA
COMPONENTE CLASSE
import React, { Component } from 'react';
import './index.css'
class Header extends Component {
constructor() {
super();
this.state = {title: ''}
}
componentDidMount() {
const title= 'Shopping list';
setTimeout(() => {
this.setState({ title });
}, 3000)
}
Header.js
Risultato:
render() {
return (
<div>
<h1>
{this.state.title}
</h1>
</div>
)
}
};
export default Header;
GESTIONE DEGLI EVENTI
class Header extends Component {
constructor() {
super();
this.state = {value: 'Shopping list'}
}
handleChange = (e) => {
this.setState({value: e.target.value })
}
render() {
return (
<div>
<input className="title"
value={this.state.value}
onChange={this.handleChange}
/>
...
Header.js
Risultato:
Data-binding sul titolo
class App extends Component {
constructor() {
super();
this.state = {
items: [
{ element: "pane", completed: false },
{ element: "farina", completed: false },
{ element: "lievito", completed: false }
],
...
render() {
return (
...
<div>
<ul>
{this.state.items.map((item, index) => {
return (
<li key={index}>{this.state.items[index].element}</li>
)
})}
</ul><hr />
<p> Elementi nella lista:{this.state.items.length}</p>
</div>
LISTE E CHIAVI
PASSAGGIO DEI DATI: DAL PADRE AL FIGLIO
PADRE FIGLIO
PROPS ❏ Passaggio dei dati al figlio come
props dopo averli istanziati
❏ Richiamo dei dati nel figlio con
{this.props.dato}
LE PROPS
import Item from '../Item/item'
...
handleClick = (index) => {
const items = this.state.items;
items[index].completed =
!items[index].completed;
this.setState({ items })
}
render() {
return (
...
<div>{this.state.items.map((item, index) => {
return (
<Item
key={index}
index={index}
handleClick={this.handleClick}
item={item}
/>
)
Componente
padre “App.js”
LE PROPS
import React, { Component } from 'react';
class Item extends Component {
render() {
return (
<div>
<span
style={{textDecoration: this.props.item.completed?
'line-through': 'none'}}>
</span>
</div>
)
Componente
figlio “Item.js”
LE PROPS
import React, { Component } from 'react';
class Item extends Component {
render() {
return (
<div>
<span
style={{textDecoration: this.props.item.completed?
'line-through': 'none'}}>
<input type = "checkbox" onClick={()=>
this.props.handleClick(this.props.index)}/>
{ this.props.item.element }
</span>
</div>
)
Componente
figlio “Item.js”
class Item extends Component {
capitalize(item) {
let res = '';
for (let i = 0; i < item.length; i++) {
if(i === 0)
res += item[i].toUpperCase();
else
res += item[i].toLowerCase();
};
return res;
}
render() {
return (
...
<input type = "checkbox" onClick ={()=>
this.props.handleClick(this.props.index)}/>
{ this.capitalize(this.props.item.element) }
LE PROPS
Componente
figlio “Item.js”
Risultato:
PASSAGGIO DATI: DAL FIGLIO AL PADRE
❏ Definizione callback nel padre con in input i dati di cui ha bisogno
❏ Passaggio come props della callback al figlio
❏ Richiamo della callback in una funzione definita nel figlio
PADRE FIGLIO
...
import AddItem
from '../AddItem/addItem'
class App extends Component {
...
addItem = (itemFromChild) => {
const newItem = {
element: itemFromChild,
completed: false
}
const items = this.state.items;
items.push(newItem);
this.setState({
items: items
})
...
render() {
return (
...
<AddItem
addItem={this.addItem}
/>
...
PASSAGGIO DATI: DAL FIGLIO AL PADRE
Componente
padre “App.js”
PASSAGGIO DATI: DAL FIGLIO AL PADRE
class AddItem extends Component {
constructor () {
super();
this.state = {
inputValue: ''
}
}
handleChange = (e) => {
this.setState(
{inputValue: e.target.value}
);
}
render() {
return (
<div className="addItem">
<form>
<input
value={this.state.inputValue}
onChange={this.handleChange }
/>
</form>
</div>
...
PASSAGGIO DATI: DAL FIGLIO AL PADRE
class AddItem extends Component {
constructor () {
super();
this.state = {
inputValue: ''
}
}
handleChange = (e) => {
this.setState(
{inputValue: e.target.value}
);
}
handleClick = (e) => {
e.preventDefault();
this.props.addItem(
this.state.inputValue
);
this.setState(
{inputValue : ''}
)
}
render() {
return (
<div className="addItem">
<form>
<input
value={this.state.inputValue}
onChange={this.handleChange }
/>
<button
onClick={this.handleClick }
</button>
</form>
</div>
...
RENDERING CONDIZIONALE
class App extends Component {
...
this.state = {
...
showAll: true
}
}
...
changeShowAll = (showAll) => {
this.setState(
{showAll: showAll}
);
...
render() {
...
<button onClick={() =>
this.changeShowAll(true)}> Tutti
</button>
<button onClick={() =>
this.changeShowAll(false)}>
Completati
</button>
RENDERING CONDIZIONALE
class App extends Component {
...
render() {
...
{this.state.items.map((item, index) => {
if(this.state.items[index].completed ||
this.state.showAll)
return (
<Item
…
/>
Risultato:
CONCLUSIONI
● Veloce
● Stabile
● Codice UI leggibile e
mantenibile
● Debug più semplice
● Dimensioni
● Lenta curva di
apprendimento
● È solo una libreria UI
JSX
PRO CONTRO
CONCLUSIONI
❏ Non rischioso
❏ Reattivo
❏ Avanzato
Soluzione ideale per costruire applicazioni con dati che cambiano
ripetutamente nel tempo.
VS - SIMILARITÀ
❏ Virtual DOM
❏ Architettura basata su componenti
❏ Hook life-cycle
❏ Props
❏ Strumenti di costruzione
❏ Chrome Devtools
VS - DIFFERENZE
REACT VUE
JSX Templating
Gestione dello stato Object Properties
React Native Weex
Configurazione più lunga Sintassi più intuitiva
40 KB 20.9 KB
1178 contributori 190 contributori
Grazie per
l’attenzione

More Related Content

What's hot

Knockout.js
Knockout.jsKnockout.js
Knockout.js
Manuel Scapolan
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
 
AngularJS-Intro
AngularJS-IntroAngularJS-Intro
AngularJS-Intro
Vittorio Conte
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della SoluzioneLuca Milan
 
NOSQL
NOSQLNOSQL
ModulAngular
ModulAngularModulAngular
ModulAngular
extrategy
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Angular 4 -  convertire o migrare un'applicazione AngularjsAngular 4 -  convertire o migrare un'applicazione Angularjs
Angular 4 - convertire o migrare un'applicazione Angularjs
Giovanni Buffa
 
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
Develer S.R.L.
 
Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
Manuel Scapolan
 
ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%
DomusDotNet
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1massimiliano.wosz
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea Vallotti
Commit University
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2massimiliano.wosz
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Codemotion
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
Manuel Scapolan
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communicationVittorio Conte
 

What's hot (20)

Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Asp.Net MVC 5
Asp.Net MVC 5Asp.Net MVC 5
Asp.Net MVC 5
 
AngularJS-Intro
AngularJS-IntroAngularJS-Intro
AngularJS-Intro
 
Angular js: routing
Angular js: routingAngular js: routing
Angular js: routing
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Architetttura Della Soluzione
Architetttura Della SoluzioneArchitetttura Della Soluzione
Architetttura Della Soluzione
 
NOSQL
NOSQLNOSQL
NOSQL
 
ModulAngular
ModulAngularModulAngular
ModulAngular
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Angular 4 -  convertire o migrare un'applicazione AngularjsAngular 4 -  convertire o migrare un'applicazione Angularjs
Angular 4 - convertire o migrare un'applicazione Angularjs
 
Introduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro GianniniIntroduzione a React Native - Alessandro Giannini
Introduzione a React Native - Alessandro Giannini
 
Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%
 
Zend Framework Workshop Parte1
Zend Framework Workshop Parte1Zend Framework Workshop Parte1
Zend Framework Workshop Parte1
 
CommitUniversity AngularJSAdvanced Andrea Vallotti
CommitUniversity  AngularJSAdvanced Andrea VallottiCommitUniversity  AngularJSAdvanced Andrea Vallotti
CommitUniversity AngularJSAdvanced Andrea Vallotti
 
Zend Framework Workshop Parte2
Zend Framework Workshop Parte2Zend Framework Workshop Parte2
Zend Framework Workshop Parte2
 
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015
 
AntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatoreAntiPatterns: i vizi del programmatore
AntiPatterns: i vizi del programmatore
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
AngularJS: server communication
AngularJS: server communicationAngularJS: server communication
AngularJS: server communication
 

Similar to ReactJS for beginners

Umarells
UmarellsUmarells
Umarells
Guido Bellomo
 
Vue.js
Vue.jsVue.js
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
DrupalDay
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
Steve Maraspin
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Davide Cerbo
 
Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011
Fabio Collini
 
How To React - Gestione Stato Applicativo
How To React - Gestione Stato ApplicativoHow To React - Gestione Stato Applicativo
How To React - Gestione Stato Applicativo
AldoNoschese
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
Beniamino Ferrari
 
Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4
Giovanni Buffa
 
react-it.pdf
react-it.pdfreact-it.pdf
react-it.pdf
ssuser65180a
 
JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)jampslide
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
Mariano Fiorentino
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Stefano Benedetti
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance Optimization
Alessandro Martin
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
Riccardo Piccioni
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0
firenze-gtug
 
Yagwto
YagwtoYagwto
Inserire ultimi articoli su blogger
Inserire ultimi articoli su bloggerInserire ultimi articoli su blogger
Inserire ultimi articoli su blogger
Stefano Vinci
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
Matteo Magni
 

Similar to ReactJS for beginners (20)

Umarells
UmarellsUmarells
Umarells
 
Vue.js
Vue.jsVue.js
Vue.js
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
 
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Android Widget @ whymca 2011
Android Widget @ whymca 2011Android Widget @ whymca 2011
Android Widget @ whymca 2011
 
How To React - Gestione Stato Applicativo
How To React - Gestione Stato ApplicativoHow To React - Gestione Stato Applicativo
How To React - Gestione Stato Applicativo
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4
 
react-it.pdf
react-it.pdfreact-it.pdf
react-it.pdf
 
JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)JAMP DAY 2010 - ROMA (3)
JAMP DAY 2010 - ROMA (3)
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo MicrosoftAsp.Net MVC 3 - Il Model View Controller secondo Microsoft
Asp.Net MVC 3 - Il Model View Controller secondo Microsoft
 
MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance Optimization
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0
 
Yagwto
YagwtoYagwto
Yagwto
 
Inserire ultimi articoli su blogger
Inserire ultimi articoli su bloggerInserire ultimi articoli su blogger
Inserire ultimi articoli su blogger
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 

ReactJS for beginners

  • 1. ReactJS Ilaria Franchini ‘’A JavaScript library for building user interfaces’’ Presentazione a cura di:
  • 2. UN PO’ DI STORIA... 2011 -Jordan Walk e il suo team rilasciano ReactJS per la gestione del newsfeed di Facebook 2012 - ReactJS viene utilizzato per realizzare Instagram 2013 - La libreria viene rilasciata come strumento open source 2015 - Viene rilasciato React Native, per lo sviluppo di app per dispositivi mobili iOS e Android
  • 3. Componenti riutilizzabili e componibili Approccio dichiarativo Sintassi JSX Virtual DOM Flusso dei dati unidirezionale PRINCIPALI CARATTERISTICHE
  • 4. REALIZZAZIONE DI UNA SHOPPING LIST
  • 5. npm install -g create-react-app create-react-app shopping-list cd shopping-list npm start INSTALLAZIONE CON “Create React App”
  • 6. <!DOCTYPE html> <html lang="en"> <head> <title>Shopping list</title> </head> <body> <div id="root"></div> </body> </html> INSTALLAZIONE CON “Create React App” import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import registerServiceWorker from './registerServiceWorker'; ReactDOM.render(<App />, document.getElementById('root')); registerServiceWorker(); index.html index.js
  • 7. INSTALLAZIONE CON “Create React App” import React, { Component } from 'react'; class App extends Component { render() { return ( <div className="App"> <header> <h1>Shopping list</h1> </header> </div> ); } } export default App; App.js
  • 9. COMPONENTE FUNZIONALE import React from 'react'; import './index.css'; const Header = () => { return ( <div> <h1>Shopping list</h1> </div> ) }; export default Header; Header.js ... import Header from '../Header/header'; class App extends Component { render() { return ( <div> <Header/> </div> ... App.js Risultato:
  • 11. COMPONENTE CLASSE import React, { Component } from 'react'; import './index.css' class Header extends Component { constructor() { super(); this.state = {title: ''} } componentDidMount() { const title= 'Shopping list'; setTimeout(() => { this.setState({ title }); }, 3000) } Header.js Risultato: render() { return ( <div> <h1> {this.state.title} </h1> </div> ) } }; export default Header;
  • 12. GESTIONE DEGLI EVENTI class Header extends Component { constructor() { super(); this.state = {value: 'Shopping list'} } handleChange = (e) => { this.setState({value: e.target.value }) } render() { return ( <div> <input className="title" value={this.state.value} onChange={this.handleChange} /> ... Header.js Risultato: Data-binding sul titolo
  • 13. class App extends Component { constructor() { super(); this.state = { items: [ { element: "pane", completed: false }, { element: "farina", completed: false }, { element: "lievito", completed: false } ], ... render() { return ( ... <div> <ul> {this.state.items.map((item, index) => { return ( <li key={index}>{this.state.items[index].element}</li> ) })} </ul><hr /> <p> Elementi nella lista:{this.state.items.length}</p> </div> LISTE E CHIAVI
  • 14. PASSAGGIO DEI DATI: DAL PADRE AL FIGLIO PADRE FIGLIO PROPS ❏ Passaggio dei dati al figlio come props dopo averli istanziati ❏ Richiamo dei dati nel figlio con {this.props.dato}
  • 15. LE PROPS import Item from '../Item/item' ... handleClick = (index) => { const items = this.state.items; items[index].completed = !items[index].completed; this.setState({ items }) } render() { return ( ... <div>{this.state.items.map((item, index) => { return ( <Item key={index} index={index} handleClick={this.handleClick} item={item} /> ) Componente padre “App.js”
  • 16. LE PROPS import React, { Component } from 'react'; class Item extends Component { render() { return ( <div> <span style={{textDecoration: this.props.item.completed? 'line-through': 'none'}}> </span> </div> ) Componente figlio “Item.js”
  • 17. LE PROPS import React, { Component } from 'react'; class Item extends Component { render() { return ( <div> <span style={{textDecoration: this.props.item.completed? 'line-through': 'none'}}> <input type = "checkbox" onClick={()=> this.props.handleClick(this.props.index)}/> { this.props.item.element } </span> </div> ) Componente figlio “Item.js”
  • 18. class Item extends Component { capitalize(item) { let res = ''; for (let i = 0; i < item.length; i++) { if(i === 0) res += item[i].toUpperCase(); else res += item[i].toLowerCase(); }; return res; } render() { return ( ... <input type = "checkbox" onClick ={()=> this.props.handleClick(this.props.index)}/> { this.capitalize(this.props.item.element) } LE PROPS Componente figlio “Item.js” Risultato:
  • 19. PASSAGGIO DATI: DAL FIGLIO AL PADRE ❏ Definizione callback nel padre con in input i dati di cui ha bisogno ❏ Passaggio come props della callback al figlio ❏ Richiamo della callback in una funzione definita nel figlio PADRE FIGLIO
  • 20. ... import AddItem from '../AddItem/addItem' class App extends Component { ... addItem = (itemFromChild) => { const newItem = { element: itemFromChild, completed: false } const items = this.state.items; items.push(newItem); this.setState({ items: items }) ... render() { return ( ... <AddItem addItem={this.addItem} /> ... PASSAGGIO DATI: DAL FIGLIO AL PADRE Componente padre “App.js”
  • 21. PASSAGGIO DATI: DAL FIGLIO AL PADRE class AddItem extends Component { constructor () { super(); this.state = { inputValue: '' } } handleChange = (e) => { this.setState( {inputValue: e.target.value} ); } render() { return ( <div className="addItem"> <form> <input value={this.state.inputValue} onChange={this.handleChange } /> </form> </div> ...
  • 22. PASSAGGIO DATI: DAL FIGLIO AL PADRE class AddItem extends Component { constructor () { super(); this.state = { inputValue: '' } } handleChange = (e) => { this.setState( {inputValue: e.target.value} ); } handleClick = (e) => { e.preventDefault(); this.props.addItem( this.state.inputValue ); this.setState( {inputValue : ''} ) } render() { return ( <div className="addItem"> <form> <input value={this.state.inputValue} onChange={this.handleChange } /> <button onClick={this.handleClick } </button> </form> </div> ...
  • 23. RENDERING CONDIZIONALE class App extends Component { ... this.state = { ... showAll: true } } ... changeShowAll = (showAll) => { this.setState( {showAll: showAll} ); ... render() { ... <button onClick={() => this.changeShowAll(true)}> Tutti </button> <button onClick={() => this.changeShowAll(false)}> Completati </button>
  • 24. RENDERING CONDIZIONALE class App extends Component { ... render() { ... {this.state.items.map((item, index) => { if(this.state.items[index].completed || this.state.showAll) return ( <Item … /> Risultato:
  • 25. CONCLUSIONI ● Veloce ● Stabile ● Codice UI leggibile e mantenibile ● Debug più semplice ● Dimensioni ● Lenta curva di apprendimento ● È solo una libreria UI JSX PRO CONTRO
  • 26. CONCLUSIONI ❏ Non rischioso ❏ Reattivo ❏ Avanzato Soluzione ideale per costruire applicazioni con dati che cambiano ripetutamente nel tempo.
  • 27. VS - SIMILARITÀ ❏ Virtual DOM ❏ Architettura basata su componenti ❏ Hook life-cycle ❏ Props ❏ Strumenti di costruzione ❏ Chrome Devtools
  • 28. VS - DIFFERENZE REACT VUE JSX Templating Gestione dello stato Object Properties React Native Weex Configurazione più lunga Sintassi più intuitiva 40 KB 20.9 KB 1178 contributori 190 contributori