Come posso cambiare lo stato di un componente React dal mio vecchio pacchetto legacy jQuery ?Cambia stato del componente React dal vecchio Javascript esterno?
Ho un componente come questo:
var AComponent = React.createClass({
getInitialState: function() {
return { ids: [] }
},
render: function() {
...
},
onButtonClick: function() {
ids.splice(…); // remove the last id
}
});
Quando accade qualcosa di speciale nel vecchio codice jQuery zuppa, vorrei spingere un id a AComponent.state.ids
. Come lo posso fare?
Una soluzione "ovvia" è un anti-pattern; qui è:
var componentInstance = AComtonent({});
React.renderComponent(componentInstance, document.getElementById(...));
// Somewhere else, in the jQuery soup. Something special happens:
componentIntance.state.ids.push(1234);
componentIntance.setState(componentInstance.state);
Questo è un antipattern, secondo this email from a Facebook developer, perché scrive che componentInstance
potrebbe essere distrutta da reagire.
Penso che per progettazione si supponga che una mutazione di stato sia interna, quindi se si desidera cambiarla dall'esterno, è necessario utilizzare un oggetto di scena. Il che significa dividere il componente in due nel tuo caso. IE: spostando il tuo stato su qualcosa che comprende il grilletto della tua jquery e quindi risolvendo il tuo problema. –
@plus Buono a sapersi che la mutazione di stato dovrebbe essere solo interna. Non ho capito cosa intendi con * "che comprende il tuo grilletto jquery" * - intendevi che lo stato dovrebbe essere posizionato all'esterno del componente e passarei i mutatori di stato come oggetti di scena al componente? (Come nella risposta di kulesa.) – KajMagnus