Ich habe CompetitionSection, die alle Wettbewerbe aus der Datenbank wiederholt. Klickt der Nutzer auf einen, wird er auf eine Wettbewerbsseite umgeleitet, lädt eine Sekunde lang und rendert die Seite mit allen darin enthaltenen Details. So weit, ist es gut.Wie Requisiten mit React/Redux zu aktualisieren, wenn Benutzer einen Container eingibt
Aber wenn Benutzer zurück zur Wettbewerbsabteilung gehen und dann auf den zweiten Wettbewerb klicken, lädt sie sofort den vorherigen Wettbewerb, 0 Ladezeit.
Aus meiner Sicht ist der Fehler, dass die Requisiten der Komponente nicht aktualisiert werden, wenn ich die Komponente rendern (ab dem zweiten Mal). Es ist kein Router-Problem, das war mein erster Instinkt, weil ich sehe, dass sich die route.params entsprechend ändert, aber die Aktionen, die ich zur Änderung der Requisiten absende, werden nicht ausgeführt. Hier ist ein bisschen Code dieser Komponente.
class CompetitionPage extends React.Component {
componentWillMount() {
let id = getIdByName(this.props.params.shortname)
this.props.dispatch(getCompAction(id));
this.props.dispatch(getCompMatches(id));
this.props.dispatch(getCompParticipants(id));
this.props.dispatch(getCompBracket(id));
}
render() {
let { comp, compMatches, compBracket, compParticipants } = this.props
...
Ich habe jede Lifecycle-Methode, die ich kenne, ausprobiert. Component Will/Did Mount, Komponente Will/Did update und ich habe shouldUpdate auf true gesetzt und den Trick nicht gemacht. Wie ich es verstehe, wird das Problem mit einer Lifecycle-Methode gelöst werden, um die Aktionen jedes Mal zu verteilen, wenn ein Benutzer Wettbewerbs-Seite eingibt und nicht nur zum ersten Mal. Mir gehen hier die Optionen aus, so dass jede Hilfe geschätzt wird.
HINWEIS: Ich bin ein Neuling bei React/Redux, also weiß ich, es gibt ein paar Dinge dort sind Anti-Pattern/schlecht gemacht.
UPDATE: Hinzugefügt CompetitionsSection
class CompetitionsSection extends React.Component {
render() {
const {competitions} = this.props;
return (
...
{ Object.keys(competitions).map(function(comp, i) {
return (
<div key={i} className={competitions[comp].status ===
undefined? 'hide-it':'col-xs-12 col-md-6'}>
...
<Link to={"/competitions/"+competitions[comp].shortName}>
<RaisedButton label="Ver Torneo" primary={true} />
</Link>
...
Können Sie nach Ihren 'CompetitionSection' Code?Meine erste Vermutung ist, dass Ihre 'CompetitionPage' nur aktualisiert wird, nicht unmounting/remount, aber ich müsste den Code sehen, um sicher zu sein – taylorc93
Haben Sie' componentWillReceiveProps (nextProps) ''? Vielleicht gibt es hier kein Update ... – Brejk
@ taylorc93 wie kann man sicherstellen, dass 'CompetitionPage' die Komponente unmount/remound macht? Ich werde die Frage aktualisieren und weitere Code-Bits hinzufügen. – user3889291