Guard against reused fibers in React Native commands (#21837)
Timothy Yung committed
Jul 8, 2021 at 16:01 UTC
84639ab53fcb83c5d4806b5d791bb07992c40bf1
2 files changed
+20
-23
packages/react-native-renderer/src/ReactFabric.js
+10
-12
@@ -160,16 +160,14 @@ function dispatchCommand(handle: any, command: string, args: Array<any>) {
160
'native component. Use React.forwardRef to get access to the underlying native component',
161
);
162
}
163
-
163
return;
164
}
165
167
- if (handle._internalInstanceHandle) {
168
- nativeFabricUIManager.dispatchCommand(
169
- handle._internalInstanceHandle.stateNode.node,
170
- command,
171
- args,
172
- );
166
+ if (handle._internalInstanceHandle != null) {
167
+ const {stateNode} = handle._internalInstanceHandle;
168
+ if (stateNode != null) {
169
+ nativeFabricUIManager.dispatchCommand(stateNode.node, command, args);
170
+ }
171
} else {
172
UIManager.dispatchViewManagerCommand(handle._nativeTag, command, args);
173
}
@@ -186,11 +184,11 @@ function sendAccessibilityEvent(handle: any, eventType: string) {
184
return;
185
}
186
189
- if (handle._internalInstanceHandle) {
190
- nativeFabricUIManager.sendAccessibilityEvent(
191
- handle._internalInstanceHandle.stateNode.node,
192
- eventType,
193
- );
187
+ if (handle._internalInstanceHandle != null) {
188
+ const {stateNode} = handle._internalInstanceHandle;
189
+ if (stateNode != null) {
190
+ nativeFabricUIManager.sendAccessibilityEvent(stateNode.node, eventType);
191
+ }
192
} else {
193
legacySendAccessibilityEvent(handle._nativeTag, eventType);
194
}
packages/react-native-renderer/src/ReactNativeRenderer.js
+10
-11
@@ -160,12 +160,11 @@ function dispatchCommand(handle: any, command: string, args: Array<any>) {
160
return;
161
}
162
163
- if (handle._internalInstanceHandle) {
164
- nativeFabricUIManager.dispatchCommand(
165
- handle._internalInstanceHandle.stateNode.node,
166
- command,
167
- args,
168
- );
163
+ if (handle._internalInstanceHandle != null) {
164
+ const {stateNode} = handle._internalInstanceHandle;
165
+ if (stateNode != null) {
166
+ nativeFabricUIManager.dispatchCommand(stateNode.node, command, args);
167
+ }
168
} else {
169
UIManager.dispatchViewManagerCommand(handle._nativeTag, command, args);
170
}
@@ -182,11 +181,11 @@ function sendAccessibilityEvent(handle: any, eventType: string) {
181
return;
182
}
183
185
- if (handle._internalInstanceHandle) {
186
- nativeFabricUIManager.sendAccessibilityEvent(
187
- handle._internalInstanceHandle.stateNode.node,
188
- eventType,
189
- );
184
+ if (handle._internalInstanceHandle != null) {
185
+ const {stateNode} = handle._internalInstanceHandle;
186
+ if (stateNode != null) {
187
+ nativeFabricUIManager.sendAccessibilityEvent(stateNode.node, eventType);
188
+ }
189
} else {
190
legacySendAccessibilityEvent(handle._nativeTag, eventType);
191
}