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
Handling events with React elements is very similar to handling events on DOM elements. There are some syntactic differences:
11
+
La gestione degli eventi negli elementi React è molto simile alla gestione degli eventi negli elementi DOM. Vi sono alcune differenze sintattiche:
12
12
13
-
*React events are named using camelCase, rather than lowercase.
14
-
*With JSX you pass a function as the event handler, rather than a string.
13
+
*Gli eventi React vengono dichiarati utilizzando camelCase, anziché in minuscolo.
14
+
*In JSX, il gestore di eventi (_event handler_) viene passato come funzione, piuttosto che stringa.
15
15
16
-
For example, the HTML:
16
+
Per esempio, l'HTML:
17
17
18
18
```html
19
-
<buttononclick="activateLasers()">
20
-
Activate Lasers
19
+
<buttononclick="attivaLasers()">
20
+
Attiva Lasers
21
21
</button>
22
22
```
23
23
24
-
is slightly different in React:
24
+
è leggermente diverso in React:
25
25
26
26
```js{1}
27
-
<button onClick={activateLasers}>
28
-
Activate Lasers
27
+
<button onClick={attivaLasers}>
28
+
Attiva Lasers
29
29
</button>
30
30
```
31
31
32
-
Another difference is that you cannot return `false`to prevent default behavior in React. You must call `preventDefault`explicitly. For example, with plain HTML, to prevent the default link behavior of opening a new page, you can write:
32
+
Un'altra differenza è che, in React, non è possibile ritornare `false`per impedire il comportamento predefinito. Devi chiamare `preventDefault`esplicitamente. Ad esempio, in un semplice codice HTML per impedire il comportamento predefinito del link di aprire una nuova pagina, potresti scrivere:
33
33
34
34
```html
35
-
<ahref="#"onclick="console.log('The link was clicked.'); return false">
36
-
Click me
35
+
<ahref="#"onclick="console.log('Hai cliccato sul link.'); return false">
36
+
Clicca qui
37
37
</a>
38
38
```
39
39
40
-
In React, this could instead be:
40
+
In React, invece sarebbe:
41
41
42
42
```js{2-5,8}
43
43
function ActionLink() {
44
44
function handleClick(e) {
45
45
e.preventDefault();
46
-
console.log('The link was clicked.');
46
+
console.log('Hai cliccato sul link.');
47
47
}
48
48
49
49
return (
50
50
<a href="#" onClick={handleClick}>
51
-
Click me
51
+
Clicca qui
52
52
</a>
53
53
);
54
54
}
55
55
```
56
56
57
-
Here, `e`is a synthetic event. React defines these synthetic events according to the [W3C spec](https://www.w3.org/TR/DOM-Level-3-Events/), so you don't need to worry about cross-browser compatibility. See the [`SyntheticEvent`](/docs/events.html)reference guide to learn more.
57
+
In questo esempio, il parametro `e`è un evento sintetico (_synthetic event_). React definisce questi eventi sintetici in base alle [specifiche W3C](https://www.w3.org/TR/DOM-Level-3-Events/), quindi non hai bisogno di preoccuparti della compatibilità tra browser. Consulta la guida di riferimento [`SyntheticEvent`](/docs/events.html)per saperne di più.
58
58
59
-
When using React you should generally not need to call `addEventListener`to add listeners to a DOM element after it is created. Instead, just provide a listener when the element is initially rendered.
59
+
Usando React, in generale, non dovresti aver bisogno di chiamare `addEventListener`per aggiungere listeners ad un elemento DOM dopo la sua creazione. Invece, basta fornire un listener quando l'elemento è inizialmente renderizzato.
60
60
61
-
When you define a component using an [ES6 class](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes), a common pattern is for an event handler to be a method on the class. For example, this `Toggle`component renders a button that lets the user toggle between "ON" and "OFF" states:
61
+
Quando definisci un componente usando una [classe ES6](https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Classes), un pattern comune è usare un metodo della classe come gestore di eventi. Ad esempio, questo componente `Toggle`renderizza un pulsante che consente all'utente di alternare gli stati "ON" e "OFF":
62
62
63
63
```js{6,7,10-14,18}
64
64
class Toggle extends React.Component {
65
65
constructor(props) {
66
66
super(props);
67
67
this.state = {isToggleOn: true};
68
68
69
-
// This binding is necessary to make `this` work in the callback
69
+
// Necessario per accedere al corretto valore di `this` all'interno della callback
70
70
this.handleClick = this.handleClick.bind(this);
71
71
}
72
72
@@ -91,64 +91,64 @@ ReactDOM.render(
91
91
);
92
92
```
93
93
94
-
[**Try it on CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010)
94
+
[**Provalo su CodePen**](http://codepen.io/gaearon/pen/xEmzGg?editors=0010)
95
95
96
-
You have to be careful about the meaning of `this`in JSX callbacks. In JavaScript, class methods are not [bound](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind)by default. If you forget to bind`this.handleClick`and pass it to`onClick`, `this`will be `undefined`when the function is actually called.
96
+
Fai attenzione al valore di `this`nelle callback JSX. In JavaScript, i metodi delle classi non sono [associati](https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_objects/Function/bind)(_bound_) di default. Se dimentichi di applicare `bind` a `this.handleClick`e di passarlo a`onClick`, `this`sarà `undefined`quando la funzione verrà effettivamente chiamata.
97
97
98
-
This is not React-specific behavior; it is a part of [how functions work in JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). Generally, if you refer to a method without`()`after it, such as`onClick={this.handleClick}`, you should bind that method.
98
+
Questo non è un comportamento specifico in React: è parte di [come funzionano le funzioni in JavaScript](https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/). In generale, se ti riferisci ad un metodo senza`()`dopo di esso, per esempio`onClick = {this.handleClick}`, potresti aver bisogno di applicare `bind` a quel metodo.
99
99
100
-
If calling `bind`annoys you, there are two ways you can get around this. If you are using the experimental [public class fields syntax](https://babeljs.io/docs/plugins/transform-class-properties/), you can use class fields to correctly bind callbacks:
100
+
Se usare la chiamata al metodo `bind`ti sembra troppo, ci sono due alternative a disposizione. Puoi usare la sintassi sperimentale [proprietà pubbliche delle classi](https://babeljs.io/docs/plugins/transform-class-properties/), utilizzando le proprietà delle classi per associare correttamente le callback:
101
101
102
102
```js{2-6}
103
103
class LoggingButton extends React.Component {
104
-
// This syntax ensures `this` is bound within handleClick.
105
-
// Warning: this is *experimental* syntax.
104
+
// Garantisce che `this` si riferisca all'oggetto originale all'interno di handleClick.
105
+
// Attenzione: questa è sintassi *sperimentale*.
106
106
handleClick = () => {
107
-
console.log('this is:', this);
107
+
console.log('Il valore di `this` è: ', this);
108
108
}
109
109
110
110
render() {
111
111
return (
112
112
<button onClick={this.handleClick}>
113
-
Click me
113
+
Clicca qui
114
114
</button>
115
115
);
116
116
}
117
117
}
118
118
```
119
119
120
-
This syntax is enabled by default in[Create React App](https://github.com/facebookincubator/create-react-app).
120
+
Questa sintassi è abilitata nelle impostazioni predefinite di[Create React App](https://github.com/facebookincubator/create-react-app).
121
121
122
-
If you aren't using class fields syntax, you can use an [arrow function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions)in the callback:
122
+
Se non stai usando la sintassi delle proprietà delle classi, è possibile utilizzare una [funzione a freccia](https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Functions/Arrow_functions)all'interno della callback:
123
123
124
124
```js{7-9}
125
125
class LoggingButton extends React.Component {
126
126
handleClick() {
127
-
console.log('this is:', this);
127
+
console.log('Il valore di `this` è: ', this);
128
128
}
129
129
130
130
render() {
131
-
// This syntax ensures `this` is bound within handleClick
131
+
// Questa sintassi garantisce che `this` sia associato correttamente all'interno di handleClick
132
132
return (
133
133
<button onClick={(e) => this.handleClick(e)}>
134
-
Click me
134
+
Clicca qui
135
135
</button>
136
136
);
137
137
}
138
138
}
139
139
```
140
140
141
-
The problem with this syntax is that a different callback is created each time the `LoggingButton`renders. In most cases, this is fine. However, if this callback is passed as a prop to lower components, those components might do an extra re-rendering. We generally recommend binding in the constructor or using the class fields syntax, to avoid this sort of performance problem.
141
+
Il problema con questa sintassi è che viene creata una callback diversa ogni volta che `LoggingButton`viene renderizzato. Nella maggior parte dei casi, non vi sono problemi. Tuttavia, se questa callback viene passata come prop a componenti inferiori, tali componenti potrebbero eseguire un ulteriore re-renderizzamento. In generale, vi consigliamo di utilizzare `bind` nel costruttore o la sintassi delle proprietà pubbliche nelle classi, per evitare questo tipo di problema di prestazioni.
142
142
143
-
## Passing Arguments to Event Handlers {#passing-arguments-to-event-handlers}
143
+
## Passare Argomenti ai Gestori di Eventi {#passing-arguments-to-event-handlers}
144
144
145
-
Inside a loop it is common to want to pass an extra parameter to an event handler. For example, if`id`is the row ID, either of the following would work:
145
+
All'interno di un ciclo, è comune avere l'esigenza di passare un parametro aggiuntivo ad un gestore di eventi. Ad esempio, avendo`id`come l'identificativo della riga, le seguenti dichiarazioni sarebbero entrambe valide:
The above two lines are equivalent, and use [arrow functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)and[`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind)respectively.
152
+
Le due linee di codice precedenti sono equivalenti e utilizzano le [funzioni a freccia](https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Functions_and_function_scope/Arrow_functions)e[`Function.prototype.bind`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind)rispettivamente.
153
153
154
-
In both cases, the`e` argument representing the React event will be passed as a second argument after the ID. With an arrow function, we have to pass it explicitly, but with`bind`any further arguments are automatically forwarded.
154
+
In entrambi i casi, l'argomento`e`, che rappresenta l'evento React, verrà passato come secondo argomento dopo l'ID. Con la funzione a freccia, devi passarlo esplicitamente, mentre con`bind`qualsiasi altro argomento viene passato automaticamente.
0 commit comments