Mentre io personalmente non credo che si dovrebbe conservare locali, statali componente intermedia (come caselle di input in corso) in una posizione centralizzata (come un flux store) nella maggior parte dei casi, qui può avere senso, a seconda di quante ne hai, specialmente dal momento che sembra che gli input abbiano già qualche interazione/convalida del server attorno a loro. Spingere questo stato nella gerarchia dei componenti o in un'altra posizione centrale può essere di grande aiuto in questo caso.
Un'idea alternativa che mi viene in mente è quella di utilizzare un mixin in componenti che potrebbero aver bisogno di reimpostare lo stato locale, e fare qualche tipo di attivazione di eventi, ecc. Per farlo accadere. Ad esempio, è possibile utilizzare il nodo del EventEmitter
o una libreria come EventEmitter3 con un mixin come questo (attenzione: non testato, forse meglio questo come pseudocodice :)
var myEmitter = new EventEmitter(); // or whatever
var ResetStateMixin = {
componentWillMount: function() {
myEmitter.on("reset", this._resetState);
},
componentWillUnmount: function() {
myEmitter.off("reset", this._resetState);
},
_resetState: function() {
this.replaceState(this.getInitialState());
},
triggerReset: function() {
myEmitter.emit("reset");
}
};
allora si potrebbe utilizzare in componenti in questo modo:
React.createClass({
mixins: [ResetStateMixin],
getInitialState: function() {
return { ... };
},
onResetEverything: function() {
// Call this to reset every "resettable" component
this.triggerReset();
}
});
Questo è molto semplice e piuttosto pesante mano (è possibile ripristinare solo tutti i componenti, tutti i componenti chiama replaceState(this.getInitialState())
, ecc), ma questi problemi potrebbe essere risolto estendendo mixin un po '(per esempio avere più emettitori di eventi, permettendo componente specifiche implementazioni resetState
e così via).
Vale la pena notare che l'utente do deve utilizzare gli input controllati affinché funzioni; anche se non è necessario spingere lo stato fino in cima alla gerarchia dei componenti, sarà comunque necessario che tutti i tuoi input abbiano i gestori value
e onChange
(ecc.).
Si dovrebbe probabilmente passare lo stato come oggetti di scena ai bambini – David
Se si utilizza il paradigma [componenti controllati] (https://facebook.github.io/react/docs/forms.html#controlled-components) menzionato nei documenti di React e memorizza lo stato in alto nella gerarchia in cui stai chiamando 'replaceState', puoi "resettare" anche lo stato del modulo. –
@ssorallen Gli input sono incorporati in elementi che hanno le loro funzionalità e comunicazioni con il server. per esempio. un campo "username" che esegue il controllo AJAX per i duplicati, come parte della convalida * field *. – fadedbee