2016-09-15 2 views
3

Ich habe eine Anwendung erstellt, wo Benutzer Informationen über Filme mit react und redux suchen können. Während der Suche kann der Benutzer einen Filter anwenden (zB Dauer). Ich möchte, dass dieser Filter aktiv ist, bis der Benutzer die Auswahl aufhebt, selbst nachdem der Benutzer die Seite neu geladen hat.Persist Benutzeraktivität im Zustand nach dem erneuten Laden

Problem: Current Szenario Benutzer anwenden Filteranwendung wird ein Ereignis auslösen und die Filterinformationen im Redux-Zustand speichern.

Aber sobald Benutzer aktualisieren die Seite Informationen über den Filter verloren gehen.

Lösung versucht: Ich habe eine Lösung mit Sitzungsspeicher und lokalen Speicher versucht, aber ich bin nicht mit der Lösung überzeugt.

Es wäre großartig, wenn jemand bessere Möglichkeiten zur Lösung dieses Problems zeigen könnte, falls verfügbar.

+2

Was war das Problem mit der lokalen Speicherlösung? Der Filter muss *** irgendwo *** gespeichert werden, und das irgendwo wird entweder der Benutzer Browser oder Ihr Server sein – Tyrsius

+0

Wenn ich lokalen Speicher verwendet Filter-Informationen waren immer noch im Browser selbst nach dem ich es geschlossen habe. Um zu vermeiden, dass ich Session-Speicher verwendet habe. Eine weitere Sache, die ich bei der Verwendung von Sitzungsspeicher nicht falsch fand, aber ich möchte wissen, ob es eine bessere Lösung gibt. – cauchy

+3

Wenn Sie nicht wollen, dass es nach dem Schließen des Browsers gespeichert wird, dann sind Sitzungsspeicher oder ein Sitzungscookie Ihre * einzigen * Lösungen. Alles andere würde einen Browser überleben – Tyrsius

Antwort

3

Für einige einfache Zustände, wie den aktuellen Wert des Filters, wäre es besser, den Standort zu verwenden.

Zum Beispiel haben Sie die folgende Seite: http://example.com/users.
Dann können Sie Filter wie folgt erhalten: http://example.com/users?group=admin.

Der Vorteil dieses Ansatzes ist einfach: Sie sagen explizit, den tatsächlichen Status der Seite zu verwenden, er kann das kopieren, Lesezeichen speichern oder an jemand anderen senden.

dieses Reagieren Code zu erreichen ist, können Sie folgendes tun (ich nehme an, dass Sie in Ihrem App React-Router):

class UsersPage extends React.Component { 

    // should be called somewhere in onClick 
    filterUserGroup(groupName) { 
    this.props.router.push({ 
     pathname: this.props.location.pathname, 
     query: { 
      group: groupName 
     } 
    }); 
    } 

    componentWillReceiveProps(nextProps) { 
    if(nextProps.location !== this.props.location) { 
     //filter was changed, you can apply new filter value 
     this.setState({ 
      selectedGroup: nextProps.location.query.group 
     }); 
    } 
    } 

} 
Verwandte Themen