Jednym z możliwych zastosowań bindActionCreators()
jest „mapowanie” wielu działań razem jako jednego rekwizytu.
Normalna wysyłka wygląda następująco:
Zamapuj kilka typowych działań użytkownika na rekwizyty.
const mapStateToProps = (state: IAppState) => {
return {
}
}
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
userLogin: () => {
dispatch(login());
},
userEditEmail: () => {
dispatch(editEmail());
},
};
};
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
W większych projektach mapowanie każdej wysyłki osobno może wydawać się nieporęczne. Jeśli mamy kilka działań, które są ze sobą powiązane, możemy je połączyć . Na przykład plik akcji użytkownika, który wykonał wszystkie rodzaje różnych działań związanych z użytkownikiem. Zamiast nazywać każdą akcję jako oddzielną wysyłkę, możemy użyć bindActionCreators()
zamiast dispatch
.
Wiele wysyłek za pomocą bindActionCreators ()
Zaimportuj wszystkie powiązane działania. Prawdopodobnie wszystkie znajdują się w tym samym pliku w sklepie Redux
import * as allUserActions from "./store/actions/user";
A teraz zamiast korzystać z wysyłki użyj bindActionCreators ()
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
...bindActionCreators(allUserActions, dispatch);
},
};
};
export default connect(mapStateToProps, mapDispatchToProps,
(stateProps, dispatchProps, ownProps) => {
return {
...stateProps,
userAction: dispatchProps
ownProps,
}
})(MyComponent);
Teraz mogę użyć rekwizytu, userAction
aby wywołać wszystkie akcje w twoim komponencie.
IE:
userAction.login()
userAction.editEmail()
lub
this.props.userAction.login()
this.props.userAction.editEmail()
.
UWAGA: Nie musisz mapować bindActionCreators () do pojedynczego elementu. (Dodatkowy => {return {}}
, do którego mapuje się userAction
). Możesz także użyć bindActionCreators()
do odwzorowania wszystkich działań pojedynczego pliku jako osobnych właściwości. Ale uważam, że może to być mylące. Wolę, aby każda akcja lub „grupa akcji” miała nadaną jawną nazwę. Lubię też nazywać te, ownProps
aby bardziej opisać, czym są te „dziecięce rekwizyty” lub skąd pochodzą. Podczas korzystania z Redux + React może być nieco zagmatwane, gdzie dostarczane są wszystkie rekwizyty, więc im bardziej opisowe, tym lepiej.
#3
jest skrótem opcji#1
?