[英]How can I combine 2 uses of connect()?
我在组件上两次调用了connect()
,并且代码审查员要求我将其设置为一个。
我有这个按预期工作:
export default compose(
connect(store => ({
softlayerAccountId: store.global.softlayerAccountId,
})),
connect(
({ shipments }) => ({
pagination: shipments.pagination,
isFiltersModalOpened: shipments.filtersModalOpened,
filters: shipments.filters,
}),
dispatch => ({...}),
),
)(GetShipments);
他们希望我做这样的事情:
export default compose(
connect(
store => ({
softlayerAccountId: store.global.softlayerAccountId,
}),
({ shipments }) => ({
pagination: shipments.pagination,
isFiltersModalOpened: shipments.filtersModalOpened,
filters: shipments.filters,
}),
dispatch => ({...}),
),
)(GetShipments);
但是我得到这个错误:
未捕获的TypeError:无法读取未定义的属性“分页”
或这个:
export default compose(
connect(
({ shipments }, store) => ({
softlayerAccountId: store.global.softlayerAccountId,
pagination: shipments.pagination,
isFiltersModalOpened: shipments.filtersModalOpened,
filters: shipments.filters,
}),
dispatch => ({...}),
),
)(GetShipments);
但是我得到这个:
未捕获的TypeError:无法读取未定义的属性'softlayerAccountId'
有任何想法吗?
你做错了。 connect()
有两个参数: mapStateToProps
回调和mapDispatchToProps
。 在您的第二个变体中,您尝试传递3个参数,其中第二个实际上也指向store(因此,就像您将mapStateToProps
到mapDispatchToProps
位置)。
您需要它具有2个参数:
export default compose(
connect(
({global: {softlayerAccountId}, shipments }) => ({
softlayerAccountId: store.global.softlayerAccountId,
pagination: shipments.pagination,
isFiltersModalOpened: shipments.filtersModalOpened,
filters: shipments.filters,
}),
dispatch => ({...}),
)(GetShipments);
为什么第三个变体不起作用? 相同的原因:您试图将参数放在无法工作的地方。
({ shipments }, store) => ({
在这里,您声明带有两个参数的函数。 首先是解构,其次才传入。但是connect
将仅传递store
单个参数。 它不会仅因为您期望而多次通过store
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.