Work around a false positive warning

Summary:
This works around a false positive `isMounted()` deprecation warning when using latest React DevTools and selecting components in the hierarchy.

Before:

![screen shot 2017-05-09 at 7 03 39 pm 1](https://cloud.githubusercontent.com/assets/810438/25865249/3a5cc9e2-34ea-11e7-9930-6d0d8436b390.png)

After:

![screen shot 2017-05-09 at 7 02 54 pm](https://cloud.githubusercontent.com/assets/810438/25865274/4d2d573a-34ea-11e7-8bdd-807e32c54594.png)
Closes https://github.com/facebook/react-native/pull/13873

Reviewed By: bvaughn

Differential Revision: D5029550

Pulled By: gaearon

fbshipit-source-id: cbe941368e8204a335de17ad3d444580aef9d833
This commit is contained in:
Dan Abramov 2017-05-09 12:21:24 -07:00 committed by Facebook Github Bot
parent 82fd02a1e2
commit 074c3cef14
1 changed files with 16 additions and 4 deletions

View File

@ -57,12 +57,24 @@ export interface NativeMethodsInterface {
*/ */
function mountSafeCallback(context: any, callback: ?Function): any { function mountSafeCallback(context: any, callback: ?Function): any {
return function() { return function() {
if ( if (!callback) {
!callback ||
(typeof context.isMounted === 'function' && !context.isMounted())
) {
return undefined; return undefined;
} }
if (typeof context.__isMounted === 'boolean') {
// TODO(gaearon): this is gross and should be removed.
// It is currently necessary because View uses createClass,
// and so any measure() calls on View (which are done by React
// DevTools) trigger the isMounted() deprecation warning.
if (!context.__isMounted) {
return undefined;
}
// The else branch is important so that we don't
// trigger the deprecation warning by calling isMounted.
} else if (typeof context.isMounted === 'function') {
if (!context.isMounted()) {
return undefined;
}
}
return callback.apply(context, arguments); return callback.apply(context, arguments);
}; };
} }