From 5ef0b416df0c0ffe543d3257de1b2a5adf17c0b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Ko=C5=82odziejski?= Date: Tue, 5 May 2015 11:32:32 +0200 Subject: [PATCH] IsMounted should always return a boolean. Fixes #3814. isMounted used to return undefined if internalInstance was undefined after component was unmounted. --- src/classic/class/ReactClass.js | 9 +++++---- .../__tests__/ReactComponentLifeCycle-test.js | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/classic/class/ReactClass.js b/src/classic/class/ReactClass.js index 68806d0006..052545f6c7 100644 --- a/src/classic/class/ReactClass.js +++ b/src/classic/class/ReactClass.js @@ -761,10 +761,11 @@ var ReactClassMixin = { } } var internalInstance = ReactInstanceMap.get(this); - return ( - internalInstance && - internalInstance !== ReactLifeCycle.currentlyMountingInstance - ); + if (internalInstance) { + return internalInstance !== ReactLifeCycle.currentlyMountingInstance; + } else { + return false; + } }, /** diff --git a/src/core/__tests__/ReactComponentLifeCycle-test.js b/src/core/__tests__/ReactComponentLifeCycle-test.js index 736f2a02d7..7d61482da9 100644 --- a/src/core/__tests__/ReactComponentLifeCycle-test.js +++ b/src/core/__tests__/ReactComponentLifeCycle-test.js @@ -287,6 +287,23 @@ describe('ReactComponentLifeCycle', function() { ); }); + it('isMounted should return false when unmounted', function () { + var Component = React.createClass({ + render: function() { + return
; + } + }); + + var container = document.createElement('div'); + var instance = React.render(, container); + + expect(instance.isMounted()).toBe(true); + + React.unmountComponentAtNode(container); + + expect(instance.isMounted()).toBe(false); + }); + it('warns if findDOMNode is used inside render', function() { spyOn(console, 'error'); var Component = React.createClass({