В последнее время, работая с React / Redux, я столкнулся с небольшой проблемой: я понятия не имел, как mergeProps работает. В качестве необязательного аргумента функции connect redux легко полностью забыть о ее существовании. Итак, я хотел сделать несколько быстрых заметок о том, как его использовать, прежде чем я их забуду.

MergeProps используется redux для объединения функций mapStateToProps и mapDispatchToProps, указанных в ваших контейнерах. Если вы не вызываете mergeProps в функции connect, она будет использовать значение по умолчанию mergeProps, которое создает общий объект, содержащий propsFromState, propsFromDispatch и propsFromParentComponents. Однако, когда вы определяете mergeProps себя, вы можете передать ему еще больше свойств.

В моем случае использования мы хотели объединить два onClick метода, чтобы не указывать их в подключенном компоненте. После передачи обычных свойств мы определили общий объект, который нужно объединить с ними. Для этого объекта были определены наши функции, как показано ниже.

return Object.assign({}, propsFromState, propsFromDispatch, ownProps, {
    closeCaseWithReset: () => propsFromDispatch.closeCaseWithReset(propsFromState.caseNumber, ownProps.logonId, propsFromState.oAuthToken),
    closeCaseAndGoHome: () => propsFromDispatch.closeCaseAndGoHome(propsFromState.caseNumber, ownProps.logonId, propsFromState.oAuthToken)
  });

Это было частью более крупного рефакторинга, который гарантировал, что мы не будем передавать реквизиты, такие как oAuthToken, полностью вниз как ownProps от компонента к компоненту. Использование mergeProps сделало наши презентационные компоненты более чистыми, убрав их определения методов, чтобы они могли просто сосредоточиться на правильном рендеринге своих элементов, а не на определении функций для взаимодействия с остальной частью приложения.