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 11import shallowEqual from '../utils/shallowEqual'
22import verifyPlainObject from '../utils/verifyPlainObject'
3+ import warning from '../utils/warning'
34
45export 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+ }
622}
723
824export function wrapMergePropsFunc ( mergeProps ) {
Original file line number Diff line number Diff line change @@ -79,6 +79,32 @@ describe('React', () => {
7979 expect ( container . context . store ) . toBe ( store )
8080 } )
8181
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+
82108 it ( 'should pass state and props to the given component' , ( ) => {
83109 const store = createStore ( ( ) => ( {
84110 foo : 'bar' ,
You can’t perform that action at this time.
0 commit comments