Um possível uso de bindActionCreators()
é "mapear" várias ações juntas como um único objeto.
Um envio normal se parece com isto:
Mapeie algumas ações comuns do usuário para adereços.
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);
Em projetos maiores, o mapeamento de cada despacho separadamente pode parecer complicado. Se tivermos um monte de ações relacionadas entre si, podemos combinar essas ações . Por exemplo, um arquivo de ação do usuário que executa todos os tipos de ações diferentes relacionadas ao usuário. Em vez de chamar cada ação como um despacho separado, podemos usar em bindActionCreators()
vez de dispatch
.
Vários despachos usando bindActionCreators ()
Importe todas as suas ações relacionadas. Eles provavelmente estão todos no mesmo arquivo na loja redux
import * as allUserActions from "./store/actions/user";
E agora, em vez 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);
Agora posso usar o prop userAction
para chamar todas as ações em seu componente.
IE:
userAction.login()
userAction.editEmail()
ou
this.props.userAction.login()
this.props.userAction.editEmail()
.
NOTA: Você não precisa mapear o bindActionCreators () para um único prop. (O adicional para o => {return {}}
qual mapeia userAction
). Você também pode usar bindActionCreators()
para mapear todas as ações de um único arquivo como adereços separados. Mas acho que fazer isso pode ser confuso. Prefiro que cada ação ou "grupo de ação" receba um nome explícito. Também gosto de nomear o ownProps
para ser mais descritivo sobre o que são esses "adereços infantis" ou de onde vêm. Ao usar Redux + React pode ficar um pouco confuso onde todos os adereços estão sendo fornecidos, então quanto mais descritivo, melhor.
#3
uma abreviação de opção#1
?