Files
react.dev/docs/10.2-form-input-binding-sugar.it-IT.md
Daniel Lo Nigro d457201862 Upgrade to Jekyll 3
Full list of changes is at https://jekyllrb.com/docs/upgrading/2-to-3/. The tl;dr of it is:
 - Relative permalinks were removed, so all the files in the `docs` subdirectory need their permalink to be prefixed with `docs/`
 - `post` and `page` types were renamed to `posts` and `pages` respectively
 - `jekyll-paginate`, `pygments` and `redcarpet` are all now optional, so I needed to explicitly add it to the Gemfile. Jekyll now uses `rouge` rather than `pygments` for syntax highlighting, but rouge does not support highlighting individual lines (`hl_lines`) so we need to continue using Pygments.
 - Layout metadata (eg. `sectionid`) is now on a `layout` variable rather than `page`

Tested the following pages and confirmed that they all work:
 - "Docs" link (getting started page): http://127.0.0.1:4000/react/docs/getting-started.html
 - Downloads: http://127.0.0.1:4000/react/downloads.html
 - Tutorial: http://127.0.0.1:4000/react/docs/tutorial.html
 - A few pages under the "docs" subdirectory, to confirm they're working properly:
    - http://127.0.0.1:4000/react/docs/addons.html
 - http://127.0.0.1:4000/react/docs/why-react.html
 - http://127.0.0.1:4000/react/docs/create-fragment.html
 - A few tips:
    - http://127.0.0.1:4000/react/tips/false-in-jsx.html
 - http://127.0.0.1:4000/react/tips/style-props-value-px.html
 - Non-English versions of the page:
    - http://127.0.0.1:4000/react/docs/getting-started-it-IT.html
    - http://127.0.0.1:4000/react/docs/getting-started-ja-JP.html
2016-07-19 12:18:49 -07:00

5.5 KiB

id, title, permalink, prev, next
id title permalink prev next
two-way-binding-helpers-it-IT Helper Per Binding Bidirezionali docs/two-way-binding-helpers-it-IT.html animation-it-IT.html test-utils-it-IT.html

ReactLink è una maniera semplice di esprimere binding bidirezionali con React.

Nota:

Se hai poca esperienza del framework, nota che ReactLink non è necessario per molte applicazioni e dovrebbe essere utilizzato con cautela.

In React, i dati fluiscono in una direzione: dal proprietario ai figli. Questo poiché i dati fluiscono in una sola direzione nel modello di computazione di Von Neumann. Puoi pensare ad esso come "binding unidirezionale dei dati."

Tuttavia, esistono parecchie applicazioni che richiedono di leggere dati e farli fluire nuovamente nel tuo programma. Ad esempio, quando sviluppi dei moduli, vorrai spesso aggiornare uno state di React quando ricevi un input dall'utente. O forse vuoi effettuare il layout in JavaScript e reagire ai cambiamenti nelle dimensioni di alcuni elementi DOM.

In React, questo verrebbe implementato ascoltando un evento "change", leggendo la tua fonte di dati (solitamente il DOM) e chiamando setState() su uno dei tuoi componenti. "Chiudere il ciclo del flusso dei dati" esplicitamente conduce a programmi più comprensibili e mantenibili. Consulta la nostra documentazione sui moduli per maggiori informazioni.

Il binding bidirezionale -- assicurarsi implicitamente che alcuni valori nel DOM siano sempre consistenti con degli state in React -- è più conciso e supporta un'ampia varietà di applicazioni. Abbiamo fornito ReactLink: zucchero sintattico per impostare il pattern del ciclo del flusso di dati descritto in predecenza, ovvero "collegare" una fonte di dati con lo state di React.

Nota:

ReactLink è soltanto uno strato di astrazione e convenzioni attorno al pattern onChange/setState(). Non cambia fondamentalmente la maniera in cui i dati fluiscono all'interno della tua applicazione React.

Ecco un semplice esempio di modulo che non utilizza ReactLink:

var NoLink = React.createClass({
  getInitialState: function() {
    return {message: 'Ciao!'};
  },
  handleChange: function(event) {
    this.setState({message: event.target.value});
  },
  render: function() {
    var message = this.state.message;
    return <input type="text" value={message} onChange={this.handleChange} />;
  }
});

Ciò funziona molto bene e il flusso di dati è molto chiaro. Tuttavia, in presenza di un gran numero di campi del modulo può risultare assai prolisso. Utilizziamo ReactLink per risparmiarci la scrittura di un po' di codice:

var WithLink = React.createClass({
  mixins: [React.addons.LinkedStateMixin],
  getInitialState: function() {
    return {message: 'Ciao!'};
  },
  render: function() {
    return <input type="text" valueLink={this.linkState('message')} />;
  }
});

LinkedStateMixin aggiunge un metodo chiamato linkState() al tuo componente React. linkState() restituisce un oggetto ReactLink contenente il valore attuae dello stato React e una callback per cambiarlo.

Gli oggetti ReactLink possono essere passati su e giù nell'albero come proprietà, quindi è facile (ed esplicito) impostare un binding bidirezionale tra un componente in profondità nella gerarchia e dello stato che si trova più in alto nella gerarchia.

Nota che i checkbox hanno un comportamento speciale riguardo il loro attributo value, che è il valore che sarà inviato all'inoltro del modulo se il checkbox è spuntato (il valore predefinito è on). L'attributo value non è aggiornato quando il checkbox viene spuntato o deselezionato. Per i checkbox occorre usare checkedLink anziché valueLink:

<input type="checkbox" checkedLink={this.linkState('booleanValue')} />

Dietro le Quinte

Ci sono due ambiti in ReactLink: il posto in cui crei l'istanza di ReactLink e il posto in cui la utilizzi. Per dimostrare quanto sia semplice usare ReactLink, riscriviamo ciascun ambito separatamente perché sia più esplicito.

var WithoutMixin = React.createClass({
  getInitialState: function() {
    return {message: 'Ciao!'};
  },
  handleChange: function(newValue) {
    this.setState({message: newValue});
  },
  render: function() {
    var valueLink = {
      value: this.state.message,
      requestChange: this.handleChange
    };
    return <input type="text" valueLink={valueLink} />;
  }
});

Come puoi vedere, gli oggetti ReactLink sono semplici oggetti che hanno due proprietà: value e requestChange. LinkedStateMixin è altrettanto semplice: popola semplicemente questi campi con un valore da this.state e una callback che invoca this.setState().

var WithoutLink = React.createClass({
  mixins: [React.addons.LinkedStateMixin],
  getInitialState: function() {
    return {message: 'Ciao!'};
  },
  render: function() {
    var valueLink = this.linkState('message');
    var handleChange = function(e) {
      valueLink.requestChange(e.target.value);
    };
    return <input type="text" value={valueLink.value} onChange={handleChange} />;
  }
});

La proprietà valueLink è anche abbastanza semplice. Gestisce semplicemente l'evento onChange e invoca this.props.valueLink.requestChange(), e inoltre utilizza this.props.valueLink.value anziché this.props.value. Tutto qua!