Was ist mapDispatchToProps?
Ich war das Lesen der Dokumentation für die Redux-Bibliothek und es ist dieses Beispiel,
Neben der Lektüre der state -, container-Komponenten können Versand-Aktionen. In ähnlicher Weise können Sie eine Funktion definieren, die aufgerufen
mapDispatchToProps()
erhält, dass die dispatch () - Methode und gibt callback-Requisiten, die Sie wollen, um zu injizieren, in die Präsentations-Komponente.
Dies eigentlich keinen Sinn macht. Warum brauchen Sie mapDispatchToProps
wenn Sie bereits mapStateToProps
?
Bieten Sie auch dieses praktische Beispiel:
const mapDispatchToProps = (dispatch) => {
return {
onTodoClick: (id) => {
dispatch(toggleTodo(id))
}
}
}
Kann mir bitte jemand erklären, in einer für Laien, was diese Funktion ist und warum es sinnvoll ist?
InformationsquelleAutor Code Whisperer | 2016-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich fühle mich wie keine Antworten haben, kristallisiert warum
mapDispatchToProps
nützlich ist.Diese kann eigentlich nur beantwortet werden im Kontext der
container-component
Muster, die fand ich am besten verstanden, indem zuerst Lesen:https://medium.com/@learnreact/container-components-c0e67432e005#.1a9j3w1jl
dann
http://redux.js.org/docs/basics/UsageWithReact.html
In einer nussschale, Ihre
components
werden sollen, betrifft ausschließlich die Anzeige von Sachen. Die einzige Ort, wo Sie sollen, um Informationen zu erhalten, ist Ihre Requisiten.Getrennt von "anzeigen stuff" (Komponenten):
Das ist das, was
containers
sind.Daher ein "gut entwickelt"
component
im Muster wie folgt Aussehen:Sehen, wie diese Komponente bekommt die info es zeigt von Requisiten (die kamen aus der redux-Shop über
mapStateToProps
) und es bekommt auch seine action-Funktion aus seiner Requisiten:sendTheAlert()
.Dort
mapDispatchToProps
kommt: in den entsprechendencontainer
Ich Frage mich, wenn Sie sehen können, jetzt, dass es die
container
[1], der weiß, dass über redux und Versand und Lager und Staats-und ... Zeug.Den
component
im patternFancyAlerter
, die das rendering braucht nicht zu wissen, über jede von dem Zeug: es bekommt seine Methode zu nennen, beionClick
von der Taste, über Ihre Requisiten....
mapDispatchToProps
War das nützlich, bedeutet, dass redux bietet, lassen sich die container leicht passieren, dass die Funktion in dem umschlossenen Bauteil auf seine Requisiten.All dies sieht sehr wie die todo-Beispiel in Google docs, und eine andere Antwort hier, aber ich habe versucht zu wirken in dem Licht das Muster zu betonen warum.
(Hinweis: Sie können nicht
mapStateToProps
für den gleichen Zweck wiemapDispatchToProps
für den Grund, dass Sie nicht haben, Zugang zudispatch
innenmapStateToProp
. Also konnten Sie nicht nutzenmapStateToProps
zu geben, die gewickelten Komponente eine Methode, die verwendetdispatch
.Ich weiß nicht, warum Sie wählte, um Sie zu brechen in beiden mapping-Funktionen - es könnte aufgeräumter zu haben
mapToProps(state, dispatch, props)
D. H. eine Funktion, beides zu tun![1] Beachten Sie, dass ich mich bewusst explizit benannt container
FancyButtonContainer
zu markieren, dass es ist ein "Ding" - die Identität (und damit die Existenz!) der container als "ein Ding" ist manchmal verloren in der Kurzformexport default connect(...)
syntax, die angezeigt wird in den meisten Beispielen
Keine. Es geht um gutes design. Wenn Sie gepaart Ihre Komponente zu speichern.Versand, dann, wenn Sie sich entscheiden, Faktor redux, oder es benutzen wollen, einen Ort, der nicht redxu basiert (oder einige andere Sache, die ich kann nicht denken, jetzt) stecken Sie mit einer Menge änderungen. Ihre Frage vergröbert zu "warum tun wir uns die Mühe mit dem 'good design Praxis" - Sie erhalten die gleiche Funktionalität, jedoch geben Sie den code". mapDispatchToProps zur Verfügung steht, damit Sie schreiben können, gut gestaltet, sauber entkoppelten Komponenten.
Was ich wirklich nicht bekommen, hier ist, was Sie ist:
ALERT_ACTION
ist, dass die action-Funktion oder dietype
zurückgegeben wird aus dem action-Funktion? :/ also baffedStreng, ALERT_ACTION hat nichts zu tun mit dieser Frage. Es ist ein gültiges argument zu versenden, und als es passiert, ist das in meinen code, er kommt aus einem "action-generator", die ein Objekt zurückgibt, dass die Versendung verwendet wird, wie beschrieben, redux.js.org/docs/api/Store.html#dispatch. Der wichtigste Punkt hier ist, dass, wie zu nennen, der Versand ist beschrieben in den Behälter und ging in die auf die Komponenten Requisiten. Die Komponente wird nur Funktionen aus Ihren Requisiten, nirgendwo sonst. Der "falsche" Weg, es zu tun, in diesem Muster wäre, um zu übergeben, den Versand an die Komponente und machen das gleiche Aufruf in der Komponente.
Wenn Sie mehrere Maßnahmen betraut, die übergeben werden müssen, um untergeordnete Komponente als Requisiten, eine alternative zum wickeln Sie Sie mit bindActionCreators innen mapDispatchToProps (siehe redux.js.org/docs/api/bindActionCreators.html); eine andere alternative ist, einfach ein Objekt der Handlung Schöpfer zu verbinden(), z.B. connect(mapStateToProps, {actioncreators}),reagieren-redux wird, wickeln Sie Sie mit dispatch() für Sie.
InformationsquelleAutor GreenAsJade
Es ist im Grunde eine Kurzform. Also anstatt zu schreiben:
Verwenden Sie mapDispatchToProps, wie gezeigt, in Ihrem Beispiel-code, und dann anderswo schreiben:
oder mehr wahrscheinlich, dass in diesem Fall hätten Sie, wie die event-handler:
Gibt es eine hilfreiche video von Dan Abramov auf dieses hier: https://egghead.io/lessons/javascript-redux-generating-containers-with-connect-from-react-redux-visibletodolist
Wenn Sie nicht Ihre eigenen
mapDispatch
Funktion, Redux einen Standard. Standard -mapDispatch
Funktion nimmt einfach diedispatch
Funktion Referenz, und gibt es für Sie alsthis.props.dispatch
.Die Versandart wird nach unten weitergegeben, indem die Anbieter
InformationsquelleAutor hamstu
mapStateToProps()
ist ein Dienstprogramm, das hilft, die Komponente aktualisiert ist-Zustand(die aktualisiert wird, von einigen anderen Komponenten),mapDispatchToProps()
ist ein Dienstprogramm, die helfen, Ihre Komponente zu feuern eine action-Ereignis (Versand-Aktion verursachen, ändern des Anwendungsstatus)InformationsquelleAutor Saisurya Kattamuri
mapStateToProps
,mapDispatchToProps
undconnect
ausreact-redux
Bibliothek bietet eine bequeme Möglichkeit zum Zugriff auf Ihrestate
unddispatch
Funktion von Ihrem Geschäft. Also im Grunde die Verbindung ist eine höhere order-Komponente, Sie können auch etwas wie ein wrapper, wenn dies Sinn für Sie machen. Also jedes mal, wenn Ihrstate
geändertmapStateToProps
werden aufgerufen, sich mit Ihrem neuenstate
und später als Sieprops
update-Komponente Rendern-Funktion zum Rendern der Komponente im browser.mapDispatchToProps
auch speichert Schlüssel-Werte auf dieprops
der Komponente, in der Regel nehmen Sie eine form, eine Funktion. In einer solchen Art und Weise, die Sie auslösen könnenstate
ändern, die von der KomponenteonClick
,onChange
Veranstaltungen.Aus docs:
Stellen Sie außerdem sicher, dass Sie vertraut sind mit Reagieren zustandslose Funktionen und Higher-Order Components
Es könnte sein, in Bezug auf Veranstaltung dispatch ist nur Funktion und der einzige Weg, um Ihre Anwendung ändern Zustand. mapStateToProps ist eine Möglichkeit zur Bereitstellung von dispatch - Funktion des store zu Reagieren Komponente. Beachten Sie auch, dass die Verbindung ist nicht Teil der redux in der Tat ist es nur ein Dienstprogramm und Vorlagen reduzieren Bibliothek mit dem Namen reagieren-redux arbeiten mit reagieren und redux. Sie können dasselbe Ergebnis erzielen, ohne reagieren-redux wenn Sie Ihre store von der Wurzel reagieren Komponente zu den Kindern.
InformationsquelleAutor Vlad Filimon
mapStateToProps
erhält diestate
undprops
und ermöglicht das extrahieren von Requisiten aus dem Staat zu übergeben der Komponente.mapDispatchToProps
erhältdispatch
undprops
und ist dafür gedacht, Sie zu binden action Schöpfer zu versenden, so dass, wenn Sie ausführen, die resultierende Funktion die Aktion wird ausgelöst.Ich finde das nur müssen Sie tun
dispatch(actionCreator())
innerhalb Ihrer Komponente, so dass es ein bisschen leichter zu Lesen.https://github.com/reactjs/react-redux/blob/master/docs/api.md#arguments
dispatch
Methode? Wo kommt es her?oh. Versand grundsätzlich macht die Aktion start der redux/flux unidirektionalen Fluss. Die anderen Antworten scheinen beantwortet deine Frage besser als diese.
Auch die Versand-Methode stammt aus der Verbesserung durch die
<Provider/>
selbst. Es hat seine eigene high-order-Komponente Magie, um zu garantieren, dass die Versand ist verfügbar in der Kinder-Komponenten.InformationsquelleAutor Harry Moreno
Nun angenommen, es ist eine Aktion für redux:
Wenn Sie importieren,
Als Funktion name sagt
mapDispatchToProps()
, anzeigendispatch
Aktion Requisiten(unsere Komponente Requisiten)Also prop
onTodoClick
ist ein Schlüssel zumapDispatchToProps
Funktion, die Delegierten furthere Versand AktionaddTodo
.Auch, wenn Sie möchten, kürzen Sie den code und manuelle bypass-Umsetzung ist, dann können Sie dies tun,
Was genau bedeutet
InformationsquelleAutor Meet Zaveri