<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jaine PS</title>
    <description>The latest articles on DEV Community by Jaine PS (@jaineps).</description>
    <link>https://dev.to/jaineps</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1206835%2F90fe9f49-f000-4022-8c83-657ab6e2c57b.jpeg</url>
      <title>DEV Community: Jaine PS</title>
      <link>https://dev.to/jaineps</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaineps"/>
    <language>en</language>
    <item>
      <title>𝗜 𝘄𝗲𝗻𝘁 𝘁𝗼 𝗖𝗮𝗿𝗻𝗶𝘃𝗮𝗹 𝘁𝗼 𝗽𝗮𝗿𝘁𝘆, 𝗯𝘂𝘁 𝗜 𝗰𝗮𝗺𝗲 𝗯𝗮𝗰𝗸 𝘄𝗶𝘁𝗵 𝗮 𝗦𝘁𝗮𝘁𝗲 𝗠𝗮𝗰𝗵𝗶𝗻𝗲.</title>
      <dc:creator>Jaine PS</dc:creator>
      <pubDate>Tue, 02 Jun 2026 14:19:30 +0000</pubDate>
      <link>https://dev.to/jaineps/--2ell</link>
      <guid>https://dev.to/jaineps/--2ell</guid>
      <description>&lt;p&gt;Carnival broke our assumptions about software.&lt;br&gt;
We almost built Loopa wrong.&lt;br&gt;
Not because of code, but because of assumptions.&lt;/p&gt;

&lt;p&gt;Initially, Loopa was designed as a general circular fashion platform. But we saw a unique window to launch during Carnival, where identity shifts fast, trust is contextual, and timing is everything.&lt;/p&gt;

&lt;p&gt;The shift from “General Circular Fashion” to “Carnival Circular Fashion Mode” wasn’t a UI change. It was an architectural validation.&lt;br&gt;
Because we chose structure over speed before scale existed, our system didn’t blink.&lt;/p&gt;

&lt;p&gt;Clothing exchanges aren’t just “status” columns.&lt;br&gt;
They’re modeled as state machines, not simple CRUD flows. Each transaction moves through explicit states, with rules enforced in the service layer, never in the UI, never directly in the database.&lt;/p&gt;

&lt;p&gt;Supabase is fully abstracted behind repositories.&lt;br&gt;
Business logic lives in services.&lt;br&gt;
Side effects, real-time updates and cache invalidation, run through an internal event bus.&lt;/p&gt;

&lt;p&gt;Components don’t talk to the database. Ever.&lt;br&gt;
It might look heavy for something that started with Carnival.&lt;br&gt;
But when people reinvent themselves overnight, systems can’t afford to be vague.&lt;/p&gt;

&lt;p&gt;The real MVP decision wasn’t the stack.&lt;br&gt;
It was choosing structure over speed before scale existed.&lt;br&gt;
Carnival is chaotic by design. Software shouldn’t be.&lt;/p&gt;

&lt;p&gt;When have your architectural choices been the “hero” of a business pivot?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How do you handle P2P transactions?</title>
      <dc:creator>Jaine PS</dc:creator>
      <pubDate>Tue, 02 Jun 2026 14:18:17 +0000</pubDate>
      <link>https://dev.to/jaineps/how-do-you-handle-p2p-transactions-pmf</link>
      <guid>https://dev.to/jaineps/how-do-you-handle-p2p-transactions-pmf</guid>
      <description>&lt;p&gt;How do you handle P2P transactions when there’s no delivery system and no platform-controlled handoff?&lt;/p&gt;

&lt;p&gt;That was the core problem behind Loopa.&lt;/p&gt;

&lt;p&gt;Physical exchanges are messy. People change plans, meet late, ghost, or confirm things out of order. In that context, a simple status: "completed" field isn’t just naive, it’s dangerous. It creates race conditions and edge cases you only discover once trust is already broken.&lt;/p&gt;

&lt;p&gt;I built a centralized State Machine.&lt;br&gt;
Each transaction moves through explicit states with strictly defined transitions in TypeScript. There’s no “jumping ahead.” Success is gated: the system only allows it when both parties independently confirm the physical exchange. No UI shortcuts. No database flag flips.&lt;/p&gt;

&lt;p&gt;All business rules live in state handlers, completely isolated from the Next.js App Router. Components never touch the database directly. The UI reacts, the engine decides.&lt;/p&gt;

