export default compose(withRouter, connect(null, mapDispatchToProps))(SignIn);
Переместите connect
HO C, чтобы быть последней составной функцией (т.е. первой в списке аргументов). Составьте процессы функций справа налево. Вам нужно, чтобы это был последний возвращенный товар. Это легче увидеть при составлении списка составления HO C по вертикали.
export default compose(
connect(null, mapDispatchToProps),
withRouter,
)(SignIn);
Edit Просто проведите некоторое тестирование с этим и убедитесь, что если отдельный декоратор не зависит от введенных реквизитов от других ранее указанные декораторы тогда порядок не имеет значения.
Например, я использую redux
и intl
в проекте, если я просто сочиняю и деструктурирую formatMessage
из intl
const MyComponent = ({ intl: { formatMessage } }) => <div>TEST</dev>;
любой из следующих работ
export default compose(
connect(mapStateToProps),
injectIntl,
)(MyComponent);
и
export default compose(
injectIntl,
connect(mapStateToProps),
)(MyComponent);
Но если я попытаюсь сопоставить intl.formatMessage
с formatMessage
реквизитом, то порядок имеет значение.
const MyComponent = ({ formatMessage }) => <div>TEST</dev>;
const mapStateToProps = (state, { intl }) => ({
formatMessage: intl.formatMessage,
});
// only this order works.
export default compose(
injectIntl,
connect(mapStateToProps),
)(MyComponent);
Надеюсь, это заполнит некоторые пробелы.