diff --git a/src/renderers/dom/shared/DOMProperty.js b/src/renderers/dom/shared/DOMProperty.js index 197b57971baad..5727ab0f4465a 100644 --- a/src/renderers/dom/shared/DOMProperty.js +++ b/src/renderers/dom/shared/DOMProperty.js @@ -205,7 +205,8 @@ var DOMProperty = { } if ( (name[0] === 'o' || name[0] === 'O') && - (name[1] === 'n' || name[1] === 'N') + (name[1] === 'n' || name[1] === 'N') && + name.length > 2 ) { return false; } diff --git a/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js b/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js index f4949a77ce596..3f7ba7abcff04 100644 --- a/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js +++ b/src/renderers/dom/shared/__tests__/ReactDOMServerIntegration-test.js @@ -991,6 +991,11 @@ describe('ReactDOMServerIntegration', () => { ); expect(e.getAttribute('onunknownevent')).toBe(null); }); + + itRenders('custom attribute named `on`', async render => { + const e = await render(
); + expect(e.getAttribute('on')).toEqual('tap:do-something'); + }); }); describe('elements and children', function() { diff --git a/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js b/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js index 75d20e7d77656..3fb07e4ca9c77 100644 --- a/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js +++ b/src/renderers/dom/shared/hooks/ReactDOMUnknownPropertyHook.js @@ -70,7 +70,7 @@ if (__DEV__) { return true; } - if (lowerCasedName.indexOf('on') === 0) { + if (lowerCasedName.indexOf('on') === 0 && lowerCasedName.length > 2) { warning( false, 'Unknown event handler property `%s`. It will be ignored.%s',