@samitouri / QOS-React-2 / commits / ffd5b16d5f

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.

Sebastian Markbage committed Jun 11, 2015 at 18:39 UTC ffd5b16d5f744be35db65ade2bb27bba52b2bd9b
2 files changed +32 -24
src/isomorphic/classic/class/ReactClass.js
+1 -24
@@ -12,11 +12,8 @@
12 'use strict';
13
14 var ReactComponent = require('ReactComponent');
15 -var ReactCurrentOwner = require('ReactCurrentOwner');
15 var ReactElement = require('ReactElement');
16 var ReactErrorUtils = require('ReactErrorUtils');
18 -var ReactInstanceMap = require('ReactInstanceMap');
19 -var ReactLifeCycle = require('ReactLifeCycle');
17 var ReactPropTypeLocations = require('ReactPropTypeLocations');
18 var ReactPropTypeLocationNames = require('ReactPropTypeLocationNames');
19 var ReactUpdateQueue = require('ReactUpdateQueue');
@@ -728,27 +725,7 @@ var ReactClassMixin = {
725 * @final
726 */
727 isMounted: function() {
731 - if (__DEV__) {
732 - var owner = ReactCurrentOwner.current;
733 - if (owner !== null) {
734 - warning(
735 - owner._warnedAboutRefsInRender,
736 - '%s is accessing isMounted inside its render() function. ' +
737 - 'render() should be a pure function of props and state. It should ' +
738 - 'never access something that requires stale data from the previous ' +
739 - 'render, such as refs. Move this logic to componentDidMount and ' +
740 - 'componentDidUpdate instead.',
741 - owner.getName() || 'A component'
742 - );
743 - owner._warnedAboutRefsInRender = true;
744 - }
745 - }
746 - var internalInstance = ReactInstanceMap.get(this);
747 - if (internalInstance) {
748 - return internalInstance !== ReactLifeCycle.currentlyMountingInstance;
749 - } else {
750 - return false;
751 - }
728 + return ReactUpdateQueue.isMounted(this);
729 },
730
731 /**
src/renderers/shared/reconciler/ReactUpdateQueue.js
+31
@@ -72,6 +72,37 @@ function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
72 */
73 var ReactUpdateQueue = {
74
75 + /**
76 + * Checks whether or not this composite component is mounted.
77 + * @param {ReactClass} publicInstance The instance we want to test.
78 + * @return {boolean} True if mounted, false otherwise.
79 + * @protected
80 + * @final
81 + */
82 + isMounted: function(publicInstance) {
83 + if (__DEV__) {
84 + var owner = ReactCurrentOwner.current;
85 + if (owner !== null) {
86 + warning(
87 + owner._warnedAboutRefsInRender,
88 + '%s is accessing isMounted inside its render() function. ' +
89 + 'render() should be a pure function of props and state. It should ' +
90 + 'never access something that requires stale data from the previous ' +
91 + 'render, such as refs. Move this logic to componentDidMount and ' +
92 + 'componentDidUpdate instead.',
93 + owner.getName() || 'A component'
94 + );
95 + owner._warnedAboutRefsInRender = true;
96 + }
97 + }
98 + var internalInstance = ReactInstanceMap.get(publicInstance);
99 + if (internalInstance) {
100 + return internalInstance !== ReactLifeCycle.currentlyMountingInstance;
101 + } else {
102 + return false;
103 + }
104 + },
105 +
106 /**
107 * Enqueue a callback that will be executed after all the pending updates
108 * have processed.