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
Copy file name to clipboardExpand all lines: content/tutorial/tutorial.md
+15-87Lines changed: 15 additions & 87 deletions
Original file line number
Diff line number
Diff line change
@@ -31,13 +31,7 @@ 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
-
<<<<<<< HEAD
35
-
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.
36
-
37
34
### Cosa Stiamo Costruendo? {#what-are-we-building}
38
-
=======
39
-
### What Are We Building? {#what-are-we-building}
40
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
41
35
42
36
In questo tutorial, ti mostreremo come costruire in React una versione interattiva del gioco tic-tac-toe (conosciuto anche come "tris").
43
37
@@ -192,13 +186,9 @@ Il componente Square (quadrato) visualizza un singolo `<button>` mentre Board (t
192
186
193
187
### Passare Dati Mediante Props {#passing-data-through-props}
194
188
195
-
<<<<<<< HEAD
196
189
Giusto per rompere il ghiaccio, proviamo a passare qualche dato dal componente Board al nostro componente Square.
197
-
=======
198
-
To get our feet wet, let's try passing some data from our Board component to our Square component.
199
190
200
-
We strongly recommend typing code by hand as you're working through the tutorial and not using copy/paste. This will help you develop muscle memory and a stronger understanding.
201
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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.
202
192
203
193
Nel metodo `renderSquare` in Board, modifica il codice per passare una prop chiamata `value` allo Square:
204
194
@@ -252,11 +242,7 @@ class Square extends React.Component {
252
242
}
253
243
```
254
244
255
-
<<<<<<< HEAD
256
245
Adesso, se clicchiamo su uno Square, riceviamo un alert nel browser.
257
-
=======
258
-
If you click on a Square now, you should see an alert in your browser.
259
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
260
246
261
247
>Nota Bene
262
248
>
@@ -274,11 +260,7 @@ If you click on a Square now, you should see an alert in your browser.
274
260
>}
275
261
>```
276
262
>
277
-
<<<<<<< HEAD
278
263
>Nota come con `onClick={() => alert('click')}`, stiamo passando *una funzione* come prop `onClick`. Essa viene eseguita a seguito di un click. Dimenticare `() =>` e scrivere `onClick={alert('click')}` è un errore comune, e risulterebbe nel lanciare l'alert ogni volta che il componente viene ridisegnato (chiamata a `render()`).
279
-
=======
280
-
>Notice how with `onClick={() => alert('click')}`, we're passing *a function* as the `onClick` prop. React will only call this function after a click. Forgetting `() =>` and writing `onClick={alert('click')}` is a common mistake, and would fire the alert every time the component re-renders.
281
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
282
264
283
265
Come passo successivo, vogliamo far si che il componente Square si "ricordi" di essere stato cliccato, e che visualizzi il segno "X" al suo interno. Per "ricordare" cose, i componenti usano **state** (inteso come ["stato"](https://en.wikipedia.org/wiki/State_(computer_science))).
284
266
@@ -311,15 +293,9 @@ class Square extends React.Component {
311
293
312
294
Procediamo alla modifica del metodo `render` di Square per visualizzare il valore corrente dello stato quando lo clicchiamo:
313
295
314
-
<<<<<<< HEAD
315
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'})}`.
317
298
* Aggiungi le props `className` e `onClick` come linee separate per miglior leggibilità.
318
-
=======
319
-
* Replace `this.props.value` with `this.state.value` inside the `<button>` tag.
320
-
* Replace the `onClick={...}` event handler with `onClick={() => this.setState({value: 'X'})}`.
321
-
* Put the `className` and `onClick` props on separate lines for better readability.
322
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
323
299
324
300
Al seguito delle nostre modifiche, il tag `<button>` ritornato dal metodo `render` di Square sarà:
325
301
@@ -380,13 +356,9 @@ Possiamo pensare che Board debba solo richiedere ad ogni Square il relativo stat
380
356
381
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.**
382
358
383
-
<<<<<<< HEAD
384
-
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:
385
-
=======
386
-
Lifting state into a parent component is common when React components are refactored -- let's take this opportunity to try it out.
359
+
Elevare lo stato nel componente padre è un processo comune quando i componenti React vengono rifattorizzati -- proviamo già che ci siamo.
387
360
388
-
Add a constructor to the Board and set the Board's initial state to contain an array of 9 nulls corresponding to the 9 squares:
389
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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:
390
362
391
363
```javascript{2-7}
392
364
class Board extends React.Component {
@@ -402,11 +374,7 @@ class Board extends React.Component {
402
374
}
403
375
```
404
376
405
-
<<<<<<< HEAD
406
-
Quando riempiremo la tavola più tardi, risulterà più o meno così:
407
-
=======
408
-
When we fill the board in later, the `this.state.squares` array will look something like this:
409
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
377
+
Quando riempiremo la tavola più tardi, l'array `this.state.squares` risulterà più o meno così:
410
378
411
379
```javascript
412
380
[
@@ -440,11 +408,7 @@ Ogni Square adesso riceverà una prop `value` che sarà valorizzata con `'X'`, `
440
408
441
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.
442
410
443
-
<<<<<<< HEAD
444
-
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:
445
-
=======
446
-
Instead, we'll pass down a function from the Board to the Square, and we'll have Square call that function when a square is clicked. We'll change the `renderSquare` method in Board to:
447
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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:
448
412
449
413
```javascript{5}
450
414
renderSquare(i) {
@@ -486,27 +450,15 @@ class Square extends React.Component {
486
450
487
451
Quando uno Square viene cliccato, viene richiamata la funzione `onClick` provvista da Board. Ecco in dettaglio come ciò avviene:
488
452
489
-
<<<<<<< HEAD
490
453
1. La prop `onClick` nel componente `<button>` presente nel DOM (di fabbrica) dice a React di impostare un event handler per il click.
491
454
2. Quando il bottone viene cliccato, React richiama l'event handler `onClick` che è definito nel metodo `render()` di Square.
492
455
3. Questo event handler chiama a sua volta `this.props.onClick()`. La prop `onClick` di Square è stata però specificata da Board.
493
456
4. Dato che Board ha passato `onClick={() => this.handleClick(i)}` a Square, di conseguenza Square richiama `this.handleClick(i)` quando viene cliccato.
494
-
5. Non abbiamo ancora definito alcun metodo `handleClick()`, per questo il nostro codice non funziona al momento.
495
-
=======
496
-
1. The `onClick` prop on the built-in DOM `<button>` component tells React to set up a click event listener.
497
-
2. When the button is clicked, React will call the `onClick` event handler that is defined in Square's `render()` method.
498
-
3. This event handler calls `this.props.onClick()`. The Square's `onClick` prop was specified by the Board.
499
-
4. Since the Board passed `onClick={() => this.handleClick(i)}` to Square, the Square calls `this.handleClick(i)` when clicked.
500
-
5. We have not defined the `handleClick()` method yet, so our code crashes. If you click a square now, you should see a red error screen saying something like "this.handleClick is not a function".
501
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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".
502
458
503
459
>Nota Bene
504
460
>
505
-
<<<<<<< HEAD
506
-
>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.
507
-
=======
508
-
>The DOM `<button>` element's `onClick` attribute has a special meaning to React because it is a built-in component. For custom components like Square, the naming is up to you. We could give any name to the Square's `onClick` prop or Board's `handleClick` method, and the code would work the same. In React, it's conventional to use `on[Event]` names for props which represent events and `handle[Event]` for the methods which handle the events.
509
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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.
510
462
511
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:
512
464
@@ -563,11 +515,7 @@ class Board extends React.Component {
563
515
564
516
**[Visualizza tutto il codice scritto finora](https://codepen.io/gaearon/pen/ybbQJX?editors=0010)**
565
517
566
-
<<<<<<< HEAD
567
-
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.
568
-
=======
569
-
After these changes, we're again able to click on the Squares to fill them, the same as we had before. However, now the state is stored in the Board component instead of the individual Square components. When the Board's state changes, the Square components re-render automatically. Keeping the state of all squares in the Board component will allow it to determine the winner in the future.
570
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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.
571
519
572
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.
573
521
@@ -611,11 +559,7 @@ Rilevare cambiamenti in oggetti mutabili è difficile perchè essi vengono modif
611
559
612
560
Rilevare cambiamenti negli oggetti immutabili è considerevolmente più semplice. Se il riferimento dell'oggetto immutabile è diverso dal precedente, allora l'oggetto è cambiato.
613
561
614
-
<<<<<<< HEAD
615
562
#### Determinare Quando Renderizzare di Nuovo in React {#determining-when-to-re-render-in-react}
616
-
=======
617
-
#### Determining When to Re-Render in React {#determining-when-to-re-render-in-react}
618
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
619
563
620
564
Il più grande beneficio dell'immutabilità è il fatto che ci aiuta a creare _componenti puri_ in React. Avere dati immutabili permette di identificare cambiamenti in modo semplice e di conseguenza anche di capire quando un componente richiede una nuova renderizzazione.
621
565
@@ -645,11 +589,7 @@ Abbiamo cambiato `this.props` in `props` in entrambi i casi.
645
589
646
590
>Nota Bene
647
591
>
648
-
<<<<<<< HEAD
649
-
>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`.
650
-
=======
651
-
>When we modified the Square to be a function component, we also changed `onClick={() => this.props.onClick()}` to a shorter `onClick={props.onClick}` (note the lack of parentheses on *both* sides).
652
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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).
653
593
654
594
### Turni {#taking-turns}
655
595
@@ -681,13 +621,9 @@ Ogni volta che un giocatore muove, `xIsNext` (booleano) viene invertito per dete
681
621
}
682
622
```
683
623
684
-
<<<<<<< HEAD
685
-
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:
686
-
=======
687
-
With this change, "X"s and "O"s can take turns. Try it!
624
+
Con questo cambiamento, "X" e "O" adesso vengono usati alternativamente di turno in turno. Prova!
688
625
689
-
Let's also change the "status" text in Board's `render` so that it displays which player has the next turn:
690
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
626
+
Dobbiamo anche cambiare il testo "status" nel `render` di Board cosicchè verremo informati a video del giocatore che deve muovere nel turno successivo:
691
627
692
628
```javascript{2}
693
629
render() {
@@ -758,11 +694,7 @@ class Board extends React.Component {
758
694
759
695
### Dichiarare un Vincitore {#declaring-a-winner}
760
696
761
-
<<<<<<< HEAD
762
-
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:
763
-
=======
764
-
Now that we show which player's turn is next, we should also show when the game is won and there are no more turns to make. Copy this helper function and paste it at the end of the file:
765
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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:
766
698
767
699
```javascript
768
700
functioncalculateWinner(squares) {
@@ -786,13 +718,9 @@ function calculateWinner(squares) {
786
718
}
787
719
```
788
720
789
-
<<<<<<< HEAD
790
-
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:
791
-
=======
792
-
Given an array of 9 squares, this function will check for a winner and return `'X'`, `'O'`, or `null` as appropriate.
721
+
Dato un array di 9 quadrati, questa funzione determinerà il vincitore e ritornerà `'X'`, `'O'` o `null` di conseguenza.
793
722
794
-
We will call `calculateWinner(squares)` in the Board's `render` function to check if a player has won. If a player has won, we can display text such as "Winner: X" or "Winner: O". We'll replace the `status` declaration in Board's `render` function with this code:
795
-
>>>>>>> 8803c6375b153af39a850822d844db94ea4c9b0a
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