[react-is] add back proper AsyncMode symbol, for back compat (#13959)
- Partial revert of #13732 - Fixes #13958.
Jordan Harband committed
Oct 31, 2018 at 12:03 UTC
cdbfa6b5dd692220e5996ec453d46fc10aff046a
4 files changed
+15
-5
packages/react-is/src/ReactIs.js
+5
-3
@@ -10,6 +10,7 @@
10
'use strict';
11
12
import {
13
+ REACT_ASYNC_MODE_TYPE,
14
REACT_CONCURRENT_MODE_TYPE,
15
REACT_CONTEXT_TYPE,
16
REACT_ELEMENT_TYPE,
@@ -32,6 +33,7 @@ export function typeOf(object: any) {
33
const type = object.type;
34
35
switch (type) {
36
+ case REACT_ASYNC_MODE_TYPE:
37
case REACT_CONCURRENT_MODE_TYPE:
38
case REACT_FRAGMENT_TYPE:
39
case REACT_PROFILER_TYPE:
@@ -57,8 +59,8 @@ export function typeOf(object: any) {
59
return undefined;
60
}
61
60
-// AsyncMode alias is deprecated along with isAsyncMode
61
-export const AsyncMode = REACT_CONCURRENT_MODE_TYPE;
62
+// AsyncMode is deprecated along with isAsyncMode
63
+export const AsyncMode = REACT_ASYNC_MODE_TYPE;
64
export const ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
65
export const ContextConsumer = REACT_CONTEXT_TYPE;
66
export const ContextProvider = REACT_PROVIDER_TYPE;
@@ -86,7 +88,7 @@ export function isAsyncMode(object: any) {
88
);
89
}
90
}
89
- return isConcurrentMode(object);
91
+ return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
92
}
93
export function isConcurrentMode(object: any) {
94
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
packages/react-is/src/__tests__/ReactIs-test.js
+1
-1
@@ -69,7 +69,7 @@ describe('ReactIs', () => {
69
expect(ReactIs.isValidElementType({type: 'div', props: {}})).toEqual(false);
70
});
71
72
- it('should identify async mode', () => {
72
+ it('should identify concurrent mode', () => {
73
expect(ReactIs.typeOf(<React.unstable_ConcurrentMode />)).toBe(
74
ReactIs.ConcurrentMode,
75
);
packages/shared/ReactSymbols.js
+3
@@ -32,6 +32,9 @@ export const REACT_PROVIDER_TYPE = hasSymbol
32
export const REACT_CONTEXT_TYPE = hasSymbol
33
? Symbol.for('react.context')
34
: 0xeace;
35
+export const REACT_ASYNC_MODE_TYPE = hasSymbol
36
+ ? Symbol.for('react.async_mode')
37
+ : 0xeacf;
38
export const REACT_CONCURRENT_MODE_TYPE = hasSymbol
39
? Symbol.for('react.concurrent_mode')
40
: 0xeacf;
packages/shared/__tests__/ReactSymbols-test.internal.js
+6
-1
@@ -31,7 +31,12 @@ describe('ReactSymbols', () => {
31
const originalSymbolFor = global.Symbol.for;
32
global.Symbol.for = null;
33
try {
34
- expectToBeUnique(Object.entries(require('shared/ReactSymbols')));
34
+ const entries = Object.entries(require('shared/ReactSymbols')).filter(
35
+ // REACT_ASYNC_MODE_TYPE and REACT_CONCURRENT_MODE_TYPE have the same numeric value
36
+ // for legacy backwards compatibility
37
+ ([key]) => key !== 'REACT_ASYNC_MODE_TYPE',
38
+ );
39
+ expectToBeUnique(entries);
40
} finally {
41
global.Symbol.for = originalSymbolFor;
42
}