&lt;p&gt;By pairing this with Supabase Realtime for chat, the system stays predictable even when human behavior isn’t. The rules don't bend just because the physical meeting is chaotic.&lt;br&gt;
The real lesson wasn’t about the tools. It was about designing software that assumes people are human and keeps the system's integrity intact anyway.&lt;/p&gt;

&lt;p&gt;How are you handling "human variables" in your logic?&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>systemdesign</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Repository Environments: Remote and Development in Git</title>
      <dc:creator>Jaine PS</dc:creator>
      <pubDate>Mon, 08 Jan 2024 16:37:56 +0000</pubDate>
      <link>https://dev.to/jaineps/repository-environments-remote-and-development-in-git-4fbg</link>
      <guid>https://dev.to/jaineps/repository-environments-remote-and-development-in-git-4fbg</guid>
      <description>&lt;p&gt;There are two main repository environments:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lqgjcVed--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44g9sniftq9m3mtsmomd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lqgjcVed--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/44g9sniftq9m3mtsmomd.png" alt="Image description" width="761" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remote environment and development environment.&lt;br&gt;
The remote environment is where changes made to the computer are sent to a remote environment, and will be able to be shared.&lt;/p&gt;

&lt;p&gt;The development environment is where the local machine is. This environment is made up of three parts: Working directory, Staging area and Local repository.&lt;br&gt;
To take a remote repository and run it locally, use the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git clone - https://github.com/user_name/directory.git&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Copying is done in two places, in the Working directory e no Local Repository. Why git is version distribution control.&lt;br&gt;
The local repository is a literal copy of the remote repository, the only difference is that it is not shared.&lt;br&gt;
Another thing that the command git clone does, is to create a folder that will contain this copy.&lt;/p&gt;

&lt;p&gt;When a file is created, it is only present in your working directory, to see what is happening in the working directory, use the command:git status, that will tell you which branch you are working on.&lt;/p&gt;

&lt;p&gt;After creating a file, it is placed in the staging area, this means that all changes that will be committed to the remote repository.&lt;/p&gt;

&lt;p&gt;To send the changes to the staging area, use the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git add -file_name&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
To commit these changes to the local repository, use the command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -m “message”&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://cbea.ms/git-commit/"&gt;To write good commit messages&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To share your changes, and send them to the remote repo, use the command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git push&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Push sends only the changes, so it is very efficient network use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eI0ZC-Fj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/my7dovvzkpbcsqmvdrw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eI0ZC-Fj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/my7dovvzkpbcsqmvdrw8.png" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
The proper use of these commands, plus the habit of writing clear and informative commit messages, contributes to an understandable history and facilitates collaboration in software development projects.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Resolving two code smells using the atomic design methodology</title>
      <dc:creator>Jaine PS</dc:creator>
      <pubDate>Thu, 04 Jan 2024 12:49:16 +0000</pubDate>
      <link>https://dev.to/jaineps/resolving-two-code-smells-using-the-atomic-design-methodology-b-5gno</link>
      <guid>https://dev.to/jaineps/resolving-two-code-smells-using-the-atomic-design-methodology-b-5gno</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tlWRxJDv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/avdsi5w89tweiobw4q0n.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tlWRxJDv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/avdsi5w89tweiobw4q0n.jpeg" alt="Image description" width="288" height="175"&gt;&lt;/a&gt;Thinking about design system is a practice of abstracting components, transforming them into reusable components, culminating in consistent, efficient code with a high level of scalability.&lt;br&gt;
That means that it's a catalog with all reusable components, it can contain information about the use of these components and how to build their interfaces.&lt;/p&gt;

&lt;p&gt;Atomic Design is a design system pattern, which aims to start from a base element and reach a more complex element, functioning as a living system.&lt;/p&gt;

&lt;p&gt;BASIC  ➡️ COMPLEX&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We’re not designing pages, we’re designing systems of components.” — Stephen Hay&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bringing it to development, we can paraphrase it as follows:&lt;br&gt;
“We’re not building pages, we’re building systems of components.”&lt;/p&gt;

&lt;p&gt;The basic structure of Atomic design is:&lt;br&gt;
ATOM: Fundamental block, it is an HTML tag, for example an input or button.&lt;br&gt;
MOLECULE: It is the joining of atoms with the aim of forming a functional unit or that represents a purpose. For example: Search or Form.&lt;br&gt;
ORGANISM: It is the set of molecules, the organism contains more than one responsibility but brings together molecules with the same context. For example: Header, Footer, or Side Menu.&lt;br&gt;
TEMPLATE: The template organizes the layout of the page using organisms.&lt;br&gt;
PAGE: The page passes the data to the template and makes the organisms interact with each other, putting the system into practice.&lt;/p&gt;

