Wie sollte ich onClick Aktion in meiner Komponente reactive + Redux aufbauen

8

Ich habe viele Tutorials und Fragen zu Stack durchgemacht, aber ich kann keine Lösung finden. Ich lerne gerade React / Redux und versuche OnClick Action zu erstellen. Ich habe den folgenden Fehler "Maximum call stack size exceeded error" . Ich habe das, weil ich eine Funktion rendere, die meinen Zustand unendlich ändert. Ich versuche, mit meinem <button onClick={DisplayTable(click)}>cool</button> anders umzugehen, aber nichts scheint zu funktionieren. Ich weiß auch, dass meine Aktion und ich denke, dass meine Reduzierungen richtig funktionieren, da, wenn ich meine Aktion über die Konsole ausschicke: $r.store.dispatch({type: 'SET_TABLE_DATA'}); , mein Status wird korrekt aktualisiert.

Irgendwelche Ratschläge?

Hier ist meine Aktion:

%Vor%

Hier ist mein Reduzierer:

%Vor%

und hier ist meine Komponente:

%Vor%

Ich weiß auch, dass ich meinen Reducer so bauen soll, dass mein Zustand ohne Mutation aktualisiert werden soll, aber ich behalte das für später! :)

danke.

    
Simon Breton 25.07.2016, 17:55
quelle

2 Antworten

6
___ tag123reactjs ___ React ist eine JavaScript-Bibliothek zum Erstellen von Benutzeroberflächen. Es verwendet ein deklaratives Paradigma und zielt darauf ab, sowohl effizient als auch flexibel zu sein. ___ qstnhdr ___ Wie sollte ich onClick Aktion in meiner Komponente reactive + Redux aufbauen ___ qstntxt ___

Ich habe viele Tutorials und Fragen zu Stack durchgemacht, aber ich kann keine Lösung finden. Ich lerne gerade React / Redux und versuche OnClick Action zu erstellen. Ich habe den folgenden Fehler onClick . Ich habe das, weil ich eine Funktion rendere, die meinen Zustand unendlich ändert. Ich versuche, mit meinem render() anders umzugehen, aber nichts scheint zu funktionieren. Ich weiß auch, dass meine Aktion und ich denke, dass meine Reduzierungen richtig funktionieren, da, wenn ich meine Aktion über die Konsole ausschicke: DisplayTable , mein Status wird korrekt aktualisiert.

Irgendwelche Ratschläge?

Hier ist meine Aktion:

%Vor%

Hier ist mein Reduzierer:

%Vor%

und hier ist meine Komponente:

%Vor%

Ich weiß auch, dass ich meinen Reducer so bauen soll, dass mein Zustand ohne Mutation aktualisiert werden soll, aber ich behalte das für später! :)

danke.

    
___ answer38574890 ___

Ein paar Tipps, keine komplette Lösung, denn das würde Ihnen nicht helfen:

Ihre Aktion und Reduzierung sehen gut aus. Sie übergeben die Eigenschaft click , die nicht im Reducer verwendet wird. Vielleicht werden Sie es in Zukunft verwenden, aber für den Moment ist es nutzlos.

Eine React-Komponentenfunktion nimmt Requisiten als Argument:

%Vor%

render() wird normalerweise nicht benötigt. Verwenden Sie stattdessen einfache Objekte:

%Vor%

Sie können dann auf die Funktion von Requisiten zugreifen:

%Vor%

Beachten Sie: DisplayTable übernimmt eine Funktion!

Auch der Status, den Sie im Reduzierer definiert haben, hat keine Eigenschaft namens click , sondern eine Zahl (siehe oben die korrekte mapStateToProps-Funktion)

    
___ tag123redux ___ Redux ist ein vorhersagbarer Statuscontainer für JavaScript-Anwendungen, die auf dem Flux-Designmuster basieren. ___ answer38575576 ​​___

Die angegebene Antwort erklärt nicht wirklich warum Ihr Code nicht funktionierte, also dachte ich, ich würde das weiter ausführen.

Ihr Problem besteht darin, dass Sie den Funktionsaufruf-Stack, der häufiger als Endlosschleife bezeichnet wird, überschreiten. Der Grund dafür ist, dass Sie keine Funktion an das onClick -Attribut Ihrer Schaltfläche übergeben, sondern eine Funktion aufrufen und stattdessen ihren Rückgabewert übergeben. So passiert folgendes Szenario:

  • React-Komponente ist an das DOM
  • angehängt
  • click heißt
  • Die Funktion %code% wird aufgerufen, die eine Aktualisierung an den Speicher
  • sendet
  • Der Store wird aktualisiert und übergibt neue Requisiten an die React-Komponente
  • %code% wird erneut aufgerufen
  • %code% wird erneut aufgerufen

... und so weiter.

Stattdessen sollten Sie die Funktion an das %code% -Attribut der Schaltfläche übergeben. Ihre Komponente sollte also so aussehen:

%Vor%

In diesem obigen Codeausschnitt habe ich Ihre Property %code% entfernt, weil sie nicht so aussieht, als ob Sie sie überhaupt verwenden würden (angesichts des Codes, den Sie im OP veröffentlicht haben).

    
___
Michael Parker 25.07.2016, 19:02
quelle
2

Ein paar Tipps, keine komplette Lösung, denn das würde Ihnen nicht helfen:

Ihre Aktion und Reduzierung sehen gut aus. Sie übergeben die Eigenschaft click , die nicht im Reducer verwendet wird. Vielleicht werden Sie es in Zukunft verwenden, aber für den Moment ist es nutzlos.

Eine React-Komponentenfunktion nimmt Requisiten als Argument:

%Vor%

mapDispatchToProps wird normalerweise nicht benötigt. Verwenden Sie stattdessen einfache Objekte:

%Vor%

Sie können dann auf die Funktion von Requisiten zugreifen:

%Vor%

Beachten Sie: onClick übernimmt eine Funktion!

Auch der Status, den Sie im Reduzierer definiert haben, hat keine Eigenschaft namens click , sondern eine Zahl (siehe oben die korrekte mapStateToProps-Funktion)

    
Herku 25.07.2016 18:21
quelle

Tags und Links