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/docs/add-react-to-a-website.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -149,7 +149,7 @@ return (
149
149
150
150
Questi due frammenti di codice sono equivalenti. Anche se **JSX è [completamente opzionale](/docs/react-without-jsx.html)**, molte persone trovano che sia utile per scrivere il codice della UI -- non solo con React ma anche con altre librerie!
151
151
152
-
Puoi fare esperimenti con JSX utilizzando [questo convertitore online](https://babeljs.io/en/repl#?babili=false&browsers=&build=&builtIns=false&spec=false&loose=false&code_lz=DwIwrgLhD2B2AEcDCAbAlgYwNYF4DeAFAJTw4B88EAFmgM4B0tAphAMoQCGETBe86WJgBMAXJQBOYJvAC-RGWQBQ8FfAAyaQYuAB6cFDhkgA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=es2015%2Creact%2Cstage-2&prettier=false&targets=&version=7.4.3).
152
+
Puoi fare esperimenti con JSX utilizzando [questo convertitore online](https://babeljs.io/en/repl#?babili=false&browsers=&build=&builtIns=false&spec=false&loose=false&code_lz=DwIwrgLhD2B2AEcDCAbAlgYwNYF4DeAFAJTw4B88EAFmgM4B0tAphAMoQCGETBe86WJgBMAXJQBOYJvAC-RGWQBQ8FfAAyaQYuAB6cFDhkgA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=es2015%2Creact%2Cstage-2&prettier=false&targets=&version=7.15.7).
Copy file name to clipboardExpand all lines: content/docs/error-boundaries.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -47,7 +47,7 @@ class ErrorBoundary extends React.Component {
47
47
return <h1>Something went wrong.</h1>;
48
48
}
49
49
50
-
return this.props.children;
50
+
return this.props.children;
51
51
}
52
52
}
53
53
```
@@ -126,7 +126,7 @@ I contenitori di errore preservano la natura dichiarativa di React e si comporta
126
126
127
127
## Che dire del gestore degli eventi? {#how-about-event-handlers}
128
128
129
-
I contenitori di errori **non catturano** gli errori all'interno dei gestori degli eventi.
129
+
I contenitori di errori **non catturano** gli errori all'interno dei gestori degli eventi.
130
130
131
131
React non ha necessità di contenitori di errori per i gestori degli eventi. A differenza dei metodi di render e dei metodi del ciclo di vita, i gestori degli eventi non si hanno durante il rendering. Quindi se questi lanciano un errore, React continua comunque a sapere cosa visualizzare sullo schermo.
Copy file name to clipboardExpand all lines: content/docs/hooks-faq.md
-2
Original file line number
Diff line number
Diff line change
@@ -914,8 +914,6 @@ Note that you can still choose whether to pass the application *state* down as p
914
914
>Note
915
915
>
916
916
>We recommend to [pass `dispatch` down in context](#how-to-avoid-passing-callbacks-down) rather than individual callbacks in props. The approach below is only mentioned here for completeness and as an escape hatch.
917
-
>
918
-
>Also note that this pattern might cause problems in the [concurrent mode](/blog/2018/03/27/update-on-async-rendering.html). We plan to provide more ergonomic alternatives in the future, but the safest solution right now is to always invalidate the callback if some value it depends on changes.
919
917
920
918
In some rare cases you might need to memoize a callback with [`useCallback`](/docs/hooks-reference.html#usecallback) but the memoization doesn't work very well because the inner function has to be re-created too often. If the function you're memoizing is an event handler and isn't used during rendering, you can use [ref as an instance variable](#is-there-something-like-instance-variables), and save the last committed value into it manually:
Copy file name to clipboardExpand all lines: content/docs/testing-environments.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -55,4 +55,4 @@ Sometimes, you may not want to mock timers. For example, maybe you're testing an
55
55
56
56
End-to-end tests are useful for testing longer workflows, especially when they're critical to your business (such as payments or signups). For these tests, you'd probably want to test how a real browser renders the whole app, fetches data from the real API endpoints, uses sessions and cookies, navigates between different links. You might also likely want to make assertions not just on the DOM state, but on the backing data as well (e.g. to verify whether the updates have been persisted to the database).
57
57
58
-
In this scenario, you would use a framework like [Cypress](https://www.cypress.io/)or a library like [puppeteer](https://github.com/GoogleChrome/puppeteer) so you can navigate between multiple routes and assert on side effects not just in the browser, but potentially on the backend as well.
58
+
In this scenario, you would use a framework like [Cypress](https://www.cypress.io/), [Playwright](https://playwright.dev)or a library like [Puppeteer](https://pptr.dev/) so you can navigate between multiple routes and assert on side effects not just in the browser, but potentially on the backend as well.
Copy file name to clipboardExpand all lines: content/docs/thinking-in-react.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -129,15 +129,15 @@ Bene, abbiamo deciso che il nostro stato vive in `TabellaProdottiRicercabile`. P
129
129
130
130
Puoi cominciare a vedere come si comporta l'applicazione: imposta `testoRicerca` a `"Palla"` e aggiornala. Vedrai che la tabella dati è stata aggiornata correttamente.
131
131
132
-
## Step 5: Invertire il Flusso Dati {#step-5-add-inverse-data-flow}
132
+
## Passo 5: Invertire il Flusso Dati {#step-5-add-inverse-data-flow}
133
133
134
134
[Prova su CodeSandbox](embedded-codesandbox://thinking-in-react/3?view=split&editorsize=70)
135
135
136
136
Fino ad ora, abbiamo implementato una applicazione che renderizza correttamente con props e state che fluiscono in basso nella gerarchia. Adesso è il momento di supportare il flusso inverso: dobbiamo fare in modo che i componenti form più in basso nella gerarchia, possano aggiornare lo stato in `TabellaProdottiRicercabile`.
137
137
138
138
React rende questo flusso dati esplicito in modo da facilitare la comprensione del funzionamento del programma, tuttavia richiede la scrittura di un po' più codice rispetto ad altre soluzioni con flusso dati bidirezionale (*two-way data binding*).
139
139
140
-
Se provi a scrivere qualcosa o a selezionare la casella nella versione vista nel passo precedente, noterai che React ignora completamente il tuo input. Si tratta di un fatto intenzionale, abbiamo infatti impostato la prop `value` dell'`input` per essere sempre uguale allo `state` che riceve da da `TabellaProdottiRicercabile`.
140
+
Se provi a scrivere qualcosa o a selezionare la casella nella precedente versione (passo 4), noterai che React ignora completamente il tuo input. Si tratta di un fatto intenzionale, abbiamo infatti impostato la prop `value` dell'`input` per essere sempre uguale allo `state` che riceve da da `TabellaProdottiRicercabile`.
141
141
142
142
Proviamo a pensare a cosa vogliamo far sì che avvenga. Vogliamo fare in modo che a seconda di come l'utente alteri il form, lo stato verrà alterato di conseguenza. Dato che i componenti possono alterare solamente il proprio stato, `TabellaProdottiRicercabile` passerà [callbacks](https://it.wikipedia.org/wiki/Callback) a `BarraRicerca` che verranno invocate ogni qual volta lo stato deve essere aggiornato. Possiamo utilizzare l'evento `onChange` degli input per ricevere tale notifica. Le callbacks passate da `TabellaProdottiRicercabile` chiameranno `setState()` facendo sì che la applicazione venga aggiornata.
Copy file name to clipboardExpand all lines: content/tutorial/tutorial.md
+10-8
Original file line number
Diff line number
Diff line change
@@ -78,7 +78,7 @@ Questo setup richiede qualche piccolo sforzo aggiuntivo ma ti permette di comple
78
78
npx create-react-app my-app
79
79
```
80
80
81
-
3. Elimina tutti i files nella cartella `src/` del nuovo progetto
81
+
3. Elimina tutti i files nella cartella `src/` del nuovo progetto
82
82
83
83
> Nota Bene:
84
84
>
@@ -228,7 +228,7 @@ Congratulazioni! Hai appena "passato una prop" da un componente genitore Board a
228
228
229
229
### Creare un Componente Interattivo {#making-an-interactive-component}
230
230
231
-
Andiamo a riempire il componente Square con una "X" quando lo clicchiamo.
231
+
Andiamo a riempire il componente Square con una "X" quando lo clicchiamo.
232
232
Prima di tutto, modifichiamo il tag `button` che è ritornato dalla funzione `render()` del componente Square:
233
233
234
234
```javascript{4}
@@ -357,7 +357,7 @@ Possiamo pensare che Board debba solo richiedere ad ogni Square il relativo stat
357
357
358
358
**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.**
359
359
360
-
Elevare lo stato nel componente padre è un processo comune quando i componenti React vengono rifattorizzati -- proviamo già che ci siamo.
360
+
Elevare lo stato nel componente padre è un processo comune quando i componenti React vengono rifattorizzati -- proviamo già che ci siamo.
361
361
362
362
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:
363
363
@@ -455,7 +455,7 @@ Quando uno Square viene cliccato, viene richiamata la funzione `onClick` provvis
455
455
2. Quando il bottone viene cliccato, React richiama l'event handler `onClick` che è definito nel metodo `render()` di Square.
456
456
3. Questo event handler chiama a sua volta `this.props.onClick()`. La prop `onClick` di Square è stata però specificata da Board.
457
457
4. Dato che Board ha passato `onClick={() => this.handleClick(i)}` a Square, di conseguenza Square richiama `handleClick(i)` di Board quando viene cliccato.
458
-
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".
458
+
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".
// In alternativa potremmo usare la sintassi "spread" (vedi nota di seguito), con la quale scriveremmo:
546
546
// var nuovoGiocatore = {...giocatore, punti: 2};
547
-
//
547
+
//
548
548
```
549
549
>Per maggiori informazioni sulla sintassi [spread](https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Operators/Spread_syntax)
550
550
@@ -590,7 +590,7 @@ Abbiamo cambiato `this.props` in `props` in entrambi i casi.
590
590
591
591
>Nota Bene
592
592
>
593
-
>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).
593
+
>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).
594
594
595
595
### Turni {#taking-turns}
596
596
@@ -998,7 +998,7 @@ In JavaScript, gli array hanno un [metodo `map()`](https://developer.mozilla.org
998
998
```js
999
999
constnumeri= [1, 2, 3];
1000
1000
constraddoppiati=numeri.map(x=> x *2); // [2, 4, 6]
1001
-
```
1001
+
```
1002
1002
1003
1003
Usando il metodo `map`, possiamo mappare il nostro storico delle mosse in elementi React che rappresentano i bottoni sullo schermo, e visualizzare una lista di bottoni per "saltare" alle mosse precedenti.
1004
1004
@@ -1047,6 +1047,8 @@ Usiamo `map` su `history` nel metodo `render` di Game:
1047
1047
1048
1048
**[Visualizza tutto il codice scritto finora](https://codepen.io/gaearon/pen/EmmGEa?editors=0010)**
1049
1049
1050
+
Man mano che iteriamo l'array `history`, la variabile `step` si riferisce al valore corrente dell'elemento `history`, mentre `move` si riferisce all'indice dell'elemento `history`. Qui siamo interessati solo a `move`, per questo `step` non viene assegnato a nulla.
1051
+
1050
1052
Per ogni mossa nello storico delle mosse, creeremo una lista di elementi `<li>` che contengono un bottone `<button>`. Il bottone avrà un handler `onClick` che richiama un metodo chiamato `this.jumpTo()`. Non abbiamo ancora implementato `jumpTo()`. Per adesso, dovremmo essere in grado di vedere una lista delle mosse avvenute oltre ad un messaggio di errore nella console dei [developer tools](#developer-tools) che dice:
1051
1053
1052
1054
> Attenzione:
@@ -1150,7 +1152,7 @@ Poi, definitiamo il metodo `jumpTo` in Game per aggiornare quello `stepNumber`.
1150
1152
1151
1153
È ora di apportare qualche cambiamento al metodo `handleClick` di Game che verrà richiamato quando si clicca su un quadrato.
1152
1154
1153
-
Lo stato `stepNumber` che abbiamo appena aggiunto adesso riflette la mossa visualizzata. Dopo ogni nuova mossa, dobbiamo aggiornare `stepNumber` aggiungendo `stepNumber: history.length` come parte del parametro alla chiamata `this.setState`. Ciò farà in modo di non restare bloccati nella stessa mossa ogni qual volta ne viene effettuata una nuova.
1155
+
Lo stato `stepNumber` che abbiamo appena aggiunto adesso riflette la mossa visualizzata. Dopo ogni nuova mossa, dobbiamo aggiornare `stepNumber` aggiungendo `stepNumber: history.length` come parte del parametro alla chiamata `this.setState`. Ciò farà in modo di non restare bloccati nella stessa mossa ogni qual volta ne viene effettuata una nuova.
1154
1156
1155
1157
Sostituiremo anche `this.state.history` con `this.state.history.slice(0, this.state.stepNumber + 1)`. Ciò farà in modo che nel caso in cui volessimo "andare indietro nel tempo" e poi fare una nuova mossa da quel punto, possiamo buttare via tutta la storia "futura" che diverrebbe incorretta visto che in un certo senso la stiamo riscrivendo.
0 commit comments