@samitouri / QOS-React / commits / 84639ab53f

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 }