Я дважды звонил 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);
Но я получаю такую ошибку:
Uncaught TypeError: Cannot read property 'pagination' of undefined
Или это:
export default compose(
connect(
({ shipments }, store) => ({
softlayerAccountId: store.global.softlayerAccountId,
pagination: shipments.pagination,
isFiltersModalOpened: shipments.filtersModalOpened,
filters: shipments.filters,
}),
dispatch => ({...}),
),
)(GetShipments);
Но я понял:
Uncaught TypeError: Cannot read property 'softlayerAccountId' of undefined
Любые идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вы делаете это неправильно. connect() принимает два аргумента: обратный вызов mapStateToProps и mapDispatchToProps. Во втором варианте вы пытаетесь передать 3 аргумента, где второй на самом деле также относится к хранилищу (так что это похоже на то, что вы поместили 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);
Почему не работает 3-й вариант? Причина та же: вы пытаетесь привести аргументы там, где они не работают.
({ shipments }, store) => ({
Здесь вы объявляете функцию, которая принимает два аргумента. Первый - это деструктуризация, а второй просто передается. Но connect передаст только один аргумент store. Он не пройдет store несколько раз только потому, что вы этого ожидаете.