&lt;p&gt;Atomic design promotes solid foundations that are established from the beginning, with all elements being initially planned: fonts, color palette, avatars, buttons, etc.&lt;/p&gt;

&lt;p&gt;When developing an application, even if initially the main focus is not on expansion or increasing complexity, it is still possible that at some point the application will reach a level of complexity at which common software development problems, so-called“code smells”.&lt;/p&gt;

&lt;p&gt;Code smells arise when a series of development decisions result in a deep problem in the code.&lt;/p&gt;

&lt;p&gt;We will solve two code smells using the atomic design methodology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repetition of components or services - DRY.&lt;/strong&gt;&lt;br&gt;
When there is a change in the development team and the design pattern is not consistent, components or services may be recreated in different contexts, which overloads the code and interferes with the application's performance.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SJ_Dc0EG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qd76k0nj2ae05pe7xf1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SJ_Dc0EG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qd76k0nj2ae05pe7xf1w.png" alt="Image description" width="604" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the component:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vRZOCfNi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oyf2w48poiw5ipw0dazh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vRZOCfNi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oyf2w48poiw5ipw0dazh.png" alt="Image description" width="604" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resolution:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dyti4UYn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rnipp323o6ixrjbjq0su.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dyti4UYn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rnipp323o6ixrjbjq0su.png" alt="Image description" width="602" height="259"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The components&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CommentCount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and &lt;code&gt;isLikesCount&lt;/code&gt; are almost the same, except for the properties, they can be unified into a single molecule, which is responsible for showing the number of items and using an icon that represents that item.&lt;/p&gt;

&lt;p&gt;Excess of cascading properties in a single component.&lt;/p&gt;

&lt;p&gt;It's difficult to understand components with a long list of properties. Furthermore, the more branched the properties passed to the component increase the ineligibility of the code, going against the purpose of clean code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--knXYMZum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtq27t0pdrmyo75lyd4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--knXYMZum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtq27t0pdrmyo75lyd4l.png" alt="Image description" width="602" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To solve this problem, we separate the properties that use the user as a base in a molecule called Avatar, and thus build the PostComment organism.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bgs6KxBm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnr5s95qhmr0cg5mrnfj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bgs6KxBm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wnr5s95qhmr0cg5mrnfj.png" alt="Image description" width="603" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dL0zJxRA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8p7sjuhymdpjdgvtfjmk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dL0zJxRA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8p7sjuhymdpjdgvtfjmk.png" alt="Image description" width="602" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xrw4fhLB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjdqwysasna78jp6z40m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xrw4fhLB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qjdqwysasna78jp6z40m.png" alt="Image description" width="602" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Atomic design methodology can be expanded to frontend as a fundamental tool when addressing common software development challenges, such as code smells. Repetition of components or services (DRY principle) and an excess of cascading properties within a single component—can be effectively resolved through the application of Atomic Design principles. In addiction, is important to understand that frontend and design needs to have a symbiotic relation.&lt;/p&gt;

&lt;p&gt;source:&lt;br&gt;
&lt;a href="https://bootcamp.uxdesign.cc/building-design-systems-with-atomic-design-fd21e86f34c5"&gt;https://bootcamp.uxdesign.cc/building-design-systems-with-atomic-design-fd21e86f34c5&lt;/a&gt;&lt;br&gt;
&lt;a href="https://bradfrost.com/blog/post/atomic-web-design/"&gt;https://bradfrost.com/blog/post/atomic-web-design/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How the DOM and Virtual DOM Dance: A Guide to Reactive Programming in Web Development</title>
      <dc:creator>Jaine PS</dc:creator>
      <pubDate>Fri, 10 Nov 2023 16:23:29 +0000</pubDate>
      <link>https://dev.to/jaineps/how-the-dom-and-virtual-dom-dance-a-guide-to-reactive-programming-in-web-development-2kb7</link>
      <guid>https://dev.to/jaineps/how-the-dom-and-virtual-dom-dance-a-guide-to-reactive-programming-in-web-development-2kb7</guid>
      <description>&lt;p&gt;Let's delve into the fascinating world of the Document Object Model (DOM)! 😋&lt;/p&gt;

