2016-10-25 1 views
0

Ich habe zwei Komponenten für meine Suchfunktion, eine für die Auswahl der Suchfilter und eine für die Suchanfrage. Jedes Mal, wenn ich einen Filter auswähle, wird der Status neu geladen, daher kann ich nicht mehr als einen Filter auswählen. Gibt es eine Möglichkeit, die Suchkomponente aufzurufen und meine Suchfilterkomponente ihren Status beizubehalten?Wie man den Zustand in der Komponente nach dem Aufruf einer anderen Komponente hält

In meiner searchfilters Komponente Ich habe diese:

let state = _.extend({}, this.state); 
state.filters = this.toggleFilter(filterObj, state.filters); 
this.setState(state); 
this.props.searchWithFilters(state.filters); 

In meiner Suchkomponente ich habe:

<SearchFilters searchWithFilters={this.searchWithFilters.bind(this)} /> 

Und ich habe diese Methode:

searchWithFilters(filters) { 
let state = _.extend({}, this.state); 
state.filters = filters; 
this.setState(state); 
this.props.search(this.state); 
} 

Antwort

0

können Sie verwenden nur den Zustand Ihrer SearchComponent der Filter zu speichern, anstatt den Zustand SearchFilters zu verwenden. Die toggleFilter Methode wäre in der SearchComponent auch und es würde es als Prop auch senden (oder vielleicht könnten Sie es in searchWithFilters tun, wenn Sie sie immer beide zusammen nennen). Schließlich müssten Sie die Filter als Eigenschaft an die Komponente SearchFilters senden.

<SearchFilters filters={this.state.filters} 
searchWithFilters={this.searchWithFilters.bind(this)} /> 

Dann searchWithFilters erhalten würde nur den neuen Filter und fügen Sie sie in den Zustand des SearchComponent. Es könnte so etwas wie sein:

Sie könnten sie auch in redux speichern, was eine gute Wahl sein könnte.

+0

Danke für Ihre Antwort! Kann ich den Status von Suchfiltern an die Suchkomponente übergeben? –

+0

Sie können natürlich, aber die Art und Weise, die ich es Sie nicht den Status von SearchFilters verwenden würde, würde die Filter Prop wäre genug, wenn Sie die Filter im SearchComponent-Zustand mit SearchWithFilters oder einer anderen Callback-Methode aktualisieren. –

+0

Ich habe meine Antwort bearbeitet, um zu zeigen, wie searchWithFilters sein kann. Er nimmt den neuen Filter und fügt ihn dem Status hinzu. Verwenden Sie in der SearchFilters-Komponente einfach this.props.filters anstelle von this.state.filters. –

0

Sie sind nur Überschreiben Sie Ihre Filter jedes Mal, wenn Sie also die vorherigen Filter verfolgen müssen, würde ich sie in einem Array speichern.

searchWithFilters(filters) { 
    let state = _.extend({}, this.state); 
    state.filters = []; 
    state.filters.push(filters); 
    this.setState(state); 
    this.props.search(this.state); 
    } 
+0

Danke für Ihre Antwort, in meinem Zustand habe ich bereits Filter als ein Array definiert. Das sollte auch den Trick richtig machen? –

Verwandte Themen