Skip to content

Commit ec1067b

Browse files
Sync with reactjs.org @ 8803c63 (#120)
* Update tutorial.md * Update languages page (#1771) * update languages page * reset languages.yml * whoops * Fix CRA code splitting link (#1765) * Update tutorial.md
1 parent d51565b commit ec1067b

File tree

3 files changed

+53
-45
lines changed

3 files changed

+53
-45
lines changed

content/docs/code-splitting.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ import("./math").then(math => {
102102
103103
When Webpack comes across this syntax, it automatically starts code-splitting
104104
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
106106
out of the box in [Next.js](https://github.com/zeit/next.js/#dynamic-import).
107107

108108
If you're setting up Webpack yourself, you'll probably want to read Webpack's

content/languages.yml

+34-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Status enums indicate what percentage of "core" content has been translated:
2-
# 0: Incomplete (049%)
3-
# 1: Partially complete (50–94%)
4-
# 2: Complete (95–100%)
2+
# 0: Incomplete (0-49%)
3+
# 1: Partially complete (50-99%)
4+
# 2: Complete (100%)
55

66
- name: English
77
translated_name: English
@@ -27,6 +27,10 @@
2727
translated_name: Deutsch
2828
code: de
2929
status: 0
30+
- name: Greek
31+
translated_name: Ελληνικά
32+
code: el
33+
status: 0
3034
- name: Spanish
3135
translated_name: Español
3236
code: es
@@ -38,6 +42,10 @@
3842
- name: French
3943
translated_name: Français
4044
code: fr
45+
status: 1
46+
- name: Gujarati
47+
translated_name: ગુજરાતી
48+
code: gu
4149
status: 0
4250
- name: Hebrew
4351
translated_name: עברית
@@ -62,11 +70,23 @@
6270
- name: Japanese
6371
translated_name: 日本語
6472
code: ja
65-
status: 1
73+
status: 2
74+
- name: Central Khmer
75+
translated_name: ភាសាខ្មែរ
76+
code: km
77+
status: 0
6678
- name: Korean
6779
translated_name: 한국어
6880
code: ko
6981
status: 0
82+
- name: Kurdish
83+
translated_name: کوردی‎
84+
code: ku
85+
status: 0
86+
- name: Lithuanian
87+
translated_name: Lietuvių kalba
88+
code: lt
89+
status: 0
7090
- name: Malayalam
7191
translated_name: മലയാളം
7292
code: ml
@@ -98,7 +118,7 @@
98118
- name: Russian
99119
translated_name: Русский
100120
code: ru
101-
status: 0
121+
status: 1
102122
- name: Sinhala
103123
translated_name: සිංහල
104124
code: si
@@ -107,13 +127,21 @@
107127
translated_name: தமிழ்
108128
code: ta
109129
status: 0
130+
- name: Telugu
131+
translated_name: తెలుగు
132+
code: te
133+
status: 0
110134
- name: Turkish
111135
translated_name: Türkçe
112136
code: tr
113137
status: 0
114138
- name: Ukrainian
115139
translated_name: Українська
116140
code: uk
141+
status: 1
142+
- name: Urdu
143+
translated_name: اردو
144+
code: ur
117145
status: 0
118146
- name: Uzbek
119147
translated_name: Oʻzbekcha
@@ -126,7 +154,7 @@
126154
- name: Simplified Chinese
127155
translated_name: 简体中文
128156
code: zh-hans
129-
status: 0
157+
status: 1
130158
- name: Traditional Chinese
131159
translated_name: 繁體中文
132160
code: zh-hant

content/tutorial/tutorial.md

+18-38
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ Il tutorial è diviso nelle seguenti sezioni:
3131

3232
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.
3333

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-
3634
### Cosa Stiamo Costruendo? {#what-are-we-building}
3735

3836
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
190188

191189
Giusto per rompere il ghiaccio, proviamo a passare qualche dato dal componente Board al nostro componente Square.
192190

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+
193193
Nel metodo `renderSquare` in Board, modifica il codice per passare una prop chiamata `value` allo Square:
194194

195195
```js{3}
@@ -294,7 +294,7 @@ class Square extends React.Component {
294294
Procediamo alla modifica del metodo `render` di Square per visualizzare il valore corrente dello stato quando lo clicchiamo:
295295

296296
* Sostituisci `this.props.value` con `this.state.value` all'interno del tag `<button>`.
297-
* Sostituisci l'event handler `() => alert()` con `() => this.setState({value: 'X'})`.
297+
* Sostituisci l'event handler `onClick={...}` con `onClick={() => this.setState({value: 'X'})}`.
298298
* Aggiungi le props `className` e `onClick` come linee separate per miglior leggibilità.
299299

300300
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
356356

357357
**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.**
358358

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:
360362

361363
```javascript{2-7}
362364
class Board extends React.Component {
@@ -370,35 +372,9 @@ class Board extends React.Component {
370372
renderSquare(i) {
371373
return <Square value={i} />;
372374
}
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-
}
399375
```
400376

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ì:
402378

403379
```javascript
404380
[
@@ -432,7 +408,7 @@ Ogni Square adesso riceverà una prop `value` che sarà valorizzata con `'X'`, `
432408

433409
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.
434410

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:
436412

437413
```javascript{5}
438414
renderSquare(i) {
@@ -478,11 +454,11 @@ Quando uno Square viene cliccato, viene richiamata la funzione `onClick` provvis
478454
2. Quando il bottone viene cliccato, React richiama l'event handler `onClick` che è definito nel metodo `render()` di Square.
479455
3. Questo event handler chiama a sua volta `this.props.onClick()`. La prop `onClick` di Square è stata però specificata da Board.
480456
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".
482458

483459
>Nota Bene
484460
>
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.
486462
487463
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:
488464

@@ -539,7 +515,7 @@ class Board extends React.Component {
539515

540516
**[Visualizza tutto il codice scritto finora](https://codepen.io/gaearon/pen/ybbQJX?editors=0010)**
541517

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.
543519

544520
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.
545521

@@ -613,7 +589,7 @@ Abbiamo cambiato `this.props` in `props` in entrambi i casi.
613589

614590
>Nota Bene
615591
>
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).
617593
618594
### Turni {#taking-turns}
619595

@@ -645,7 +621,9 @@ Ogni volta che un giocatore muove, `xIsNext` (booleano) viene invertito per dete
645621
}
646622
```
647623

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:
649627

650628
```javascript{2}
651629
render() {
@@ -716,7 +694,7 @@ class Board extends React.Component {
716694

717695
### Dichiarare un Vincitore {#declaring-a-winner}
718696

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:
720698

721699
```javascript
722700
function calculateWinner(squares) {
@@ -740,6 +718,8 @@ function calculateWinner(squares) {
740718
}
741719
```
742720

721+
Dato un array di 9 quadrati, questa funzione determinerà il vincitore e ritornerà `'X'`, `'O'` o `null` di conseguenza.
722+
743723
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:
744724

745725
```javascript{2-8}

0 commit comments

Comments
 (0)