Eine mögliche Verwendung bindActionCreators()
besteht darin, mehrere Aktionen als eine einzige Requisite zusammen "abzubilden".
Ein normaler Versand sieht folgendermaßen aus:
Ordnen Sie Requisiten einige allgemeine Benutzeraktionen zu.
const mapStateToProps = (state: IAppState) => {
return {
// map state here
}
}
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
userLogin: () => {
dispatch(login());
},
userEditEmail: () => {
dispatch(editEmail());
},
};
};
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
In größeren Projekten kann es sich unhandlich anfühlen, jeden Versand einzeln zuzuordnen. Wenn wir eine Reihe von Aktionen haben, die miteinander zusammenhängen, können wir diese Aktionen kombinieren . Zum Beispiel eine Benutzeraktionsdatei, die alle Arten von verschiedenen benutzerbezogenen Aktionen ausgeführt hat. Anstatt jede Aktion als separaten Versand aufzurufen, können wir bindActionCreators()
stattdessen verwenden dispatch
.
Mehrfachversand mit bindActionCreators ()
Importieren Sie alle zugehörigen Aktionen. Sie befinden sich wahrscheinlich alle in derselben Datei im Redux-Speicher
import * as allUserActions from "./store/actions/user";
Und jetzt, anstatt den Versand zu verwenden, verwenden Sie bindActionCreators ()
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
...bindActionCreators(allUserActions, dispatch);
},
};
};
export default connect(mapStateToProps, mapDispatchToProps,
(stateProps, dispatchProps, ownProps) => {
return {
...stateProps,
userAction: dispatchProps
ownProps,
}
})(MyComponent);
Jetzt kann ich die Requisite verwenden userAction
, um alle Aktionen in Ihrer Komponente aufzurufen.
IE:
userAction.login()
userAction.editEmail()
oder
this.props.userAction.login()
this.props.userAction.editEmail()
.
HINWEIS: Sie müssen die bindActionCreators () nicht einer einzelnen Requisite zuordnen. (Die zusätzliche => {return {}}
, die zugeordnet ist userAction
). Sie können auch bindActionCreators()
alle Aktionen einer einzelnen Datei als separate Requisiten zuordnen. Aber ich finde das verwirrend. Ich bevorzuge es, jeder Aktion oder "Aktionsgruppe" einen expliziten Namen zu geben. Ich nenne das auch gerne, ownProps
um genauer zu beschreiben, was diese "Kinderrequisiten" sind oder woher sie kommen. Bei Verwendung von Redux + React kann es etwas verwirrend werden, wo alle Requisiten geliefert werden. Je aussagekräftiger, desto besser.
#3
eine Abkürzung für Option#1
?