Одне з можливих застосувань - bindActionCreators()
це "складання" кількох дій разом як єдиного підпорядкування.
Звичайна відправка виглядає так:
Зв'яжіть пару типових дій користувача з реквізитом.
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);
У більших проектах картографування кожної диспетчерської окремо може відчувати себе громіздким. Якщо у нас є купа дій, пов’язаних між собою, ми можемо поєднати ці дії . Наприклад, файл дій користувача, який виконував всілякі різні дії, пов'язані з користувачем. Замість того, щоб називати кожну дію як окрему диспетчерську, яку ми можемо використовувати bindActionCreators()
замість dispatch
.
Кілька відправок за допомогою bindActionCreators ()
Імпортуйте всі пов’язані дії. Ймовірно, всі вони в одному файлі в магазині redux
import * as allUserActions from "./store/actions/user";
А тепер замість використання диспетчера використовуйте bindActionCreators ()
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
...bindActionCreators(allUserActions, dispatch);
},
};
};
export default connect(mapStateToProps, mapDispatchToProps,
(stateProps, dispatchProps, ownProps) => {
return {
...stateProps,
userAction: dispatchProps
ownProps,
}
})(MyComponent);
Тепер я можу використовувати проп userAction
для виклику всіх дій у вашому компоненті.
IE:
userAction.login()
userAction.editEmail()
або
this.props.userAction.login()
this.props.userAction.editEmail()
.
ПРИМІТКА. Вам не потрібно зіставляти bindActionCreators () з одним проп. (Додаткове, => {return {}}
що відображається userAction
). Ви також можете використовувати bindActionCreators()
для відображення всіх дій одного файлу як окремого реквізиту. Але я вважаю, що це може заплутати. Я вважаю за краще, щоб кожна дія або "група дій" отримувала явне ім'я. Я також хотів би назвати те, ownProps
щоб бути більш описовим щодо того, що таке "дитячий реквізит" або звідки вони беруться. При використанні Redux + React може статися трохи заплутаним, де поставляється весь реквізит, тому чим описовіше, тим краще.
#3
є скороченим варіантом#1
?