Skip to content
This repository was archived by the owner on Jun 26, 2020. It is now read-only.

Commit 4d85b12

Browse files
author
Brian Vaughn
committed
Add support for React.memo
1 parent 0c2d825 commit 4d85b12

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

backend/attachRendererFiber.js

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ function getInternalReactConstants(version) {
106106
CONTEXT_PROVIDER_SYMBOL_STRING: 'Symbol(react.provider)',
107107
FORWARD_REF_NUMBER: 0xead0,
108108
FORWARD_REF_SYMBOL_STRING: 'Symbol(react.forward_ref)',
109+
MEMO_NUMBER: 0xead3,
110+
MEMO_SYMBOL_STRING: 'Symbol(react.memo)',
109111
PROFILER_NUMBER: 0xead2,
110112
PROFILER_SYMBOL_STRING: 'Symbol(react.profiler)',
111-
PURE_NUMBER: 0xead3,
112-
PURE_SYMBOL_STRING: 'Symbol(react.pure)',
113113
STRICT_MODE_NUMBER: 0xeacc,
114114
STRICT_MODE_SYMBOL_STRING: 'Symbol(react.strict_mode)',
115115
SUSPENSE_NUMBER: 0xead1,
@@ -143,6 +143,8 @@ function attachRendererFiber(hook: Hook, rid: string, renderer: ReactRenderer):
143143
HostText,
144144
Fragment,
145145
ForwardRef,
146+
MemoComponent,
147+
SimpleMemoComponent,
146148
} = ReactTypeOfWork;
147149
var {
148150
CONCURRENT_MODE_NUMBER,
@@ -154,8 +156,6 @@ function attachRendererFiber(hook: Hook, rid: string, renderer: ReactRenderer):
154156
CONTEXT_PROVIDER_SYMBOL_STRING,
155157
PROFILER_NUMBER,
156158
PROFILER_SYMBOL_STRING,
157-
PURE_NUMBER,
158-
PURE_SYMBOL_STRING,
159159
STRICT_MODE_NUMBER,
160160
STRICT_MODE_SYMBOL_STRING,
161161
SUSPENSE_NUMBER,
@@ -166,6 +166,7 @@ function attachRendererFiber(hook: Hook, rid: string, renderer: ReactRenderer):
166166
// TODO: we might want to change the data structure
167167
// once we no longer suppport Stack versions of `getData`.
168168
function getDataFiber(fiber: Object): DataType {
169+
var elementType = fiber.elementType;
169170
var type = fiber.type;
170171
var key = fiber.key;
171172
var ref = fiber.ref;
@@ -279,6 +280,17 @@ function attachRendererFiber(hook: Hook, rid: string, renderer: ReactRenderer):
279280
nodeType = 'Wrapper';
280281
children = [];
281282
break;
283+
case MemoComponent:
284+
case SimpleMemoComponent:
285+
nodeType = 'Special';
286+
if (elementType.displayName) {
287+
name = elementType.displayName;
288+
} else {
289+
const displayName = type.displayName || type.name;
290+
name = displayName ? `Memo(${displayName})` : 'Memo';
291+
}
292+
children = [];
293+
break;
282294
default:
283295
const symbolOrNumber = typeof type === 'object' && type !== null
284296
? type.$$typeof
@@ -289,17 +301,6 @@ function attachRendererFiber(hook: Hook, rid: string, renderer: ReactRenderer):
289301
: symbolOrNumber;
290302

291303
switch (switchValue) {
292-
case PURE_NUMBER:
293-
case PURE_SYMBOL_STRING:
294-
nodeType = 'Special';
295-
if (type.displayName) {
296-
name = type.displayName;
297-
} else {
298-
const displayName = type.render.displayName || type.render.name;
299-
name = displayName ? `Pure(${displayName})` : 'Pure';
300-
}
301-
children = [];
302-
break;
303304
case CONCURRENT_MODE_NUMBER:
304305
case CONCURRENT_MODE_SYMBOL_STRING:
305306
case DEPRECATED_ASYNC_MODE_SYMBOL_STRING:

0 commit comments

Comments
 (0)