From ee7fa9a7120c5028c1794e2d630623853bf9b268 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3n=20Molleda?= Date: Fri, 15 Oct 2021 16:38:41 -0700 Subject: [PATCH] docs: add React Native diagram --- docs/react-native.md | 14 +++++++++++--- static/img/react-native-interaction.webp | Bin 0 -> 18534 bytes static/img/react-native-schema.webp | Bin 0 -> 17272 bytes 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 static/img/react-native-interaction.webp create mode 100644 static/img/react-native-schema.webp diff --git a/docs/react-native.md b/docs/react-native.md index 9af6a20..fd8dadc 100644 --- a/docs/react-native.md +++ b/docs/react-native.md @@ -98,7 +98,11 @@ asynchronous and the UI thread never waits for the JavaScript thread to finish p This is better understood if we look at the threads that are spawned when a React Native application starts and how they communicate with each other. - +

+ +![Architecture diagram of React Native showing how the Main thread communicates with the JavaScript and Custom Native modules](/img/react-native-schema.webp) + +

1. **Main thread** — This is the main thread which gets spawned as soon as the application launches. It loads the app and starts the JavaScript thread to execute the JavaScript code. @@ -120,9 +124,13 @@ starts and how they communicate with each other. Looking at the initial example of a user interacting with the screen, if they tap on a button the native code sends a message through the bridge to the JavaScript context so the handler the developer wrote is executed. Any side effect of that execution that changes the UI will be send -again over the bridge. +again over the bridge, to the shadow thread to compute the changes, and back to the UI one. + +

+ +![Interaction diagram explaining the flow of information accross threads for a user tap that changes the UI on a React Native application](/img/react-native-interaction.webp) - +

To address some of the concerns lined out earlier, the React Native Core team is working on removing the “bridge” and replace it with a [new renderer][fabric], called Fabric, and a new mechanism to diff --git a/static/img/react-native-interaction.webp b/static/img/react-native-interaction.webp new file mode 100644 index 0000000000000000000000000000000000000000..51b2cbdf08c07c2b931c314593e08e17cc4f8bde GIT binary patch literal 18534 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 literal 0 HcmV?d00001 diff --git a/static/img/react-native-schema.webp b/static/img/react-native-schema.webp new file mode 100644 index 0000000000000000000000000000000000000000..4b26391095ca94cfa86c3fb9f446a73eb0aaa4de GIT binary patch literal 17272 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