Chociaż nie osobiście, że należy przechowywać lokalnych, stanowych komponentów tymczasowy (jak pola wprowadzania w toku) w scentralizowanej lokalizacji (jak w przypadku magazynu strumieniowego) w większości przypadków, tutaj może mieć sens, w zależności od tego, ile masz, szczególnie, że wygląda na to, że dane wejściowe mają już trochę interakcji/sprawdzania serwera wokół nich. Przeniesienie tego stanu do hierarchii komponentów lub do innej centralnej lokalizacji może bardzo pomóc w tym przypadku.
Jedną z alternatywnych idei z mojej głowy jest użycie mixinu w komponentach, które mogą wymagać zresetowania stanu lokalnego i zrobienia pewnego rodzaju wyzwalania zdarzeń itp., Aby to się stało. Na przykład, można użyć węzła EventEmitter
lub bibliotekę jak EventEmitter3 z wstawek tak (ostrzeżenie: nie testowane, może najlepiej to jako Pseudokod :)
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");
}
};
następnie można użyć go w składniki tak:
React.createClass({
mixins: [ResetStateMixin],
getInitialState: function() {
return { ... };
},
onResetEverything: function() {
// Call this to reset every "resettable" component
this.triggerReset();
}
});
Jest to bardzo prosty i bardzo ciężki w obsłudze (można zresetować tylko wszystkie komponenty, każdy składnik wywołuje replaceState(this.getInitialState())
, itp.), Ale problemy te można rozwiązać przez rozszerzenie nieco mixin (np. O wielu emitujących zdarzenia, pozwalając na komponent specyficzne implementacje resetState
i tak dalej).
Warto zauważyć, że musisz do użyć kontrolowanych danych wejściowych, aby to zadziałało; podczas gdy nie będziesz musiał wciskać swojego stanu aż do hierarchii komponentów, nadal będziesz chciał, aby wszystkie twoje dane wejściowe posiadały procedury obsługi value
i onChange
(itp.).
Powinieneś prawdopodobnie przekazać stan jako rekwizyty dla dzieci – David
Jeśli używasz parametr [kontrolowane komponenty] (https://facebook.gitub.io/react/docs/forms.html#controlled-components) wspomniany w dokumentach React i przechowuje stan wysoko w hierarchii, w której wywołujesz 'replaceState', możesz także "zresetować" stan formularza. –
@ssorallen Wejścia są osadzone w elementach, które mają swoją własną funkcjonalność i komunikację z serwerem. na przykład pole "username", które wykonuje własne sprawdzanie AJAX dla duplikatów, jako część sprawdzania * pola *. – fadedbee