From ffd5b16d5f744be35db65ade2bb27bba52b2bd9b Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Thu, 11 Jun 2015 18:39:13 -0700 Subject: [PATCH] Move isMounted logic into the ReactUpdateQueue This is kind of a confusing place for it but it is intimitely tied to the update life cycle which is what the update queue is about. This kills some dependencies from isomorphic to the renderer. --- src/isomorphic/classic/class/ReactClass.js | 25 +-------------- .../shared/reconciler/ReactUpdateQueue.js | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/isomorphic/classic/class/ReactClass.js b/src/isomorphic/classic/class/ReactClass.js index 7ba5f9ea21..160aa9d7dd 100644 --- a/src/isomorphic/classic/class/ReactClass.js +++ b/src/isomorphic/classic/class/ReactClass.js @@ -12,11 +12,8 @@ 'use strict'; var ReactComponent = require('ReactComponent'); -var ReactCurrentOwner = require('ReactCurrentOwner'); var ReactElement = require('ReactElement'); var ReactErrorUtils = require('ReactErrorUtils'); -var ReactInstanceMap = require('ReactInstanceMap'); -var ReactLifeCycle = require('ReactLifeCycle'); var ReactPropTypeLocations = require('ReactPropTypeLocations'); var ReactPropTypeLocationNames = require('ReactPropTypeLocationNames'); var ReactUpdateQueue = require('ReactUpdateQueue'); @@ -728,27 +725,7 @@ var ReactClassMixin = { * @final */ isMounted: function() { - if (__DEV__) { - var owner = ReactCurrentOwner.current; - if (owner !== null) { - warning( - owner._warnedAboutRefsInRender, - '%s is accessing isMounted inside its render() function. ' + - 'render() should be a pure function of props and state. It should ' + - 'never access something that requires stale data from the previous ' + - 'render, such as refs. Move this logic to componentDidMount and ' + - 'componentDidUpdate instead.', - owner.getName() || 'A component' - ); - owner._warnedAboutRefsInRender = true; - } - } - var internalInstance = ReactInstanceMap.get(this); - if (internalInstance) { - return internalInstance !== ReactLifeCycle.currentlyMountingInstance; - } else { - return false; - } + return ReactUpdateQueue.isMounted(this); }, /** diff --git a/src/renderers/shared/reconciler/ReactUpdateQueue.js b/src/renderers/shared/reconciler/ReactUpdateQueue.js index d293bc9bc3..613cfaead1 100644 --- a/src/renderers/shared/reconciler/ReactUpdateQueue.js +++ b/src/renderers/shared/reconciler/ReactUpdateQueue.js @@ -72,6 +72,37 @@ function getInternalInstanceReadyForUpdate(publicInstance, callerName) { */ var ReactUpdateQueue = { + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function(publicInstance) { + if (__DEV__) { + var owner = ReactCurrentOwner.current; + if (owner !== null) { + warning( + owner._warnedAboutRefsInRender, + '%s is accessing isMounted inside its render() function. ' + + 'render() should be a pure function of props and state. It should ' + + 'never access something that requires stale data from the previous ' + + 'render, such as refs. Move this logic to componentDidMount and ' + + 'componentDidUpdate instead.', + owner.getName() || 'A component' + ); + owner._warnedAboutRefsInRender = true; + } + } + var internalInstance = ReactInstanceMap.get(publicInstance); + if (internalInstance) { + return internalInstance !== ReactLifeCycle.currentlyMountingInstance; + } else { + return false; + } + }, + /** * Enqueue a callback that will be executed after all the pending updates * have processed.