diff --git a/src/browser/dom/components/LinkedValueUtils.js b/src/browser/dom/components/LinkedValueUtils.js index d447d3540c..632b8872b8 100644 --- a/src/browser/dom/components/LinkedValueUtils.js +++ b/src/browser/dom/components/LinkedValueUtils.js @@ -19,6 +19,8 @@ "use strict"; +var ReactPropTypes = require('ReactPropTypes'); + var invariant = require('invariant'); var hasReadOnlyValue = { @@ -110,7 +112,8 @@ var LinkedValueUtils = { ); } } - } + }, + onChange: ReactPropTypes.func } }, diff --git a/src/event/EventPluginHub.js b/src/event/EventPluginHub.js index d6f214b239..089a7be552 100644 --- a/src/event/EventPluginHub.js +++ b/src/event/EventPluginHub.js @@ -155,6 +155,11 @@ var EventPluginHub = { ExecutionEnvironment.canUseDOM, 'Cannot call putListener() in a non-DOM environment.' ); + invariant( + !listener || typeof listener === 'function', + 'Expected %s listener to be a function, instead got type %s', + registrationName, typeof listener + ); if (__DEV__) { // IE8 has no API for event capturing and the `onScroll` event doesn't diff --git a/src/event/__tests__/EventPluginHub-test.js b/src/event/__tests__/EventPluginHub-test.js index 280e79728e..9e546ab92a 100644 --- a/src/event/__tests__/EventPluginHub-test.js +++ b/src/event/__tests__/EventPluginHub-test.js @@ -42,4 +42,12 @@ describe('EventPluginHub', function() { ); }); + it("should prevent non-function listeners", function() { + expect(function() { + EventPluginHub.putListener(1, 'onClick', 'not a function'); + }).toThrow( + 'Invariant Violation: Expected onClick listener to be a function, ' + + 'instead got type string' + ); + }); });