File tree Expand file tree Collapse file tree 2 files changed +43
-1
lines changed Expand file tree Collapse file tree 2 files changed +43
-1
lines changed Original file line number Diff line number Diff line change 1
1
import shallowEqual from '../utils/shallowEqual'
2
2
import verifyPlainObject from '../utils/verifyPlainObject'
3
+ import warning from '../utils/warning'
3
4
4
5
export function defaultMergeProps ( stateProps , dispatchProps , ownProps ) {
5
- return { ...ownProps , ...stateProps , ...dispatchProps }
6
+ if ( process . env . NODE_ENV !== 'production' ) {
7
+ const stateKeys = Object . keys ( stateProps )
8
+
9
+ for ( let key of stateKeys ) {
10
+ if ( typeof ownProps [ key ] !== 'undefined' ) {
11
+ warning ( false , `Duplicate key ${ key } sent from both parent and state` )
12
+ break
13
+ }
14
+ }
15
+ }
16
+
17
+ return {
18
+ ...ownProps ,
19
+ ...stateProps ,
20
+ ...dispatchProps
21
+ }
6
22
}
7
23
8
24
export function wrapMergePropsFunc ( mergeProps ) {
Original file line number Diff line number Diff line change @@ -79,6 +79,32 @@ describe('React', () => {
79
79
expect ( container . context . store ) . toBe ( store )
80
80
} )
81
81
82
+
83
+ it ( 'should warn if same key is used in state and props' , ( ) => {
84
+ const store = createStore ( ( ) => ( {
85
+ abc : 'bar'
86
+ } ) )
87
+
88
+ @connect ( ( { abc } ) => ( { abc } ) )
89
+ class Container extends Component {
90
+ render ( ) {
91
+ return < Passthrough { ...this . props } />
92
+ }
93
+ }
94
+
95
+ const errorSpy = expect . spyOn ( console , 'error' )
96
+
97
+ TestUtils . renderIntoDocument (
98
+ < ProviderMock store = { store } >
99
+ < Container abc = "buz" />
100
+ </ ProviderMock >
101
+ )
102
+ errorSpy . destroy ( )
103
+ expect ( errorSpy ) . toHaveBeenCalled ( )
104
+ } )
105
+
106
+
107
+
82
108
it ( 'should pass state and props to the given component' , ( ) => {
83
109
const store = createStore ( ( ) => ( {
84
110
foo : 'bar' ,
You can’t perform that action at this time.
0 commit comments