Un posible uso de bindActionCreators()
es "mapear" múltiples acciones juntas como un solo accesorio.
Un envío normal se ve así:
Asigne un par de acciones de usuario comunes a los accesorios.
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);
En proyectos más grandes, el mapeo de cada envío por separado puede resultar difícil de manejar. Si tenemos un montón de acciones relacionadas entre sí, podemos combinar estas acciones . Por ejemplo, un archivo de acción de usuario que realizó todo tipo de acciones relacionadas con el usuario. En lugar de llamar a cada acción como un envío separado, podemos usar en bindActionCreators()
lugar de dispatch
.
Múltiples despachos usando bindActionCreators ()
Importe todas sus acciones relacionadas. Es probable que estén todos en el mismo archivo en la tienda redux.
import * as allUserActions from "./store/actions/user";
Y ahora, en lugar de usar dispatch, use bindActionCreators ()
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
...bindActionCreators(allUserActions, dispatch);
},
};
};
export default connect(mapStateToProps, mapDispatchToProps,
(stateProps, dispatchProps, ownProps) => {
return {
...stateProps,
userAction: dispatchProps
ownProps,
}
})(MyComponent);
Ahora puedo usar el accesorio userAction
para llamar a todas las acciones en su componente.
IE:
userAction.login()
userAction.editEmail()
o
this.props.userAction.login()
this.props.userAction.editEmail()
.
NOTA: No es necesario que asigne bindActionCreators () a un solo accesorio. (El adicional al => {return {}}
que se asigna userAction
). También puede usar bindActionCreators()
para mapear todas las acciones de un solo archivo como accesorios separados. Pero encuentro que hacer eso puede ser confuso. Prefiero que cada acción o "grupo de acciones" reciba un nombre explícito. También me gusta nombrar el ownProps
para ser más descriptivo acerca de qué son estos "accesorios para niños" o de dónde vienen. Cuando se usa Redux + React, puede resultar un poco confuso dónde se proporcionan todos los accesorios, por lo que cuanto más descriptivos, mejor.
#3
una abreviatura de la opción#1
?