&lt;p&gt;The DOM, short for Document Object Model, serves as a representation of the UI, whether it's composed in HTML or XML. Imagine it as a tree of tags. To interact with this structure, we employ a scripting language such as JavaScript.&lt;/p&gt;

&lt;p&gt;Now, for the sake of performance optimization, we don't directly modify the DOM itself; instead, we work with the Virtual DOM 🥸.&lt;/p&gt;

&lt;p&gt;But what exactly is this Virtual DOM?&lt;/p&gt;

&lt;p&gt;It's like a reflection of the real DOM, but with HTML tags endowed with predefined functionalities. Essentially, you write HTML components and infuse logic into them through streams — a series of related events unfolding over time. Reactive programming frameworks are the magic behind the scenes, creating and managing this virtual DOM.&lt;/p&gt;

&lt;p&gt;Welcome to the realm of the Reactive Programming paradigm!&lt;/p&gt;

&lt;p&gt;Reactive programming thrives on the propagation of change.&lt;/p&gt;

&lt;p&gt;In a nutshell, here's the sequence when altering the DOM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The entire virtual DOM undergoes an update.&lt;/li&gt;
&lt;li&gt;A comparison is made between the updated virtual DOM and its previous state.&lt;/li&gt;
&lt;li&gt;React determines which objects have undergone changes.&lt;/li&gt;
&lt;li&gt;Only the changed objects are updated on the real DOM.&lt;/li&gt;
&lt;li&gt;Changes on the real DOM translate into alterations on the screen.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By combining the DOM with reactive approaches, we empower web development with dynamism. This approach allows us to handle intricate data flows and changes, resulting in interactive and responsive user interfaces.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>dom</category>
      <category>frontend</category>
      <category>programming</category>
    </item>
    <item>
      <title>What kind of properties can be passed across the React Native bridge?</title>
      <dc:creator>Jaine PS</dc:creator>
      <pubDate>Fri, 10 Nov 2023 16:03:29 +0000</pubDate>
      <link>https://dev.to/jaineps/what-kind-of-properties-can-be-passed-across-the-react-native-bridge-3fj1</link>
      <guid>https://dev.to/jaineps/what-kind-of-properties-can-be-passed-across-the-react-native-bridge-3fj1</guid>
      <description>&lt;p&gt;A bridge in the React Native universe is more than just a connection; is a cross-platform communication between native languages ​​(such as Kotlin, Java, Objective-C and Swift) and the powerful JavaScript. This capability opens the door to building mobile applications efficiently and flexibly.&lt;/p&gt;

&lt;p&gt;Before we dive into the transferable properties, it is crucial to understand the underlying mechanism that guides the flow of these properties between different platforms.&lt;/p&gt;

&lt;p&gt;When opening any application developed in JavaScript on your mobile device, you may wonder: magic? Yes, indeed! It's the magic of React Native in action.&lt;/p&gt;

&lt;p&gt;React Native operates through a threading model for the render pipeline, where threads represent a series of instructions executed by the CPU. In this context, three essential threads come into play: the UI thread (or main thread), the Shadow thread (or Shadow tree) and the JavaScript thread.&lt;/p&gt;

&lt;p&gt;The UI thread, originating from the native DOM, is what creates the other two threads. The JavaScript thread manages the application logic, while the Shadow tree observes the states and implements changes to the layout. Changes to the view are calculated integratedly and, at the end of each event loop, are sent to the native side in serialized JSON format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8sbgZSyJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ha91340gyi7x1xbxh45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8sbgZSyJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ha91340gyi7x1xbxh45.png" alt="Image description" width="521" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus, properties that cross over to the native side take the form of serialized JSON, restricting themselves to JSON-compatible types.&lt;/p&gt;

&lt;p&gt;Consider the example of clicking a button. Since it is not possible to pass callbacks directly, the native side operates via events. The click event is sent, and the JavaScript triggers a callback. This callback is processed in Shadow, triggering the state change. After this change is complete, the result is serialized into JSON and sent to the other side of the bridge, thus ending the communication cycle.&lt;/p&gt;

&lt;p&gt;In short, the React Native bridge enables the efficient transfer of properties between languages, these props should be serialized JSON, and all JSON types can be passed to native side, providing a mobile development experience marked by versatility and effectiveness.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>mobile</category>
      <category>bridge</category>
      <category>react</category>
    </item>
  </channel>
</rss>
