Skip to content

Commit 06de7fd

Browse files
committed
Only check equality on final props if custom mergeProps is supplied
1 parent 43344c9 commit 06de7fd

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

src/components/connect.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,22 @@ export default function connect(mapStateToProps, mapDispatchToProps, mergeProps,
3939
mapDispatchToProps || defaultMapDispatchToProps
4040

4141
const finalMergeProps = mergeProps || defaultMergeProps
42+
const checkMergedEquals = finalMergeProps !== defaultMergeProps
4243
const { pure = true, withRef = false } = options
4344

4445
// Helps track hot reloading.
4546
const version = nextVersion++
4647

48+
function computeMergedProps(stateProps, dispatchProps, parentProps) {
49+
const mergedProps = finalMergeProps(stateProps, dispatchProps, parentProps)
50+
invariant(
51+
isPlainObject(mergedProps),
52+
'`mergeProps` must return an object. Instead received %s.',
53+
mergedProps
54+
)
55+
return mergedProps
56+
}
57+
4758
return function wrapWithConnect(WrappedComponent) {
4859
class Connect extends Component {
4960
shouldComponentUpdate() {
@@ -106,16 +117,6 @@ export default function connect(mapStateToProps, mapDispatchToProps, mergeProps,
106117
return isFactory ? this.computeDispatchProps(store, props) : checkStateShape(mappedDispatch, true)
107118
}
108119

109-
computeMergedProps(stateProps, dispatchProps, parentProps) {
110-
const mergedProps = finalMergeProps(stateProps, dispatchProps, parentProps)
111-
invariant(
112-
isPlainObject(mergedProps),
113-
'`mergeProps` must return an object. Instead received %s.',
114-
mergedProps
115-
)
116-
return mergedProps
117-
}
118-
119120
updateStatePropsIfNeeded() {
120121
const nextStateProps = this.computeStateProps(this.store, this.props)
121122
if (this.stateProps && shallowEqual(nextStateProps, this.stateProps)) {
@@ -137,8 +138,8 @@ export default function connect(mapStateToProps, mapDispatchToProps, mergeProps,
137138
}
138139

139140
updateMergedPropsIfNeeded() {
140-
const nextMergedProps = this.computeMergedProps(this.stateProps, this.dispatchProps, this.props)
141-
if (this.mergedProps && shallowEqual(nextMergedProps, this.mergedProps)) {
141+
const nextMergedProps = computeMergedProps(this.stateProps, this.dispatchProps, this.props)
142+
if (this.mergedProps && checkMergedEquals && shallowEqual(nextMergedProps, this.mergedProps)) {
142143
return false
143144
}
144145

0 commit comments

Comments
 (0)