--- id: forms-it-IT title: Moduli permalink: forms-it-IT.html prev: transferring-props-it-IT.html next: working-with-the-browser-it-IT.html --- I componenti dei moduli come ``, `` e `` differiscono dagli altri componenti nativi poiché possono essere alterati tramite interazione dell'utente. Questi componenti forniscono interfacce che rendono più semplice gestire i moduli in risposta all'interazione dell'utente. Per maggiori informazioni sugli eventi dell'elemento `` consulta [Eventi dei Moduli](/react/docs/events.html#form-events). ## Proprietà Interattive I componenti dei moduli supportano un numero di proprietà che vengono modificate dall'interazione dell'utente: * `value`, supportato dai elementi `` e ``. * `checked`, supportato dagli elementi `` dal tipo `checkbox` o `radio`. * `selected`, supportato dagli elementi ``. In HTML, in valore di `` è impostato tramite un nodo di testo figlio. In React, devi invece usare la proprietà `value`. I componenti dei moduli ti permettono di reagire ai cambiamenti impostando una callback come proprietà `onChange`. La proprietà `onChange` funziona in tutti i browser e viene scatenata in risposta all'interazione dell'utente quando: * Il `value` di `` o `` cambia. * Lo stato `checked` di `` cambia. * Lo stato `selected` di `` cambia. Come tutti gli eventi DOM, la proprietà `onChange` è supportata su tutti i componenti nativi e può essere usata per gestire la propagazione di eventi di cambiamento. > Nota: > > Per `` e ``, `onChange` rimpiazza — e dovrebbe generalmente essere utilizzata in sostituzione — il gestore di eventi [`oninput`](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/oninput) nativo del DOM. ## Componenti Controllati Un `` il cui `value` è impostato è un componente *controllato*. In un `` controllato, il valore dell'elemento visualizzato si riflette sempre nella sua proprietà `value`. Ad esempio: ```javascript render: function() { return ; } ``` Ciò visualizzerà un input che ha sempre il valore di `value` impostato a `Ciao!`. Ciascuna immissione dell'utente non avrà effetto sull'elemento visualizzato poiché React ha dichiarato il suo `value` pari a `Ciao!`. Se volessi aggiornare il `value` in risposta all'input dell'utente, puoi usare l'evento `onChange`: ```javascript getInitialState: function() { return {value: 'Ciao!'}; }, handleChange: function(event) { this.setState({value: event.target.value}); }, render: function() { var value = this.state.value; return ; } ``` In questo esempio, stiamo semplicemente accettando il valore più recente fornito dall'utente e aggiornando la proprietà `value` del componente ``. Questo pattern semplifica l'implementazione di interfacce che rispondono o validano l'interazione dell'utente. Ad esempio: ```javascript handleChange: function(event) { this.setState({value: event.target.value.substr(0, 140)}); } ``` Così si può accettare l'input dell'utente ma ne tronca il valore ai primi 140 caratteri. ### Potenziali Problemi con Checkbox e Radio Button Fai attenzione che, allo scopo di normalizzare la gestione del cambiamento degli elementi checkbox e radio button, React usa un evento `click` al posto di un evento `change`. Nella maggior parte dei casi questo funziona nel modo previsto, tranne quando viene usato `preventDefault` in un gestore dell'evento `change`. `preventDefault` impedisce al browser di aggiornare visualmente l'input, anche se `checked` cambia il suo valore. Questo può essere evitato rimuovendo la chiamata a `preventDefault`, oppure effettuando il cambio del valore di `checked` tramite `setTimeout`. ## Componenti Non Controllati Un `` che non fornisce un `value` (o lo imposta a `null`) è un componente *non controllato*. In un `` non controllato, il valore dell'elemento visualizzato rifletterà l'input dell'utente. Ad esempio: ```javascript render: function() { return ; } ``` Questo visualizzerà un campo di input il cui valore iniziale è vuoto. Ciascun input dell'utente si rifletterà immediatamente nell'elemento visualizzato. Se desideri reagire ai cambiamenti del valore, puoi usare il gestore di eventi `onChange` proprio come con i componenti controllati. ### Valore Predefinito Se desideri inizializzare il componente con un valore non vuoto, puoi fornire una proprietà `defaultValue`. Ad esempio: ```javascript render: function() { return ; } ``` Questo esempio funzionerà in maniera simile all'esempio precedente sui **Componenti Controllati**. Similmente, `` supporta `defaultChecked` e `` supporta `defaultValue`. > Nota: > > Le proprietà `defaultValue` e `defaultChecked` sono usate soltanto durante il rendering iniziale. Se devi aggiornare il valore in un rendering successivo, dovrai usare un [componente controllato](#controlled-components). ## Argomenti Avanzati ### Perché Componenti Controllati? Usare componenti di moduli come `` in React presenta una difficoltà aggiuntiva, assente quando si scrive un modulo tradizionale in HTML. Ad esempio, in HTML: ```html ``` Questo visualizza un campo di input *inizializzato* con il valore `Senza titolo`. Quando l'utente modifica il campo, la *proprietà* `value` del nodo cambierà. Tuttavia, `node.getAttribute('value')` restituirà ancora il valore usato durante l'inizializzazione, `Senza titolo`. Diversamente dall'HTML, i componenti React devono rappresentare lo stato della vista in ciascun momento e non soltanto durante l'inizializzazione. Ad esempio, in React: ```javascript render: function() { return ; } ``` Dal momento che questo metodo descrive la vista in ogni momento, il valore del campo di testo deve *sempre* essere `Senza titolo`. ### Perché il Valore della Textarea? In HTML, il valore di `` è solitamente impostato usando un nodo di testo figlio: ```html Questa è la descrizione. ``` Per l'HTML, questo approccio permette agli sviluppatori di fornire facilmente valori su più righe. Tuttavia, dal momento che React è JavaScript, non abbiamo limitazioni sulle stringhe e possiamo usare `\n` se desideriamo andare a capo. In un mondo in cui abbiamo `value` e `defaultValue`, il ruolo giocato dal nodo figlio è ambiguo. Per questa ragione, non dovresti utilizzare il nodo figlio quando imposti il valore delle ``: ```javascript ``` Se tuttavia decidi di *usare* il nodo di testo figlio, questo si comporterà come `defaultValue`. ### Perché il Value di Select? L'elemento `` selezionato in un elemento HTML `` è normalmente specificato attraverso l'attributo `selected` dell'opzione stessa. In React, allo scopo di rendere i componenti più semplici da manipolare, viene invece adottato il formato seguente: ```javascript Arancia Banana Ciliegia ``` Per creare un componente non controllato, viene invece usato `defaultValue`. > Nota: > > Puoi passare un array come valore dell'attributo `value`, se desideri selezionare più opzioni in un tag `select` a scelta multipla: ``.