diff --git a/src/ReactART.js b/src/ReactART.js index bd9a795..ec2efaf 100644 --- a/src/ReactART.js +++ b/src/ReactART.js @@ -20,9 +20,9 @@ const Mode = require('art/modes/current'); const React = require('react'); const ReactDOM = require('react-dom'); -const ReactInstanceMap = require('react/lib/ReactInstanceMap'); -const ReactMultiChild = require('react/lib/ReactMultiChild'); -const ReactUpdates = require('react/lib/ReactUpdates'); +const ReactInstanceMap = require('react-dom/lib/ReactInstanceMap'); +const ReactMultiChild = require('react-dom/lib/ReactMultiChild'); +const ReactUpdates = require('react-dom/lib/ReactUpdates'); const emptyObject = require('fbjs/lib/emptyObject'); const invariant = require('fbjs/lib/invariant'); @@ -93,7 +93,7 @@ function injectAfter(parentNode, referenceNode, node) { // ContainerMixin for components that can hold ART nodes -const ContainerMixin = assign({}, ReactMultiChild, { +const ContainerMixin = assign({}, ReactMultiChild.Mixin, { /** * Moves a child component to the supplied index. @@ -278,7 +278,7 @@ const NodeMixin = { listeners[type] = listener; if (listener) { if (!subscriptions[type]) { - subscriptions[type] = this.node.subscribe(type, listener, this); + subscriptions[type] = this.node.subscribe(type, this.handleEvent, this); } } else { if (subscriptions[type]) { diff --git a/src/__tests__/ReactART-test.js b/src/__tests__/ReactART-test.js index 739c9ed..10bd45f 100644 --- a/src/__tests__/ReactART-test.js +++ b/src/__tests__/ReactART-test.js @@ -286,4 +286,33 @@ describe('ReactART', function() { expect(ref.constructor).toBe(CustomShape); }); + it('adds and updates event handlers', function() { + const container = document.createElement('div'); + + function render(onClick) { + return ReactDOM.render( + + + , + container, + ); + } + + function doClick(instance) { + const path = ReactDOM.findDOMNode(instance).querySelector('path'); + + // ReactTestUtils.Simulate.click doesn't work with SVG elements + path.click(); + } + + const onClick1 = jest.fn(); + let instance = render(onClick1); + doClick(instance); + expect(onClick1).toBeCalled(); + + const onClick2 = jest.fn(); + instance = render(onClick2); + doClick(instance); + expect(onClick2).toBeCalled(); + }); });