You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When Webpack comes across this syntax, it automatically starts code-splitting
104
104
your app. If you're using Create React App, this is already configured for you
105
-
and you can [start using it](https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#code-splitting) immediately. It's also supported
105
+
and you can [start using it](https://facebook.github.io/create-react-app/docs/code-splitting) immediately. It's also supported
106
106
out of the box in [Next.js](https://github.com/zeit/next.js/#dynamic-import).
107
107
108
108
If you're setting up Webpack yourself, you'll probably want to read Webpack's
Copy file name to clipboardExpand all lines: content/tutorial/tutorial.md
+18-38
Original file line number
Diff line number
Diff line change
@@ -31,8 +31,6 @@ Il tutorial è diviso nelle seguenti sezioni:
31
31
32
32
Non devi completare tutte le sezioni in una volta per guadagnare qualcosa da questo tutorial. Prova a seguirlo fin quando puoi -- anche se è solo per una o due sezioni.
33
33
34
-
Va bene lo stesso se preferisci copiare ed incollare il codice lungo il tutorial, tuttavia, ti raccomandiamo di scriverlo a mano. Ti aiuterà a sviluppare memoria muscolare ed a capire meglio i concetti espressi.
35
-
36
34
### Cosa Stiamo Costruendo? {#what-are-we-building}
37
35
38
36
In questo tutorial, ti mostreremo come costruire in React una versione interattiva del gioco tic-tac-toe (conosciuto anche come "tris").
@@ -190,6 +188,8 @@ Il componente Square (quadrato) visualizza un singolo `<button>` mentre Board (t
190
188
191
189
Giusto per rompere il ghiaccio, proviamo a passare qualche dato dal componente Board al nostro componente Square.
192
190
191
+
Va bene lo stesso se preferisci copiare ed incollare il codice lungo il tutorial, tuttavia, ti raccomandiamo di scriverlo a mano. Ti aiuterà a sviluppare memoria muscolare ed a capire meglio i concetti espressi.
192
+
193
193
Nel metodo `renderSquare` in Board, modifica il codice per passare una prop chiamata `value` allo Square:
194
194
195
195
```js{3}
@@ -294,7 +294,7 @@ class Square extends React.Component {
294
294
Procediamo alla modifica del metodo `render` di Square per visualizzare il valore corrente dello stato quando lo clicchiamo:
295
295
296
296
* Sostituisci `this.props.value` con `this.state.value` all'interno del tag `<button>`.
* Sostituisci l'event handler `onClick={...}` con `onClick={() => this.setState({value: 'X'})}`.
298
298
* Aggiungi le props `className` e `onClick` come linee separate per miglior leggibilità.
299
299
300
300
Al seguito delle nostre modifiche, il tag `<button>` ritornato dal metodo `render` di Square sarà:
@@ -356,7 +356,9 @@ Possiamo pensare che Board debba solo richiedere ad ogni Square il relativo stat
356
356
357
357
**Per recuperare dati dai componenti figli a partire dal componente padre, o per far comunicare tra di loro due componenti figli, bisogna definire uno stato condiviso nel componente padre. Quest'ultimo può passare di nuovo lo stato in basso, ai figli, usando props; ciò mantiene i componenti figli in sincronia tra di loro ed ovviamente con il componente padre.**
358
358
359
-
Elevare lo stato nel componente padre è un processo comune quando i componenti React vengono rifattorizzati -- proviamo già che ci siamo. Cominciamo aggiungendo un costruttore a Board ed impostandone lo stato iniziale così da contenere un array di 9 nulls. Questi 9 nulls corrispondono ai 9 quadrati:
359
+
Elevare lo stato nel componente padre è un processo comune quando i componenti React vengono rifattorizzati -- proviamo già che ci siamo.
360
+
361
+
Cominciamo aggiungendo un costruttore a Board ed impostandone lo stato iniziale così da contenere un array di 9 nulls. Questi 9 nulls corrispondono ai 9 quadrati:
360
362
361
363
```javascript{2-7}
362
364
class Board extends React.Component {
@@ -370,35 +372,9 @@ class Board extends React.Component {
370
372
renderSquare(i) {
371
373
return <Square value={i} />;
372
374
}
373
-
374
-
render() {
375
-
const status = 'Next player: X';
376
-
377
-
return (
378
-
<div>
379
-
<div className="status">{status}</div>
380
-
<div className="board-row">
381
-
{this.renderSquare(0)}
382
-
{this.renderSquare(1)}
383
-
{this.renderSquare(2)}
384
-
</div>
385
-
<div className="board-row">
386
-
{this.renderSquare(3)}
387
-
{this.renderSquare(4)}
388
-
{this.renderSquare(5)}
389
-
</div>
390
-
<div className="board-row">
391
-
{this.renderSquare(6)}
392
-
{this.renderSquare(7)}
393
-
{this.renderSquare(8)}
394
-
</div>
395
-
</div>
396
-
);
397
-
}
398
-
}
399
375
```
400
376
401
-
Quando riempiremo la tavola più tardi, risulterà più o meno così:
377
+
Quando riempiremo la tavola più tardi, l'array `this.state.squares`risulterà più o meno così:
402
378
403
379
```javascript
404
380
[
@@ -432,7 +408,7 @@ Ogni Square adesso riceverà una prop `value` che sarà valorizzata con `'X'`, `
432
408
433
409
Successivamente, dobbiamo cambiare cosa succede quando uno Square viene cliccato. Il componente Board adesso sa quali quadrati sono riempiti. Dobbiamo fare in modo che gli Square possano modificare lo stato all'interno di Board. Dato che lo stato è considerato privato ed accessibile per definizione solo al componente nel quale è definito, non possiamo modificarlo direttamente da Square.
434
410
435
-
Al fine di mantenere la privacy dello stato di Board, dobbiamo passare da Board a Square una funzione. Questa funzione verrà richiamata ogni qual volta uno Square viene cliccato. Ecco come dobbiamo modificare il metodo `renderSquare` di Board:
411
+
Possiamo però passare una funzione da Board a Square. Questa funzione verrà richiamata ogni qual volta uno Square viene cliccato. Ecco come dobbiamo modificare il metodo `renderSquare` di Board:
436
412
437
413
```javascript{5}
438
414
renderSquare(i) {
@@ -478,11 +454,11 @@ Quando uno Square viene cliccato, viene richiamata la funzione `onClick` provvis
478
454
2. Quando il bottone viene cliccato, React richiama l'event handler `onClick` che è definito nel metodo `render()` di Square.
479
455
3. Questo event handler chiama a sua volta `this.props.onClick()`. La prop `onClick` di Square è stata però specificata da Board.
480
456
4. Dato che Board ha passato `onClick={() => this.handleClick(i)}` a Square, di conseguenza Square richiama `this.handleClick(i)` quando viene cliccato.
481
-
5. Non abbiamo ancora definito alcun metodo `handleClick()`, per questo il nostro codice non funziona al momento.
457
+
5. Non abbiamo ancora definito alcun metodo `handleClick()`, per questo il nostro codice non funziona al momento. Infatti, se clicchi su uno Square adesso, dovresti ricevere un messaggio di errore che dice qualcosa del tipo: "this.handleClick is not a function".
482
458
483
459
>Nota Bene
484
460
>
485
-
>L'attributo `onClick` dell'elemento DOM `<button>` ha un significato speciale in quanto è un componente di fabbrica. Per componenti customizzati come Square, la nomenclatura sta a te. Potremmo dare un nome diverso alla prop `onClick` di Square o al metodo `handleClick` di Board. In React, comunque, esiste la convenzione di utilizzare i nomi `on[Evento]` per le props che rappresentano eventi ed `handle[Evento]` per i metodi che gestiscono gli eventi.
461
+
>L'attributo `onClick` dell'elemento DOM `<button>` ha un significato speciale in quanto è un componente di fabbrica. Per componenti customizzati come Square, la nomenclatura sta a te. Potremmo dare un nome diverso alla prop `onClick` di Square o al metodo `handleClick` di Board ed il codice continuerebbe a funzionare. In React, comunque, esiste la convenzione di utilizzare i nomi `on[Evento]` per le props che rappresentano eventi ed `handle[Evento]` per i metodi che gestiscono gli eventi.
486
462
487
463
Quando proviamo a cliccare su uno Square, dovremmo ricevere un errore visto che non abbiamo ancora definito `handleClick`. Andiamo ora ad aggiungere `handleClick` alla classe Board:
488
464
@@ -539,7 +515,7 @@ class Board extends React.Component {
539
515
540
516
**[Visualizza tutto il codice scritto finora](https://codepen.io/gaearon/pen/ybbQJX?editors=0010)**
541
517
542
-
A seguito di queste modifiche, siamo ancora in grado di cliccare sui componenti Square, facendo sì che si valorizzino. Tuttavia, adesso lo stato viene mantenuto nel componente Board invece che individualmente nei vari componenti Square. Quando lo stato di Board cambia, i componenti Square vengono renderizzati di nuovo automaticamente. Mantenere lo stato di tutti i quadrati nel componente Board ci permetterà di determinare il vincitore in futuro.
518
+
A seguito di queste modifiche, siamo ancora in grado di cliccare sui componenti Square, facendo sì che si valorizzino come in precedenza. Tuttavia, adesso lo stato viene mantenuto nel componente Board invece che individualmente nei vari componenti Square. Quando lo stato di Board cambia, i componenti Square vengono renderizzati di nuovo automaticamente. Mantenere lo stato di tutti i quadrati nel componente Board ci permetterà di determinare il vincitore in futuro.
543
519
544
520
Dato che i componenti Square non mantengono più il proprio stato, essi ricevono valori dal componente Board ed a loro volta lo informano di quando vengono cliccati. In termini di React, i componenti Square sono ora **componenti controllati**. Board ha infatti il controllo completo su di essi.
545
521
@@ -613,7 +589,7 @@ Abbiamo cambiato `this.props` in `props` in entrambi i casi.
613
589
614
590
>Nota Bene
615
591
>
616
-
>Quando abbiamo convertito Square in un componente funzione, abbiamo anche cambiato `onClick={() => this.props.onClick()}` nella versione più corta `onClick={props.onClick}` (nota l'assenza delle parentesi da *entrambi* i lati). Nella classe, avevamo usato una arrow function per avere accesso al corretto valore di `this`, nel componente funzione, al contrario, non dobbiamo preoccuparci di `this`.
592
+
>Quando abbiamo convertito Square in un componente funzione, abbiamo anche cambiato `onClick={() => this.props.onClick()}` nella versione più corta `onClick={props.onClick}` (nota l'assenza delle parentesi da *entrambi* i lati).
617
593
618
594
### Turni {#taking-turns}
619
595
@@ -645,7 +621,9 @@ Ogni volta che un giocatore muove, `xIsNext` (booleano) viene invertito per dete
645
621
}
646
622
```
647
623
648
-
Con questo cambiamento, "X" e "O" adesso vengono usati alternativamente di turno in turno. Dobbiamo anche cambiare il testo "status" nel `render` di Board cosicchè verremo informati a video del giocatore che deve muovere nel turno successivo:
624
+
Con questo cambiamento, "X" e "O" adesso vengono usati alternativamente di turno in turno. Prova!
625
+
626
+
Dobbiamo anche cambiare il testo "status" nel `render` di Board cosicchè verremo informati a video del giocatore che deve muovere nel turno successivo:
649
627
650
628
```javascript{2}
651
629
render() {
@@ -716,7 +694,7 @@ class Board extends React.Component {
716
694
717
695
### Dichiarare un Vincitore {#declaring-a-winner}
718
696
719
-
Adesso che possiamo visualizzare quale giocatore deve muovere nel prossimo turno, possiamo anche visualizzare quando una partita è finita ed il relativo vincitore. Per determinare il vincitore, aggiungiamo una funzione aiutante (funzioni che contribuiscono alla risoluzione dell'algoritmo, normalmente chiamate "helper functions") alla fine del file:
697
+
Adesso che possiamo visualizzare quale giocatore deve muovere nel prossimo turno, possiamo anche visualizzare quando una partita è finita ed il relativo vincitore. Copia questa funzione aiutante (funzioni che contribuiscono alla risoluzione dell'algoritmo, normalmente chiamate "helper functions") ed incollala alla fine del file:
720
698
721
699
```javascript
722
700
functioncalculateWinner(squares) {
@@ -740,6 +718,8 @@ function calculateWinner(squares) {
740
718
}
741
719
```
742
720
721
+
Dato un array di 9 quadrati, questa funzione determinerà il vincitore e ritornerà `'X'`, `'O'` o `null` di conseguenza.
722
+
743
723
Richiameremo `calculateWinner(squares)` nella funzione `render` di Board per verificare se un giocatore ha vinto. In caso positivo, visualizzeremo il testo "Winner: X" oppure "Winner: O". Sostituiremo la dichiarazione di `status` nella funzione `render` di Board in questo modo:
0 commit comments