Một cách có thể sử dụng bindActionCreators()
là "ánh xạ" nhiều hành động với nhau như một chỗ dựa duy nhất.
Một công văn bình thường trông như thế này:
Ánh xạ một vài hành động phổ biến của người dùng với đạo cụ.
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);
Trong các dự án lớn hơn, việc lập bản đồ từng công văn riêng biệt có thể cảm thấy khó sử dụng. Nếu chúng ta có một loạt các hành động có liên quan đến nhau, chúng ta có thể kết hợp các hành động này . Ví dụ: một tệp hành động của người dùng đã thực hiện tất cả các loại hành động khác nhau liên quan đến người dùng. Thay vì gọi mỗi hành động là một công văn riêng biệt, chúng ta có thể sử dụng bindActionCreators()
thay thế dispatch
.
Nhiều công văn sử dụng bindActionCreators ()
Nhập tất cả các hành động liên quan của bạn. Chúng có thể nằm trong cùng một tệp trong cửa hàng redux
import * as allUserActions from "./store/actions/user";
Và bây giờ thay vì sử dụng công văn, hãy sử dụng bindActionCreators ()
const mapDispatchToProps = (dispatch: Dispatch) => {
return {
...bindActionCreators(allUserActions, dispatch);
},
};
};
export default connect(mapStateToProps, mapDispatchToProps,
(stateProps, dispatchProps, ownProps) => {
return {
...stateProps,
userAction: dispatchProps
ownProps,
}
})(MyComponent);
Bây giờ tôi có thể sử dụng phần mềm hỗ trợ userAction
để gọi tất cả các hành động trong thành phần của bạn.
IE:
userAction.login()
userAction.editEmail()
hoặc
this.props.userAction.login()
this.props.userAction.editEmail()
.
LƯU Ý: Bạn không phải ánh xạ bindActionCreators () với một hỗ trợ duy nhất. (Phần bổ sung => {return {}}
ánh xạ tới userAction
). Bạn cũng có thể sử dụng bindActionCreators()
để ánh xạ tất cả các hành động của một tệp dưới dạng các đạo cụ riêng biệt. Nhưng tôi thấy làm điều đó có thể khó hiểu. Tôi muốn đặt tên rõ ràng cho mỗi hành động hoặc "nhóm hành động". Tôi cũng muốn đặt tên ownProps
để mô tả nhiều hơn về những "đạo cụ trẻ em" này là gì hoặc chúng đến từ đâu. Khi sử dụng Redux + React, nó có thể hơi khó hiểu khi tất cả các đạo cụ đang được cung cấp, vì vậy càng có nhiều mô tả càng tốt.
#3
là cách viết tắt của quyền chọn#1
như thế nào?