<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Dopebase Blog</title>
        <link>https://dopebase.com/blog</link>
        <description>Engineering guides for building and launching production apps.</description>
        <lastBuildDate>Sun, 12 Jul 2026 09:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 Dopebase</copyright>
        <item>
            <title><![CDATA[React Native vs Flutter: A Comprehensive Comparison]]></title>
            <link>https://dopebase.com/blog/react-native-flutter-comprehensive-comparison</link>
            <guid>https://dopebase.com/blog/react-native-flutter-comprehensive-comparison</guid>
            <pubDate>Sun, 12 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Compare React Native and Flutter by team skills, UI requirements, native integration, upgrade cost, and long-term ownership rather than benchmark headlines.]]></description>
            <content:encoded><![CDATA[<p>Compare React Native and Flutter by team skills, UI requirements, native integration, upgrade cost, and long-term ownership rather than benchmark headlines. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native flutter comprehensive comparison" src="https://dopebase.com/assets/images/01-cover11-5082a450-d170a40cda9df3bcee327ea7cb38b016.jpg" width="1100" height="879" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Compare React Native and Flutter by team skills, UI requirements, native integration, upgrade cost, and long-term ownership rather than benchmark headlines.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Prototype the riskiest native capability in both stacks.</li>
<li class="">Compare hiring, observability, accessibility, and release workflows.</li>
<li class="">Choose the ecosystem that minimizes product-specific risk.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native">What is React Native?<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#what-is-react-native" class="hash-link" aria-label="Direct link to What is React Native?" title="Direct link to What is React Native?" translate="no">​</a></h2>
<p>React Native is an open-source framework developed by Facebook that allows you to build native mobile applications using JavaScript and React. It uses a single codebase to create apps for both iOS and Android platforms, reducing development time and effort. React Native leverages native components and APIs, allowing you to achieve a high level of performance and responsiveness.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-flutter">What is Flutter?<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#what-is-flutter" class="hash-link" aria-label="Direct link to What is Flutter?" title="Direct link to What is Flutter?" translate="no">​</a></h2>
<p>Flutter, on the other hand, is an open-source UI toolkit developed by Google for building natively compiled applications for mobile, web, and desktop from a single codebase. It uses the Dart programming language and provides a rich set of pre-designed widgets that can be customized to create beautiful and responsive user interfaces.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="development-experience">Development Experience<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#development-experience" class="hash-link" aria-label="Direct link to Development Experience" title="Direct link to Development Experience" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-development">React Native Development<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#react-native-development" class="hash-link" aria-label="Direct link to React Native Development" title="Direct link to React Native Development" translate="no">​</a></h3>
<p>To start developing with React Native, you need to have Node.js and npm (Node Package Manager) installed on your machine. You can create a new React Native project using the React Native CLI by running the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx create-expo-app@latest MyProject</span><br></span></code></pre></div></div>
<p>This will create a new directory called "MyProject" with the basic project structure. You can then navigate to the project directory and start the development server by running:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">cd MyProject</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">npx expo start</span><br></span></code></pre></div></div>
<p>This will start the Metro bundler, which bundles and serves your JavaScript code to the mobile app. You can run your app on a connected device or emulator using the following commands:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx expo run:android</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">npx expo run:ios</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flutter-development">Flutter Development<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#flutter-development" class="hash-link" aria-label="Direct link to Flutter Development" title="Direct link to Flutter Development" translate="no">​</a></h3>
<p>To start developing with Flutter, you need to install the Flutter SDK and set up your development environment. You can download the Flutter SDK from the official Flutter website and extract it to a directory on your machine. Add the Flutter bin directory to your system PATH variable to access the Flutter command-line tools.</p>
<p>To create a new Flutter project, you can run the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">flutter create MyProject</span><br></span></code></pre></div></div>
<p>This will create a new directory called "MyProject" with the basic project structure. You can then navigate to the project directory and run the app using the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">cd MyProject</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">flutter run</span><br></span></code></pre></div></div>
<p>This will start the Flutter development server and launch your app on a connected device or emulator.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="performance">Performance<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-performance">React Native Performance<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#react-native-performance" class="hash-link" aria-label="Direct link to React Native Performance" title="Direct link to React Native Performance" translate="no">​</a></h3>
<p>React Native performance depends on work across the JavaScript runtime, the renderer, native modules, layout, images, and network boundaries. Measure release builds first, then use tools such as React Native DevTools and UI-thread animation libraries where the trace shows they are appropriate.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flutter-performance">Flutter Performance<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#flutter-performance" class="hash-link" aria-label="Direct link to Flutter Performance" title="Direct link to Flutter Performance" translate="no">​</a></h3>
<p>Flutter, on the other hand, offers exceptional performance out of the box. It uses the Dart programming language, which is compiled to native code, resulting in faster and smoother animations and computations. Flutter also provides a hot reload feature, allowing you to see the changes in your app instantly without restarting the app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="ui-components">UI Components<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#ui-components" class="hash-link" aria-label="Direct link to UI Components" title="Direct link to UI Components" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-ui-components">React Native UI Components<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#react-native-ui-components" class="hash-link" aria-label="Direct link to React Native UI Components" title="Direct link to React Native UI Components" translate="no">​</a></h3>
<p>React Native offers a wide range of UI components and libraries that can be used to build beautiful and responsive user interfaces. It provides a set of core components like View, Text, Image, Button, etc., which can be styled and customized using CSS-like properties. Additionally, there are numerous third-party libraries available for React Native, offering even more UI components and functionalities.</p>
<p>Here's an example of how to create a simple button component in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TouchableOpacity</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">StyleSheet</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">Button</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> title</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> onPress </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">styles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">button</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">onPress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">styles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">buttonText</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> styles </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">StyleSheet</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">button</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">backgroundColor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'blue'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">padding</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">borderRadius</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">buttonText</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">color</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'white'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">fontWeight</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'bold'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">Button</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flutter-ui-components">Flutter UI Components<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#flutter-ui-components" class="hash-link" aria-label="Direct link to Flutter UI Components" title="Direct link to Flutter UI Components" translate="no">​</a></h3>
<p>Flutter provides a rich set of pre-designed widgets that can be customized to create stunning user interfaces. It follows a reactive programming model, where the UI is built using a hierarchy of widgets that update automatically when the underlying data changes. Flutter widgets are highly customizable and allow you to create pixel-perfect designs.</p>
<p>Here's an example of how to create a simple button component in Flutter:</p>
<div class="language-dart codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-dart codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">import 'package:flutter/material.dart';</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">class Button extends StatelessWidget {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  final String title;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  final VoidCallback onPressed;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Button({required this.title, required this.onPressed});</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  @override</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Widget build(BuildContext context) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    return ElevatedButton(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      onPressed: onPressed,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      child: Text(title),</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    );</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="community-and-ecosystem">Community and Ecosystem<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#community-and-ecosystem" class="hash-link" aria-label="Direct link to Community and Ecosystem" title="Direct link to Community and Ecosystem" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-community">React Native Community<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#react-native-community" class="hash-link" aria-label="Direct link to React Native Community" title="Direct link to React Native Community" translate="no">​</a></h3>
<p>React Native has a large and active community of developers who contribute to the framework and create libraries and tools to enhance its functionality. The React Native community provides extensive documentation, tutorials, and forums where developers can ask questions and seek help. There are also many open-source projects built with React Native that can serve as a reference or starting point for your own projects.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flutter-community">Flutter Community<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#flutter-community" class="hash-link" aria-label="Direct link to Flutter Community" title="Direct link to Flutter Community" translate="no">​</a></h3>
<p>Flutter, being backed by Google, also has a vibrant and growing community of developers. The Flutter community actively contributes to the framework and provides a wide range of packages and plugins through the Dart Pub repository. Flutter also has excellent documentation and a dedicated website with resources, tutorials, and case studies. The Flutter community is known for its helpfulness and responsiveness, making it easy to find support when needed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="platform-support">Platform Support<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#platform-support" class="hash-link" aria-label="Direct link to Platform Support" title="Direct link to Platform Support" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-platform-support">React Native Platform Support<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#react-native-platform-support" class="hash-link" aria-label="Direct link to React Native Platform Support" title="Direct link to React Native Platform Support" translate="no">​</a></h3>
<p>React Native supports both iOS and Android platforms out of the box. It provides a set of platform-specific components and APIs that allow you to access native features and functionalities. React Native also supports building apps for other platforms, such as Windows and macOS, through third-party libraries and tools.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flutter-platform-support">Flutter Platform Support<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#flutter-platform-support" class="hash-link" aria-label="Direct link to Flutter Platform Support" title="Direct link to Flutter Platform Support" translate="no">​</a></h3>
<p>Flutter, similarly to React Native, supports both iOS and Android platforms by default. It provides a consistent and unified experience across different platforms, allowing you to create apps that look and feel native on each platform. Flutter also has experimental support for desktop platforms like Windows, macOS, and Linux, allowing you to target a wider range of devices with a single codebase.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-flutter-comprehensive-comparison#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In conclusion, both React Native and Flutter are powerful frameworks for building cross-platform mobile applications. React Native offers a more familiar development experience for JavaScript developers and has a large and active community. Flutter, on the other hand, provides exceptional performance and a rich set of pre-designed widgets.</p>
<p>When choosing between React Native and Flutter, consider your project requirements, team expertise, and the specific features and capabilities offered by each framework. Ultimately, both frameworks provide efficient ways to build high-quality mobile apps, and the choice depends on your specific needs and preferences.</p>]]></content:encoded>
            <category>Comparison</category>
            <category>Cross-Platform</category>
            <category>Flutter</category>
            <category>Mobile Development</category>
            <category>React Native</category>
        </item>
        <item>
            <title><![CDATA[Introduction to React Native: Building Mobile Apps with JavaScript]]></title>
            <link>https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript</link>
            <guid>https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript</guid>
            <pubDate>Sat, 11 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Learn React Native from a production-oriented baseline that includes TypeScript, framework selection, native boundaries, and release builds.]]></description>
            <content:encoded><![CDATA[<p>Learn React Native from a production-oriented baseline that includes TypeScript, framework selection, native boundaries, and release builds. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="introduction react native building mobile apps javascript" src="https://dopebase.com/assets/images/01-cover19-0fb895df-efc15365cb7d27287150cf0d60b33c30.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Learn React Native from a production-oriented baseline that includes TypeScript, framework selection, native boundaries, and release builds.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Start with a small vertical feature instead of a screen-only demo.</li>
<li class="">Understand rendering, native modules, navigation, and data ownership.</li>
<li class="">Adopt linting, tests, crash reporting, and CI before the app grows.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native">What is React Native?<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#what-is-react-native" class="hash-link" aria-label="Direct link to What is React Native?" title="Direct link to What is React Native?" translate="no">​</a></h2>
<p>React Native is an open-source framework developed by Facebook that allows developers to build mobile apps using JavaScript. It uses the same design principles as React, a JavaScript library for building user interfaces, but instead of targeting the browser, React Native targets mobile platforms. This means that developers can write code once and deploy it on both iOS and Android devices, saving time and effort.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction-to-react-native">Introduction to React Native<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#introduction-to-react-native" class="hash-link" aria-label="Direct link to Introduction to React Native" title="Direct link to Introduction to React Native" translate="no">​</a></h3>
<p>React Native offers several advantages that make it a popular choice for mobile app development. Firstly, it allows developers to write code in JavaScript, a widely-used and versatile programming language. This eliminates the need to learn platform-specific languages such as Swift or Java, making it easier for web developers to transition to mobile app development.</p>
<p>Another advantage of React Native is its ability to render components as native elements, providing a seamless user experience. React Native components are transformed into native code, allowing apps to run smoothly and efficiently. This differs from hybrid app development frameworks, which use web views to render components, often leading to performance issues.</p>
<p>Additionally, React Native allows developers to reuse existing code and components, reducing development time and effort. This is particularly useful for teams working on both web and mobile projects, as they can share code and resources between the two platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="differences-between-react-native-and-react">Differences between React Native and React<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#differences-between-react-native-and-react" class="hash-link" aria-label="Direct link to Differences between React Native and React" title="Direct link to Differences between React Native and React" translate="no">​</a></h3>
<p>While React Native shares many similarities with React, there are some key differences between the two frameworks. React is primarily used for building web applications, while React Native is designed for mobile app development. React uses HTML-like syntax called JSX to define the structure and appearance of components, while React Native uses a set of pre-defined components to build user interfaces.</p>
<p>React Native also uses a different styling system than React. While React uses CSS for styling, React Native uses a combination of inline styles, the StyleSheet API, and a flexible layout system called Flexbox.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="setting-up-react-native-development-environment">Setting Up React Native Development Environment<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#setting-up-react-native-development-environment" class="hash-link" aria-label="Direct link to Setting Up React Native Development Environment" title="Direct link to Setting Up React Native Development Environment" translate="no">​</a></h2>
<p>Before diving into React Native development, it is important to set up the development environment. This section will guide you through the process of installing Node.js and npm, installing the React Native CLI, and creating a new React Native project.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="installing-nodejs-and-npm">Installing Node.js and npm<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#installing-nodejs-and-npm" class="hash-link" aria-label="Direct link to Installing Node.js and npm" title="Direct link to Installing Node.js and npm" translate="no">​</a></h3>
<p>Node.js is an open-source JavaScript runtime that allows developers to run JavaScript on the server-side. npm, or Node Package Manager, is a package manager that comes bundled with Node.js and is used to manage dependencies for JavaScript projects.</p>
<p>To install Node.js and npm, follow these steps:</p>
<ol>
<li class="">Visit the official Node.js website at <a href="https://nodejs.org/" target="_blank" rel="noopener noreferrer" class="">https://nodejs.org</a>.</li>
<li class="">Download the latest stable version of Node.js for your operating system.</li>
<li class="">Run the installation file and follow the prompts to complete the installation.</li>
<li class="">Open a terminal or command prompt and type <code>node -v</code> to verify that Node.js is installed correctly.</li>
<li class="">Type <code>npm -v</code> to verify that npm is installed correctly.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="installing-react-native-cli">Installing React Native CLI<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#installing-react-native-cli" class="hash-link" aria-label="Direct link to Installing React Native CLI" title="Direct link to Installing React Native CLI" translate="no">​</a></h3>
<p>The React Native CLI, or Command Line Interface, is a tool that allows developers to create, build, and run React Native projects from the command line. To install the React Native CLI, follow these steps:</p>
<ol>
<li class="">Open a terminal or command prompt and type <code>npm install -g react-native-cli</code> to install the React Native CLI globally.</li>
<li class="">Wait for the installation to complete.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-a-new-react-native-project">Creating a New React Native Project<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#creating-a-new-react-native-project" class="hash-link" aria-label="Direct link to Creating a New React Native Project" title="Direct link to Creating a New React Native Project" translate="no">​</a></h3>
<p>Once the React Native CLI is installed, you can create a new React Native project using the <code>react-native init</code> command. To create a new project, follow these steps:</p>
<ol>
<li class="">Open a terminal or command prompt and navigate to the directory where you want to create your project.</li>
<li class="">Type <code>react-native init MyApp</code> to create a new React Native project called "MyApp". Replace "MyApp" with the desired name for your project.</li>
<li class="">Wait for the project to be created. This may take a few minutes, as the React Native CLI installs the necessary dependencies.</li>
</ol>
<p>Congratulations! You have successfully set up your React Native development environment and created a new project. In the next sections, we will explore React Native components and learn how to build mobile apps using JavaScript.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="understanding-react-native-components">Understanding React Native Components<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#understanding-react-native-components" class="hash-link" aria-label="Direct link to Understanding React Native Components" title="Direct link to Understanding React Native Components" translate="no">​</a></h2>
<p>React Native components are the building blocks of a React Native app. They define the structure, appearance, and behavior of the app's user interface. In this section, we will introduce React Native components, discuss how to create custom components, and explore some of the built-in components provided by React Native.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction-to-react-native-components">Introduction to React Native Components<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#introduction-to-react-native-components" class="hash-link" aria-label="Direct link to Introduction to React Native Components" title="Direct link to Introduction to React Native Components" translate="no">​</a></h3>
<p>In React Native, components are reusable, self-contained pieces of code that define a part of the user interface. Each component can have its own state, props (properties), and lifecycle methods. Components can be nested inside other components, allowing for a hierarchical structure.</p>
<p>To create a React Native component, you can use either functional components or class components. Functional components are simpler and have less overhead, while class components provide additional features such as state and lifecycle methods.</p>
<p>Here is an example of a functional component in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">MyComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> world</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">MyComponent</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we import the necessary components from the <code>react-native</code> package. We define a functional component called <code>MyComponent</code> that returns a <code>View</code> component containing a <code>Text</code> component with the text "Hello, world!".</p>
<p>To use this component in another part of your app, you can simply import it and render it:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">MyComponent</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./MyComponent'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">MyComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we import the <code>MyComponent</code> component from the <code>./MyComponent</code> file and render it inside a <code>View</code> component.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-custom-components">Creating Custom Components<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#creating-custom-components" class="hash-link" aria-label="Direct link to Creating Custom Components" title="Direct link to Creating Custom Components" translate="no">​</a></h3>
<p>In addition to using the built-in components provided by React Native, you can also create your own custom components. Custom components allow you to encapsulate complex logic and reuse it throughout your app.</p>
<p>To create a custom component, you can use either functional components or class components, as shown in the previous section. The main difference is that class components can have state and lifecycle methods, while functional components cannot.</p>
<p>Here is an example of a custom component in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">CustomComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> name </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">name</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">CustomComponent</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define a functional component called <code>CustomComponent</code> that takes a prop called <code>name</code>. The component renders a <code>View</code> component containing a <code>Text</code> component with the text "Hello, {name}!", where <code>name</code> is the value of the <code>name</code> prop.</p>
<p>To use this custom component, you can pass the <code>name</code> prop when rendering it:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">CustomComponent</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./CustomComponent'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">CustomComponent</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"John"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">CustomComponent</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Jane"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we render two instances of the <code>CustomComponent</code> component, passing different values for the <code>name</code> prop.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-built-in-components">Using Built-in Components<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#using-built-in-components" class="hash-link" aria-label="Direct link to Using Built-in Components" title="Direct link to Using Built-in Components" translate="no">​</a></h3>
<p>React Native provides a wide range of built-in components that you can use to build your app's user interface. These components cover common UI elements such as text, buttons, images, input fields, and more.</p>
<p>To use a built-in component, you need to import it from the <code>react-native</code> package and render it in your component's JSX code. Each component has its own set of props that you can use to customize its appearance and behavior.</p>
<p>Here is an example of using the <code>Text</code> and <code>Button</code> components in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> world</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Click me"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">alert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Button clicked!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we import the <code>Text</code> and <code>Button</code> components from the <code>react-native</code> package. We render a <code>Text</code> component with the text "Hello, world!" and a <code>Button</code> component with the title "Click me" and an <code>onPress</code> prop that displays an alert when the button is clicked.</p>
<p>By using the built-in components provided by React Native, you can quickly and easily build a rich and interactive user interface for your mobile app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="styling-in-react-native">Styling in React Native<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#styling-in-react-native" class="hash-link" aria-label="Direct link to Styling in React Native" title="Direct link to Styling in React Native" translate="no">​</a></h2>
<p>Styling is an important aspect of mobile app development, as it determines the visual appearance and layout of the app's user interface. In React Native, there are several ways to style components, including inline styles, the StyleSheet API, and the Flexbox layout system.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="inline-styles">Inline Styles<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#inline-styles" class="hash-link" aria-label="Direct link to Inline Styles" title="Direct link to Inline Styles" translate="no">​</a></h3>
<p>One way to style components in React Native is by using inline styles. Inline styles are similar to CSS styles, but they are defined directly in the component's JSX code using JavaScript objects.</p>
<p>Here is an example of using inline styles in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">backgroundColor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'blue'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">padding</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">color</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'white'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">fontSize</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> world</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define inline styles for the <code>View</code> and <code>Text</code> components using JavaScript objects. The <code>backgroundColor</code> and <code>padding</code> styles are applied to the <code>View</code> component, while the <code>color</code> and <code>fontSize</code> styles are applied to the <code>Text</code> component.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="stylesheet-api">StyleSheet API<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#stylesheet-api" class="hash-link" aria-label="Direct link to StyleSheet API" title="Direct link to StyleSheet API" translate="no">​</a></h3>
<p>While inline styles work well for simple cases, they can become difficult to manage for more complex styles. React Native provides the StyleSheet API, which allows you to define styles in a separate JavaScript object and apply them to components.</p>
<p>Here is an example of using the StyleSheet API in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">StyleSheet</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> styles </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">StyleSheet</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">container</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">backgroundColor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'blue'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">padding</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">text</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">color</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'white'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">fontSize</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">styles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">container</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">styles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> world</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define styles using the <code>StyleSheet.create</code> method, which returns a JavaScript object with style definitions. We assign the styles to variables and use them as props for the <code>View</code> and <code>Text</code> components.</p>
<p>Using the StyleSheet API has several benefits, including performance optimizations and the ability to share styles between components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flexbox-layout">Flexbox Layout<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#flexbox-layout" class="hash-link" aria-label="Direct link to Flexbox Layout" title="Direct link to Flexbox Layout" translate="no">​</a></h3>
<p>React Native uses the Flexbox layout system to handle the positioning and alignment of components. Flexbox is a powerful and flexible layout system that allows you to create complex and responsive layouts with ease.</p>
<p>To use Flexbox in React Native, you need to understand the basic concepts and properties of Flexbox, such as <code>flexDirection</code>, <code>justifyContent</code>, <code>alignItems</code>, and <code>flex</code>.</p>
<p>Here is an example of using Flexbox layout in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">StyleSheet</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> styles </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">StyleSheet</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">container</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">flex</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">flexDirection</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'row'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">justifyContent</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'center'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">alignItems</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'center'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">text</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">fontSize</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">styles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">container</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token plain"> style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">styles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> world</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define a <code>container</code> style with <code>flex: 1</code> to make the <code>View</code> component take up the available space. We set <code>flexDirection</code> to <code>'row'</code> to arrange the child components horizontally, <code>justifyContent</code> to <code>'center'</code> to center the child components along the main axis, and <code>alignItems</code> to <code>'center'</code> to center the child components along the cross axis.</p>
<p>By using Flexbox layout, you can easily create responsive and dynamic layouts for your React Native app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-user-input">Handling User Input<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#handling-user-input" class="hash-link" aria-label="Direct link to Handling User Input" title="Direct link to Handling User Input" translate="no">​</a></h2>
<p>User input is a crucial aspect of mobile app development, as it allows users to interact with the app and perform actions. In React Native, there are several ways to handle user input, including text input, buttons, and touch events.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="text-input">Text Input<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#text-input" class="hash-link" aria-label="Direct link to Text Input" title="Direct link to Text Input" translate="no">​</a></h3>
<p>Text input is used to capture user input, such as text or numbers. React Native provides the <code>TextInput</code> component for creating text input fields.</p>
<p>Here is an example of using the <code>TextInput</code> component in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useState </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">TextInput</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setText</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handleChangeText</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">inputText</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">inputText</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">TextInput</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        placeholder</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Enter your name"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        value</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        onChangeText</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">handleChangeText</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Hello</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">text</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a <code>TextInput</code> component with a placeholder text and bind its value to the <code>text</code> state variable using the <code>value</code> prop. We define a <code>handleChangeText</code> function that updates the <code>text</code> state variable whenever the user types in the input field.</p>
<p>The <code>Text</code> component below the <code>TextInput</code> component displays the value of the <code>text</code> state variable.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="buttons">Buttons<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#buttons" class="hash-link" aria-label="Direct link to Buttons" title="Direct link to Buttons" translate="no">​</a></h3>
<p>Buttons are used to trigger actions when clicked by the user. React Native provides the <code>Button</code> component for creating buttons.</p>
<p>Here is an example of using the <code>Button</code> component in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Alert</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handlePress</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">Alert</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">alert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Button pressed!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Click me"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">handlePress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a <code>Button</code> component with a title and an <code>onPress</code> prop that triggers the <code>handlePress</code> function when the button is clicked. The <code>handlePress</code> function displays an alert using the <code>Alert.alert</code> method.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="touch-events">Touch Events<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#touch-events" class="hash-link" aria-label="Direct link to Touch Events" title="Direct link to Touch Events" translate="no">​</a></h3>
<p>In addition to buttons, React Native provides several components for handling touch events, such as <code>TouchableOpacity</code>, <code>TouchableHighlight</code>, and <code>TouchableWithoutFeedback</code>. These components allow you to create interactive elements that respond to user touch.</p>
<p>Here is an example of using the <code>TouchableOpacity</code> component in React Native:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useState </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">TouchableOpacity</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setCount</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handlePress</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setCount</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">count </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">handlePress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Click</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">me</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a <code>TouchableOpacity</code> component with an <code>onPress</code> prop that triggers the <code>handlePress</code> function when the component is pressed. The <code>handlePress</code> function updates the <code>count</code> state variable, which is displayed in the <code>Text</code> component.</p>
<p>By using touch events, you can create interactive and responsive user interfaces in your React Native app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="navigating-between-screens">Navigating Between Screens<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#navigating-between-screens" class="hash-link" aria-label="Direct link to Navigating Between Screens" title="Direct link to Navigating Between Screens" translate="no">​</a></h2>
<p>Mobile apps often have multiple screens that users can navigate between. In React Native, you can use the React Navigation library to handle screen navigation and create a seamless user experience.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-navigation-library">React Navigation Library<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#react-navigation-library" class="hash-link" aria-label="Direct link to React Navigation Library" title="Direct link to React Navigation Library" translate="no">​</a></h3>
<p>React Navigation is a popular library for handling navigation in React Native apps. It provides a set of navigators that allow you to define the navigation structure of your app, such as stack navigation and tab navigation.</p>
<p>To use React Navigation, you need to install the required packages and configure the navigation stack or tab navigator.</p>
<p>Here is an example of using the stack navigator in React Navigation:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createNativeStackNavigator </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native-stack'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">HomeScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./screens/HomeScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">DetailScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./screens/DetailScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Stack</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createNativeStackNavigator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Detail"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">DetailScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we import the necessary components from the <code>@react-navigation/native</code> and <code>@react-navigation/native-stack</code> packages. We create a stack navigator using the <code>createNativeStackNavigator</code> function and define two screens: <code>HomeScreen</code> and <code>DetailScreen</code>. The <code>Stack.Navigator</code> component wraps the screens and provides the navigation functionality.</p>
<p>To navigate between screens, you can use the <code>navigation</code> prop provided by React Navigation. For example, you can use the <code>navigation.navigate</code> method to navigate to a different screen:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">HomeScreen</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> navigation </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handlePress</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    navigation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">navigate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Detail'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Go to detail screen"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">handlePress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define a <code>HomeScreen</code> component that receives the <code>navigation</code> prop from React Navigation. The <code>handlePress</code> function uses the <code>navigation.navigate</code> method to navigate to the <code>Detail</code> screen when the button is pressed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="tab-navigator">Tab Navigator<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#tab-navigator" class="hash-link" aria-label="Direct link to Tab Navigator" title="Direct link to Tab Navigator" translate="no">​</a></h3>
<p>In addition to stack navigation, React Navigation also provides tab navigation, which allows you to create a tab-based navigation structure for your app. Tab navigation is commonly used for apps with multiple main sections or tabs.</p>
<p>Here is an example of using the tab navigator in React Navigation:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createBottomTabNavigator </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/bottom-tabs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">HomeScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./screens/HomeScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">ProfileScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./screens/ProfileScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Tab</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createBottomTabNavigator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Profile"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we import the necessary components from the <code>@react-navigation/native</code> and <code>@react-navigation/bottom-tabs</code> packages. We create a tab navigator using the <code>createBottomTabNavigator</code> function and define two screens: <code>HomeScreen</code> and <code>ProfileScreen</code>. The <code>Tab.Navigator</code> component wraps the screens and provides the tab navigation functionality.</p>
<p>To switch between tabs, you can use the tab bar provided by React Navigation. By default, React Navigation renders a bottom tab bar, but you can customize the appearance and behavior of the tab bar using the <code>tabBarOptions</code> prop.</p>
<p>By using the stack navigator and tab navigator provided by React Navigation, you can easily handle screen navigation in your React Native app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="building-and-deploying-react-native-apps">Building and Deploying React Native Apps<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#building-and-deploying-react-native-apps" class="hash-link" aria-label="Direct link to Building and Deploying React Native Apps" title="Direct link to Building and Deploying React Native Apps" translate="no">​</a></h2>
<p>Once you have developed your React Native app, you need to build it for the target platform and deploy it to app stores for distribution. In this section, we will cover the process of building and deploying React Native apps for iOS and Android.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="building-for-ios">Building for iOS<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#building-for-ios" class="hash-link" aria-label="Direct link to Building for iOS" title="Direct link to Building for iOS" translate="no">​</a></h3>
<p>To build a React Native app for iOS, you need to have a macOS machine with Xcode installed. Xcode is the official development environment for iOS apps and provides the necessary tools and resources for building and testing iOS apps.</p>
<p>Here are the steps to build a React Native app for iOS:</p>
<ol>
<li class="">Open your React Native project in a terminal or command prompt.</li>
<li class="">Run the command <code>npx react-native run-ios</code> to build and run the app on the iOS Simulator.</li>
<li class="">Wait for the build process to complete. This may take a few minutes, as the necessary dependencies and assets are bundled and compiled.</li>
<li class="">Once the build process is complete, the iOS Simulator will launch and the app will be installed and launched on the simulator.</li>
</ol>
<p>If you want to build the app for a physical iOS device, you need to connect the device to your macOS machine and select it as the target device in Xcode. You also need to configure the necessary certificates and provisioning profiles for code signing.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="building-for-android">Building for Android<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#building-for-android" class="hash-link" aria-label="Direct link to Building for Android" title="Direct link to Building for Android" translate="no">​</a></h3>
<p>To build a React Native app for Android, you need to have the Android development environment set up on your machine. This includes installing the Java Development Kit (JDK), Android Studio, and the Android SDK.</p>
<p>Here are the steps to build a React Native app for Android:</p>
<ol>
<li class="">Open your React Native project in a terminal or command prompt.</li>
<li class="">Run the command <code>npx react-native run-android</code> to build and run the app on an Android emulator or connected device.</li>
<li class="">Wait for the build process to complete. This may take a few minutes, as the necessary dependencies and assets are bundled and compiled.</li>
<li class="">Once the build process is complete, the app will be installed and launched on the emulator or connected device.</li>
</ol>
<p>Before building the app for a physical Android device, you need to enable USB debugging on the device and connect it to your machine via USB.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="publishing-to-app-stores">Publishing to App Stores<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#publishing-to-app-stores" class="hash-link" aria-label="Direct link to Publishing to App Stores" title="Direct link to Publishing to App Stores" translate="no">​</a></h3>
<p>To distribute your React Native app to users, you can publish it to the respective app stores: the Apple App Store for iOS apps and the Google Play Store for Android apps.</p>
<p>To publish your app to the app stores, you need to follow the guidelines and requirements provided by each store. This includes creating developer accounts, preparing app icons and screenshots, providing app descriptions and metadata, and complying with the store's policies and guidelines.</p>
<p>For iOS apps, you need to create an Apple Developer account and submit your app for review. Once the app is approved, it will be available for download on the App Store.</p>
<p>For Android apps, you need to create a Google Play Developer account and submit your app for review. Once the app is approved, it will be available for download on the Play Store.</p>
<p>The process of publishing an app to the app stores can be complex and time-consuming, but it is necessary to reach a wider audience and distribute your app to users.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/introduction-react-native-building-mobile-apps-javascript#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we have covered the basics of React Native and learned how to build mobile apps using JavaScript. We started by setting up the React Native development environment, including installing Node.js and npm and creating a new React Native project. We then explored React Native components and learned how to create custom components and use built-in components. We also discussed styling in React Native using inline styles, the StyleSheet API, and the Flexbox layout system.</p>
<p>Next, we delved into handling user input in React Native, including text input, buttons, and touch events. We learned how to capture user input using the <code>TextInput</code> component, trigger actions with the <code>Button</code> component, and handle touch events with components like <code>TouchableOpacity</code>.</p>
<p>Finally, we covered screen navigation in React Native using the React Navigation library. We learned how to create stack navigation and tab navigation, and how to navigate between screens using the <code>navigation</code> prop provided by React Navigation.</p>
<p>To complete the app development process, we discussed building and deploying React Native apps for iOS and Android. We covered the steps to build the app for each platform and the process of publishing the app to the respective app stores.</p>
<p>By following this tutorial, you should now have a solid foundation in React Native development and be ready to build your own mobile apps using JavaScript. Happy coding!</p>]]></content:encoded>
            <category>Development</category>
            <category>JavaScript</category>
            <category>Mobile Apps</category>
            <category>React Native</category>
        </item>
        <item>
            <title><![CDATA[React Native Performance Optimization: A Practical Guide]]></title>
            <link>https://dopebase.com/blog/react-native-performance-optimization</link>
            <guid>https://dopebase.com/blog/react-native-performance-optimization</guid>
            <pubDate>Fri, 10 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Optimize React Native from measurements, separating JavaScript work, rendering, native work, network latency, and image cost.]]></description>
            <content:encoded><![CDATA[<p>Optimize React Native from measurements, separating JavaScript work, rendering, native work, network latency, and image cost. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native performance optimization" src="https://dopebase.com/assets/images/01-cover16-cfb6533d-146ac2e468e225912264338b3ded52ba.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-performance-optimization#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Optimize React Native from measurements, separating JavaScript work, rendering, native work, network latency, and image cost.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-performance-optimization#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Profile before changing memoization or list settings.</li>
<li class="">Use virtualized lists and stable item identities for large collections.</li>
<li class="">Measure release builds with realistic data and lower-end devices.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-performance-optimization#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-performance-optimization#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native">What is React Native?<a href="https://dopebase.com/blog/react-native-performance-optimization#what-is-react-native" class="hash-link" aria-label="Direct link to What is React Native?" title="Direct link to What is React Native?" translate="no">​</a></h2>
<p>React Native is an open-source framework developed by Facebook that allows developers to build native mobile applications using JavaScript and React. It enables developers to write code once and deploy it on multiple platforms, such as iOS and Android, without the need for separate codebases. React Native achieves this by using native components instead of web components. This allows for a more efficient rendering process and better performance compared to traditional hybrid app development frameworks.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-performance-optimization-is-important">Why Performance Optimization is Important<a href="https://dopebase.com/blog/react-native-performance-optimization#why-performance-optimization-is-important" class="hash-link" aria-label="Direct link to Why Performance Optimization is Important" title="Direct link to Why Performance Optimization is Important" translate="no">​</a></h2>
<p>Performance optimization is crucial for React Native apps as it directly impacts user experience and app success. A slow and unresponsive app can lead to user frustration, abandonment, and negative reviews. Additionally, poor performance can drain device batteries faster, reducing app usage and user satisfaction. By optimizing the performance of React Native apps, developers can ensure that their apps load quickly, respond to user interactions promptly, and provide a seamless experience across devices.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="understanding-performance-optimization">Understanding Performance Optimization<a href="https://dopebase.com/blog/react-native-performance-optimization#understanding-performance-optimization" class="hash-link" aria-label="Direct link to Understanding Performance Optimization" title="Direct link to Understanding Performance Optimization" translate="no">​</a></h2>
<p>To optimize the performance of React Native apps, it is essential to understand and identify performance bottlenecks. Performance bottlenecks are areas of the app that significantly impact its speed and responsiveness. By identifying these bottlenecks, developers can apply specific optimization techniques to improve overall performance. Common performance issues in React Native apps include excessive re-renders, inefficient memory management, slow network requests, and large image sizes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="identifying-performance-bottlenecks">Identifying Performance Bottlenecks<a href="https://dopebase.com/blog/react-native-performance-optimization#identifying-performance-bottlenecks" class="hash-link" aria-label="Direct link to Identifying Performance Bottlenecks" title="Direct link to Identifying Performance Bottlenecks" translate="no">​</a></h3>
<p>To identify performance bottlenecks in React Native apps, developers can use various tools and techniques. Measuring performance is the first step in identifying bottlenecks. React Native DevTools, Android Studio profilers, Instruments, and platform logs expose different parts of rendering, CPU, memory, and network behavior. By analyzing these metrics, developers can pinpoint areas that require optimization.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="code-optimization-techniques">Code Optimization Techniques<a href="https://dopebase.com/blog/react-native-performance-optimization#code-optimization-techniques" class="hash-link" aria-label="Direct link to Code Optimization Techniques" title="Direct link to Code Optimization Techniques" translate="no">​</a></h3>
<p>Once performance bottlenecks are identified, developers can implement specific code optimization techniques to improve React Native app performance. The following sections outline techniques for rendering optimization, memory management, network optimization, and image optimization.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="rendering-optimization">Rendering Optimization<a href="https://dopebase.com/blog/react-native-performance-optimization#rendering-optimization" class="hash-link" aria-label="Direct link to Rendering Optimization" title="Direct link to Rendering Optimization" translate="no">​</a></h4>
<p>Rendering optimization focuses on minimizing unnecessary re-renders in React Native apps. Unnecessary re-renders can occur when components are re-rendered even though their props or state have not changed. To address this issue, developers can use Pure Components or implement shouldComponentUpdate lifecycle method to prevent unnecessary re-renders.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">PureComponent</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">MyComponent</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token plain"> </span><span class="token class-name">PureComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">props</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="memory-management">Memory Management<a href="https://dopebase.com/blog/react-native-performance-optimization#memory-management" class="hash-link" aria-label="Direct link to Memory Management" title="Direct link to Memory Management" translate="no">​</a></h4>
<p>Efficient memory management is essential for optimal React Native app performance. Memory leaks and excessive memory usage can lead to app crashes and decreased performance. To optimize memory management, developers should avoid creating unnecessary references, use efficient data structures, and dispose of unused resources. Additionally, React Native provides a garbage collector called <code>InteractionManager</code> that can be used to schedule memory-intensive tasks during idle times.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">InteractionManager</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token maybe-class-name">InteractionManager</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">runAfterInteractions</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Perform memory-intensive tasks here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="network-optimization">Network Optimization<a href="https://dopebase.com/blog/react-native-performance-optimization#network-optimization" class="hash-link" aria-label="Direct link to Network Optimization" title="Direct link to Network Optimization" translate="no">​</a></h4>
<p>Network optimization focuses on improving the performance of network requests in React Native apps. To optimize network requests, developers should implement techniques such as caching, compression, and reducing the number of requests. Libraries like <code>axios</code> and <code>fetch</code> provide options for configuring caching and compression settings. Additionally, developers can use tools like <code>react-native-offline</code> to handle offline scenarios and improve network performance.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">axios</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'axios'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">axios</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'https://api.example.com/data'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">response</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Process response data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">error</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Handle error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="image-optimization">Image Optimization<a href="https://dopebase.com/blog/react-native-performance-optimization#image-optimization" class="hash-link" aria-label="Direct link to Image Optimization" title="Direct link to Image Optimization" translate="no">​</a></h4>
<p>Images can significantly impact the performance of React Native apps, especially when dealing with large or numerous images. To optimize image loading, developers should consider techniques such as lazy loading, image compression, and using the appropriate image formats. Libraries like <code>react-native-fast-image</code> provide options for efficient image loading and caching.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">FastImage</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native-fast-image'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">MyComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">FastImage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    style</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">width</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">height</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    source</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">uri</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://example.com/image.jpg'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">priority</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FastImage</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">priority</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">normal</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    resizeMode</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">FastImage</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">resizeMode</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">contain</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="tools-for-performance-analysis">Tools for Performance Analysis<a href="https://dopebase.com/blog/react-native-performance-optimization#tools-for-performance-analysis" class="hash-link" aria-label="Direct link to Tools for Performance Analysis" title="Direct link to Tools for Performance Analysis" translate="no">​</a></h3>
<p>To assist in performance analysis and optimization of React Native apps, developers can utilize various tools. The following tools are recommended for monitoring app performance:</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-performance-monitor">React Native Performance Monitor<a href="https://dopebase.com/blog/react-native-performance-optimization#react-native-performance-monitor" class="hash-link" aria-label="Direct link to React Native Performance Monitor" title="Direct link to React Native Performance Monitor" translate="no">​</a></h4>
<p>React Native Performance Monitor is a built-in tool that provides real-time performance metrics for React Native apps. It allows developers to monitor CPU usage, memory consumption, and network requests. By analyzing these metrics, developers can identify performance bottlenecks and optimize their apps accordingly.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="reactotron">Reactotron<a href="https://dopebase.com/blog/react-native-performance-optimization#reactotron" class="hash-link" aria-label="Direct link to Reactotron" title="Direct link to Reactotron" translate="no">​</a></h4>
<p>Reactotron is a desktop application for inspecting and debugging React Native apps. It provides a range of features, including performance monitoring, network request inspection, and state management. Reactotron enables developers to track app performance and identify areas for optimization.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="native-platform-profilers">Native platform profilers<a href="https://dopebase.com/blog/react-native-performance-optimization#native-platform-profilers" class="hash-link" aria-label="Direct link to Native platform profilers" title="Direct link to Native platform profilers" translate="no">​</a></h4>
<p>Use Instruments and Android Studio profilers to correlate JavaScript traces with native CPU, memory, rendering, and network work. Capture traces from release builds with representative data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-and-profiling">Testing and Profiling<a href="https://dopebase.com/blog/react-native-performance-optimization#testing-and-profiling" class="hash-link" aria-label="Direct link to Testing and Profiling" title="Direct link to Testing and Profiling" translate="no">​</a></h3>
<p>Testing and profiling play a vital role in optimizing React Native app performance. Unit testing helps ensure that code changes do not impact app performance negatively. Performance profiling allows developers to identify areas of the app that require optimization. The following subsections outline unit testing and performance profiling techniques.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="unit-testing">Unit Testing<a href="https://dopebase.com/blog/react-native-performance-optimization#unit-testing" class="hash-link" aria-label="Direct link to Unit Testing" title="Direct link to Unit Testing" translate="no">​</a></h4>
<p>Unit testing involves testing individual components or functions to ensure they perform as expected and do not introduce performance regressions. Developers can use testing Jest and React Native Testing Library to write and run unit tests. By regularly running unit tests, developers can catch performance issues early and prevent them from impacting the overall app performance.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> screen </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">MyComponent</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./MyComponent'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'renders component correctly'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">MyComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> element </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> screen</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-source language-regex" style="color:#36acaa">Hello World</span><span class="token regex regex-delimiter" style="color:#36acaa">/</span><span class="token regex regex-flags" style="color:#36acaa">i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">element</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeInTheDocument</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="performance-profiling">Performance Profiling<a href="https://dopebase.com/blog/react-native-performance-optimization#performance-profiling" class="hash-link" aria-label="Direct link to Performance Profiling" title="Direct link to Performance Profiling" translate="no">​</a></h4>
<p>Performance profiling involves measuring the performance of specific parts of the React Native app to identify areas that require optimization. React Native DevTools and native platform profilers provide complementary performance traces. By analyzing performance profiles, developers can identify bottlenecks and optimize their React Native apps effectively.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">profile</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'MyComponent'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Perform actions to measure performance</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">profileEnd</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'MyComponent'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-performance-optimization#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In conclusion, optimizing the performance of React Native apps is essential for providing a seamless user experience and improving overall app efficiency. By understanding performance bottlenecks, implementing code optimization techniques, and utilizing performance analysis tools, developers can significantly enhance React Native app performance. Following best practices, such as minimizing re-renders, optimizing image loading, avoiding unnecessary operations, and managing state effectively, further improves app performance. Additionally, testing and profiling techniques help ensure that performance optimizations do not introduce regressions. By prioritizing performance optimization, developers can deliver high-performance React Native apps that meet user expectations and drive app success.</p>]]></content:encoded>
            <category>Mobile Development</category>
            <category>Optimization Techniques</category>
            <category>Performance Optimization</category>
            <category>React</category>
            <category>React Native</category>
        </item>
        <item>
            <title><![CDATA[React Native Navigation: Choosing a Routing Architecture]]></title>
            <link>https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation</link>
            <guid>https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation</guid>
            <pubDate>Thu, 09 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Choose a React Native navigation architecture based on routing complexity, deep links, native integration, and maintenance cost.]]></description>
            <content:encoded><![CDATA[<p>Choose a React Native navigation architecture based on routing complexity, deep links, native integration, and maintenance cost. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="introduction react native navigation react navigation vs react native navigation" src="https://dopebase.com/assets/images/01-cover16-cfb6533d-146ac2e468e225912264338b3ded52ba.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Choose a React Native navigation architecture based on routing complexity, deep links, native integration, and maintenance cost.</p>
<p>Choose one routing owner, model route parameters in TypeScript, and make deep links part of the initial architecture. React Navigation is the default choice for most apps; a native-first alternative only earns its complexity when the product has a measured platform-specific requirement.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Prefer static, typed route definitions when the route graph is known.</li>
<li class="">Model authentication as route availability, not scattered redirects.</li>
<li class="">Keep analytics screen names stable across refactors.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Define typed route params and linking configuration together.</li>
<li class="">Test cold-start deep links, authenticated redirects, and Android back behavior.</li>
<li class="">Persist only the minimum navigation state needed for recovery.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnavigation.org/docs/getting-started/" target="_blank" rel="noopener noreferrer" class="">React Navigation guide</a></li>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native-navigation">What is React Native Navigation?<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#what-is-react-native-navigation" class="hash-link" aria-label="Direct link to What is React Native Navigation?" title="Direct link to What is React Native Navigation?" translate="no">​</a></h2>
<p>React Native Navigation is a library specifically designed for React Native apps to handle navigation between screens. It offers a seamless and native-like navigation experience by using native navigation components. React Native Navigation is built on top of native navigation controllers, which makes it highly performant and efficient.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-navigation-in-react-native">Importance of Navigation in React Native<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#importance-of-navigation-in-react-native" class="hash-link" aria-label="Direct link to Importance of Navigation in React Native" title="Direct link to Importance of Navigation in React Native" translate="no">​</a></h3>
<p>Navigation is a crucial component in any mobile application, as it allows users to move between different screens and access different functionalities of the app. In React Native, navigation can be challenging due to the need to maintain a consistent navigation experience across different platforms (iOS and Android). React Native Navigation addresses this challenge by providing a platform-specific navigation solution that is optimized for both iOS and Android.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-navigation">React Navigation<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#react-navigation" class="hash-link" aria-label="Direct link to React Navigation" title="Direct link to React Navigation" translate="no">​</a></h3>
<p>React Navigation is a JavaScript-based library that provides a navigation solution for React Native apps. It is a popular choice among developers due to its simplicity and ease of use. React Navigation uses a JavaScript-based navigation stack to manage screen transitions and provides a customizable navigation UI.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="features-of-react-navigation">Features of React Navigation<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#features-of-react-navigation" class="hash-link" aria-label="Direct link to Features of React Navigation" title="Direct link to Features of React Navigation" translate="no">​</a></h4>
<ol>
<li class=""><strong>Installation and Setup</strong></li>
</ol>
<p>To install React Navigation, run the following command in your project directory:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install @react-navigation/native</span><br></span></code></pre></div></div>
<p>After installing the core package, you need to install the required dependencies based on the navigation type you want to use (e.g., stack, drawer, tab). For example, to install the stack navigator, run the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install @react-navigation/native-stack</span><br></span></code></pre></div></div>
<ol start="2">
<li class=""><strong>Navigating between Screens</strong></li>
</ol>
<p>React Navigation provides a variety of navigators, such as stack, drawer, and tab navigators, to handle different types of navigation. To navigate between screens, you can use the <code>navigate</code> function provided by the navigation prop. For example:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createNativeStackNavigator </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native-stack'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Stack</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createNativeStackNavigator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">App</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Profile"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">HomeScreen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> navigation </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Go to Profile"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> navigation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">navigate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Profile'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="3">
<li class=""><strong>Customizing Navigation Options</strong></li>
</ol>
<p>React Navigation allows you to customize the navigation options for each screen. You can define custom headers, titles, buttons, and other UI elements for your screens. You can also pass parameters to screens and access them using the <code>route</code> prop. For example:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">ProfileScreen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> route </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> name </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> route</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">params</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Welcome</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">name</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-navigation">React Native Navigation<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#react-native-navigation" class="hash-link" aria-label="Direct link to React Native Navigation" title="Direct link to React Native Navigation" translate="no">​</a></h2>
<p>React Native Navigation is another popular navigation library for React Native apps. It provides a more native-like navigation experience by using native navigation controllers. React Native Navigation is known for its performance and efficiency, making it an excellent choice for complex and resource-intensive applications.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="features-of-react-native-navigation">Features of React Native Navigation<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#features-of-react-native-navigation" class="hash-link" aria-label="Direct link to Features of React Native Navigation" title="Direct link to Features of React Native Navigation" translate="no">​</a></h3>
<ol>
<li class=""><strong>Installation and Setup</strong></li>
</ol>
<p>To install React Native Navigation, run the following command in your project directory:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install react-native-navigation</span><br></span></code></pre></div></div>
<p>After installing the package, you need to link it to your project using the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">react-native link react-native-navigation</span><br></span></code></pre></div></div>
<ol start="2">
<li class=""><strong>Navigating between Screens</strong></li>
</ol>
<p>React Native Navigation uses a native navigation controller to manage screen transitions. To navigate between screens, you can use the <code>push</code> and <code>pop</code> functions provided by the navigation controller. For example:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Navigation</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native-navigation'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token maybe-class-name">Navigation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">componentId</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">component</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'ProfileScreen'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">passProps</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'John Doe'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="3">
<li class=""><strong>Performance Comparison with React Navigation</strong></li>
</ol>
<p>React Native Navigation is known for its performance and efficiency. It uses native navigation controllers, which are optimized for both iOS and Android platforms. This results in smoother and faster navigation transitions compared to React Navigation. However, React Native Navigation requires more setup and configuration compared to React Navigation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparison">Comparison<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#comparison" class="hash-link" aria-label="Direct link to Comparison" title="Direct link to Comparison" translate="no">​</a></h2>
<p>Now that we have explored the features of both React Navigation and React Native Navigation, let's compare their pros and cons to help you make an informed decision.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="pros-and-cons-of-react-navigation">Pros and Cons of React Navigation<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#pros-and-cons-of-react-navigation" class="hash-link" aria-label="Direct link to Pros and Cons of React Navigation" title="Direct link to Pros and Cons of React Navigation" translate="no">​</a></h3>
<ul>
<li class="">
<p>Pros:</p>
<ul>
<li class="">Easy to set up and use</li>
<li class="">JavaScript-based navigation stack</li>
<li class="">Customizable navigation UI</li>
<li class="">Supports various navigators (stack, drawer, tab)</li>
</ul>
</li>
<li class="">
<p>Cons:</p>
<ul>
<li class="">Performance may be slower compared to React Native Navigation</li>
<li class="">Limited support for complex navigation patterns</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="pros-and-cons-of-react-native-navigation">Pros and Cons of React Native Navigation<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#pros-and-cons-of-react-native-navigation" class="hash-link" aria-label="Direct link to Pros and Cons of React Native Navigation" title="Direct link to Pros and Cons of React Native Navigation" translate="no">​</a></h3>
<ul>
<li class="">
<p>Pros:</p>
<ul>
<li class="">Native-like navigation experience</li>
<li class="">High performance and efficiency</li>
<li class="">Supports complex navigation patterns</li>
<li class="">Extensive customization options</li>
</ul>
</li>
<li class="">
<p>Cons:</p>
<ul>
<li class="">More setup and configuration required</li>
<li class="">Steeper learning curve compared to React Navigation</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="which-one-to-choose">Which one to choose?<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#which-one-to-choose" class="hash-link" aria-label="Direct link to Which one to choose?" title="Direct link to Which one to choose?" translate="no">​</a></h3>
<p>The choice between React Navigation and React Native Navigation depends on your project requirements. If you prioritize simplicity and ease of use, React Navigation may be a suitable choice. On the other hand, if you require high performance and native-like navigation experience, React Native Navigation would be a better fit.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/introduction-react-native-navigation-react-navigation-vs-react-native-navigation#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we compared React Navigation and React Native Navigation, two popular navigation libraries for React Native apps. We discussed their features, installation and setup process, navigating between screens, customizing navigation options, and performance. Both libraries have their pros and cons, and the choice depends on the specific needs of your project. With this knowledge, you can now make an informed decision and choose the navigation library that best suits your requirements.</p>]]></content:encoded>
            <category>React Development</category>
            <category>React Native Navigation</category>
            <category>React Navigation</category>
        </item>
        <item>
            <title><![CDATA[10 React Native Best Practices for Security]]></title>
            <link>https://dopebase.com/blog/react-native-security-best-practices</link>
            <guid>https://dopebase.com/blog/react-native-security-best-practices</guid>
            <pubDate>Wed, 08 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Build a threat model for React Native that covers secrets, local storage, network traffic, authentication, native permissions, and supply-chain risk.]]></description>
            <content:encoded><![CDATA[<p>Build a threat model for React Native that covers secrets, local storage, network traffic, authentication, native permissions, and supply-chain risk. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native security best practices" src="https://dopebase.com/assets/images/01-cover12-dccb4a42-e74b97d6cc69f8939d6be9232ec63b8f.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-security-best-practices#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Build a threat model for React Native that covers secrets, local storage, network traffic, authentication, native permissions, and supply-chain risk.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-security-best-practices#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Never ship privileged secrets in the JavaScript bundle.</li>
<li class="">Store sensitive tokens with platform-backed secure storage.</li>
<li class="">Patch dependencies and review native permission changes.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-security-best-practices#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-security-best-practices#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/react-native-security-best-practices#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native">What is React Native?<a href="https://dopebase.com/blog/react-native-security-best-practices#what-is-react-native" class="hash-link" aria-label="Direct link to What is React Native?" title="Direct link to What is React Native?" translate="no">​</a></h3>
<p>React Native is a JavaScript framework that allows developers to build mobile applications using React, a popular JavaScript library for building user interfaces. With React Native, developers can write code once and deploy it across different platforms such as iOS and Android. This makes it easier and more efficient to develop mobile applications, as developers can leverage their existing knowledge of React.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-security-in-react-native">Importance of Security in React Native<a href="https://dopebase.com/blog/react-native-security-best-practices#importance-of-security-in-react-native" class="hash-link" aria-label="Direct link to Importance of Security in React Native" title="Direct link to Importance of Security in React Native" translate="no">​</a></h3>
<p>Security is a critical aspect of any software development project, and React Native applications are no exception. As mobile applications handle sensitive user data, it is important to follow best practices to ensure the security and privacy of this data. By implementing secure coding practices, securing network communication, encrypting sensitive data, and regularly reviewing and testing the code, developers can significantly reduce the risk of security vulnerabilities.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="1-secure-code-practices">1. Secure Code Practices<a href="https://dopebase.com/blog/react-native-security-best-practices#1-secure-code-practices" class="hash-link" aria-label="Direct link to 1. Secure Code Practices" title="Direct link to 1. Secure Code Practices" translate="no">​</a></h2>
<p>When developing a React Native application, it is important to follow secure coding practices to prevent potential vulnerabilities. Here are some best practices to consider:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="avoiding-hardcoded-secrets">Avoiding Hardcoded Secrets<a href="https://dopebase.com/blog/react-native-security-best-practices#avoiding-hardcoded-secrets" class="hash-link" aria-label="Direct link to Avoiding Hardcoded Secrets" title="Direct link to Avoiding Hardcoded Secrets" translate="no">​</a></h3>
<p>Hardcoding secrets such as API keys, passwords, or tokens in the source code can expose your application to security risks. Instead, it is recommended to use secure storage mechanisms to store these secrets.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Hardcoded secret</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> apiKey </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'your-api-key'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Using secure storage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SecureStore</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'expo'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">storeSecret</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">key</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token maybe-class-name">SecureStore</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setItemAsync</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">retrieveSecret</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> value </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token maybe-class-name">SecureStore</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getItemAsync</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we avoid hardcoding the API key and instead use the <code>SecureStore</code> from the Expo library to store and retrieve the secret.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-input-validation">Implementing Input Validation<a href="https://dopebase.com/blog/react-native-security-best-practices#implementing-input-validation" class="hash-link" aria-label="Direct link to Implementing Input Validation" title="Direct link to Implementing Input Validation" translate="no">​</a></h3>
<p>Input validation is an essential practice to prevent code injection attacks such as SQL injection or cross-site scripting (XSS). Always validate and sanitize user input to avoid potential security vulnerabilities.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: No input validation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handleLogin</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">username</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> password</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> query </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">SELECT * FROM users WHERE username='</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">username</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">' AND password='</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">password</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">'</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Execute the query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Input validation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handleLogin</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">username</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> password</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Validate and sanitize the input</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sanitizedUsername </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sanitize</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">username</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sanitizedPassword </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sanitize</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">password</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> query </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">SELECT * FROM users WHERE username='</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">sanitizedUsername</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">' AND password='</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">sanitizedPassword</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">'</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Execute the query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we validate and sanitize the input to prevent potential SQL injection attacks.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="preventing-code-injection">Preventing Code Injection<a href="https://dopebase.com/blog/react-native-security-best-practices#preventing-code-injection" class="hash-link" aria-label="Direct link to Preventing Code Injection" title="Direct link to Preventing Code Injection" translate="no">​</a></h3>
<p>Code injection attacks can occur when user input is executed as code. To prevent code injection vulnerabilities, always use parameterized queries or prepared statements when interacting with databases.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Concatenating user input directly into the query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handleQuery</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">input</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> query </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">SELECT * FROM users WHERE id=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">input</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Execute the query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Using parameterized queries</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handleQuery</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">input</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> query </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'SELECT * FROM users WHERE id=?'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Prepare the statement with the query</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> statement </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> db</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">prepare</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Execute the statement with the input as a parameter</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> statement</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">input</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use parameterized queries to prevent potential code injection vulnerabilities.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-errors-securely">Handling Errors Securely<a href="https://dopebase.com/blog/react-native-security-best-practices#handling-errors-securely" class="hash-link" aria-label="Direct link to Handling Errors Securely" title="Direct link to Handling Errors Securely" translate="no">​</a></h3>
<p>When handling errors in a React Native application, it is important to avoid exposing sensitive information to users. Always provide generic error messages and log detailed error information securely.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Exposing detailed error information</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword control-flow" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Code that may throw an error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Logging detailed error information</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">throw</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'An error occurred'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Providing generic error messages</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword control-flow" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Code that may throw an error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'An error occurred'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Logging generic error message</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">throw</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'An error occurred'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we avoid logging detailed error information and provide a generic error message instead.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="2-authentication-and-authorization">2. Authentication and Authorization<a href="https://dopebase.com/blog/react-native-security-best-practices#2-authentication-and-authorization" class="hash-link" aria-label="Direct link to 2. Authentication and Authorization" title="Direct link to 2. Authentication and Authorization" translate="no">​</a></h2>
<p>Authentication and authorization are crucial aspects of application security. Here are some best practices for implementing secure authentication and authorization in React Native applications:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-secure-authentication">Implementing Secure Authentication<a href="https://dopebase.com/blog/react-native-security-best-practices#implementing-secure-authentication" class="hash-link" aria-label="Direct link to Implementing Secure Authentication" title="Direct link to Implementing Secure Authentication" translate="no">​</a></h3>
<p>Secure authentication is essential to ensure that only authorized users can access the application. Use strong password hashing algorithms, such as bcrypt, to securely store and validate user passwords.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Storing passwords as plain text</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Using bcrypt for password hashing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> bcrypt </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'bcrypt'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> saltRounds </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Hash the password before storing it</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bcrypt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">hash</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">user</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">password</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> saltRounds</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">err</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> hash</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">throw</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  user</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">password</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> hash</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Validate the password during authentication</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bcrypt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">compare</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">password</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">password</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">err</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">throw</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">result</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Successful authentication</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Invalid password</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use bcrypt to hash the password before storing it and compare the hashed password during authentication.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="managing-user-sessions">Managing User Sessions<a href="https://dopebase.com/blog/react-native-security-best-practices#managing-user-sessions" class="hash-link" aria-label="Direct link to Managing User Sessions" title="Direct link to Managing User Sessions" translate="no">​</a></h3>
<p>To ensure secure user sessions, generate a unique session token for each user session and store it securely. Validate the session token on each request to verify the authenticity of the user.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Storing session tokens in plain text</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sessionToken </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'abc123'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Generating and validating session tokens</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> crypto </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'crypto'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">generateSessionToken</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> token </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> crypto</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">randomBytes</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">64</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'hex'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Store the session token securely</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> token</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">validateSessionToken</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">token</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Validate the session token</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sessionToken </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">generateSessionToken</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">validateSessionToken</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">sessionToken</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>crypto</code> module to generate a random session token and validate it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="role-based-access-control">Role-Based Access Control<a href="https://dopebase.com/blog/react-native-security-best-practices#role-based-access-control" class="hash-link" aria-label="Direct link to Role-Based Access Control" title="Direct link to Role-Based Access Control" translate="no">​</a></h3>
<p>Role-based access control (RBAC) is a security model that restricts user access based on their roles or permissions. Implement RBAC to ensure that users only have access to the resources and actions they are authorized for.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: No access control</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">role</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'admin'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">isAdmin</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">user</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">role</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'admin'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Implementing RBAC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">role</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'admin'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">isAuthorized</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">user</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> permission</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Check if the user has the required permission</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">isAuthorized</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'create'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we implement a basic RBAC system to check if a user has a specific permission.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="3-network-security">3. Network Security<a href="https://dopebase.com/blog/react-native-security-best-practices#3-network-security" class="hash-link" aria-label="Direct link to 3. Network Security" title="Direct link to 3. Network Security" translate="no">​</a></h2>
<p>Network security is crucial for protecting sensitive data transmitted over the network. Here are some best practices for ensuring network security in React Native applications:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-https-for-api-requests">Using HTTPS for API Requests<a href="https://dopebase.com/blog/react-native-security-best-practices#using-https-for-api-requests" class="hash-link" aria-label="Direct link to Using HTTPS for API Requests" title="Direct link to Using HTTPS for API Requests" translate="no">​</a></h3>
<p>Always use HTTPS for API requests to encrypt the data transmitted between the client and the server. This prevents eavesdropping and ensures the integrity of the data.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Sending API requests over HTTP</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'http://api.example.com'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Sending API requests over HTTPS</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://api.example.com'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we ensure that API requests are sent over HTTPS instead of HTTP.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-certificate-pinning">Implementing Certificate Pinning<a href="https://dopebase.com/blog/react-native-security-best-practices#implementing-certificate-pinning" class="hash-link" aria-label="Direct link to Implementing Certificate Pinning" title="Direct link to Implementing Certificate Pinning" translate="no">​</a></h3>
<p>Certificate pinning is a technique to ensure that the client only communicates with a trusted server by verifying the server's SSL certificate. Implement certificate pinning to prevent man-in-the-middle attacks.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: No certificate pinning</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sslCertificate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'ssl-certificate'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">verifyCertificate</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">cert</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Verify the SSL certificate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> serverCertificate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> sslCertificate</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'api.example.com'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">verifyCertificate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">serverCertificate</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Implementing certificate pinning</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sslCertificate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'ssl-certificate-pinning'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">verifyCertificate</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">cert</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Verify the SSL certificate using pinned public key(s)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> serverCertificate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> sslCertificate</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'api.example.com'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">verifyCertificate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">serverCertificate</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>ssl-certificate-pinning</code> library to implement certificate pinning and verify the SSL certificate.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="securing-websockets">Securing Websockets<a href="https://dopebase.com/blog/react-native-security-best-practices#securing-websockets" class="hash-link" aria-label="Direct link to Securing Websockets" title="Direct link to Securing Websockets" translate="no">​</a></h3>
<p>If your React Native application uses websockets for real-time communication, ensure the security of the websocket connection by using secure protocols such as WSS.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Using unsecured websocket connection</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> socket </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">WebSocket</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'ws://example.com'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Using secured websocket connection</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> socket </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">WebSocket</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'wss://example.com'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we ensure that the websocket connection is established over WSS instead of WS.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="4-secure-data-storage">4. Secure Data Storage<a href="https://dopebase.com/blog/react-native-security-best-practices#4-secure-data-storage" class="hash-link" aria-label="Direct link to 4. Secure Data Storage" title="Direct link to 4. Secure Data Storage" translate="no">​</a></h2>
<p>Securely storing sensitive data is crucial to prevent data breaches. Here are some best practices for secure data storage in React Native applications:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="encrypting-sensitive-data">Encrypting Sensitive Data<a href="https://dopebase.com/blog/react-native-security-best-practices#encrypting-sensitive-data" class="hash-link" aria-label="Direct link to Encrypting Sensitive Data" title="Direct link to Encrypting Sensitive Data" translate="no">​</a></h3>
<p>Encrypting sensitive data such as user passwords, API keys, or access tokens adds an extra layer of security. Use encryption algorithms such as AES to encrypt the data before storing it.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Storing sensitive data as plain text</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> password </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Encrypting sensitive data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> crypto </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'crypto'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">encrypt</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">data</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Encrypt the data using the key</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> encryptedData</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">decrypt</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">encryptedData</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Decrypt the data using the key</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> decryptedData</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> encryptedPassword </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">encrypt</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">password</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'encryption-key'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> decryptedPassword </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">decrypt</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">encryptedPassword</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'encryption-key'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>crypto</code> module to encrypt and decrypt sensitive data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="securing-local-storage">Securing Local Storage<a href="https://dopebase.com/blog/react-native-security-best-practices#securing-local-storage" class="hash-link" aria-label="Direct link to Securing Local Storage" title="Direct link to Securing Local Storage" translate="no">​</a></h3>
<p>Local storage is commonly used in React Native applications to store session tokens or other sensitive data. Ensure the security of local storage by encrypting the data and implementing access controls.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Storing sensitive data in plain text</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token dom variable" style="color:#36acaa">localStorage</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setItem</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'sessionToken'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'abc123'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Storing sensitive data securely</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SecureStore</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'expo'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">storeSecret</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">key</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token maybe-class-name">SecureStore</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setItemAsync</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">retrieveSecret</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> value </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token maybe-class-name">SecureStore</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getItemAsync</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">storeSecret</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'sessionToken'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'abc123'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sessionToken </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">retrieveSecret</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'sessionToken'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>SecureStore</code> from the Expo library to store and retrieve sensitive data securely.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="protecting-user-data">Protecting User Data<a href="https://dopebase.com/blog/react-native-security-best-practices#protecting-user-data" class="hash-link" aria-label="Direct link to Protecting User Data" title="Direct link to Protecting User Data" translate="no">​</a></h3>
<p>Ensure the privacy and security of user data by implementing appropriate access controls and encryption mechanisms. Minimize the collection and storage of unnecessary user data to reduce the risk of data breaches.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Collecting unnecessary user data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">address</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'123 Street'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Collecting minimal user data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we only collect the necessary user data to minimize the risk of data breaches.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="5-code-review-and-testing">5. Code Review and Testing<a href="https://dopebase.com/blog/react-native-security-best-practices#5-code-review-and-testing" class="hash-link" aria-label="Direct link to 5. Code Review and Testing" title="Direct link to 5. Code Review and Testing" translate="no">​</a></h2>
<p>Performing regular code reviews and testing is essential to identify and fix security vulnerabilities. Here are some best practices for code review and testing in React Native applications:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="performing-regular-code-reviews">Performing Regular Code Reviews<a href="https://dopebase.com/blog/react-native-security-best-practices#performing-regular-code-reviews" class="hash-link" aria-label="Direct link to Performing Regular Code Reviews" title="Direct link to Performing Regular Code Reviews" translate="no">​</a></h3>
<p>Regular code reviews help identify potential security vulnerabilities and ensure that best practices are followed. Review the code for security flaws, such as insecure API usage, incorrect access controls, or missing input validation.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: No code review process</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Regular code reviews</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><br></span></code></pre></div></div>
<p>In the above example, we emphasize the importance of regular code reviews to maintain code quality and security.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="automated-security-testing">Automated Security Testing<a href="https://dopebase.com/blog/react-native-security-best-practices#automated-security-testing" class="hash-link" aria-label="Direct link to Automated Security Testing" title="Direct link to Automated Security Testing" translate="no">​</a></h3>
<p>Automated security testing tools can help identify common security issues such as cross-site scripting, SQL injection, or insecure API usage. Integrate automated security testing into your development process to catch vulnerabilities early.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: No automated security testing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Integrate automated security testing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><br></span></code></pre></div></div>
<p>In the above example, we emphasize the importance of integrating automated security testing into the development process.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="penetration-testing">Penetration Testing<a href="https://dopebase.com/blog/react-native-security-best-practices#penetration-testing" class="hash-link" aria-label="Direct link to Penetration Testing" title="Direct link to Penetration Testing" translate="no">​</a></h3>
<p>Penetration testing involves simulating real-world attacks to identify potential vulnerabilities in the application. Perform periodic penetration tests to evaluate the security posture of your React Native application.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: No penetration testing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Perform penetration testing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><br></span></code></pre></div></div>
<p>In the above example, we highlight the significance of performing periodic penetration tests to ensure the security of the application.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="6-keeping-dependencies-updated">6. Keeping Dependencies Updated<a href="https://dopebase.com/blog/react-native-security-best-practices#6-keeping-dependencies-updated" class="hash-link" aria-label="Direct link to 6. Keeping Dependencies Updated" title="Direct link to 6. Keeping Dependencies Updated" translate="no">​</a></h2>
<p>Keeping dependencies updated is important to ensure that security vulnerabilities in third-party libraries are addressed. Here are some best practices for keeping dependencies updated in React Native applications:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="monitoring-for-vulnerabilities">Monitoring for Vulnerabilities<a href="https://dopebase.com/blog/react-native-security-best-practices#monitoring-for-vulnerabilities" class="hash-link" aria-label="Direct link to Monitoring for Vulnerabilities" title="Direct link to Monitoring for Vulnerabilities" translate="no">​</a></h3>
<p>Regularly monitor for vulnerabilities in the dependencies used by your React Native application. Use tools such as npm audit or third-party vulnerability scanners to identify and address vulnerabilities.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Ignoring dependency vulnerabilities</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Monitor for vulnerabilities</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><br></span></code></pre></div></div>
<p>In the above example, we emphasize the importance of monitoring for vulnerabilities in dependencies.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="regularly-updating-dependencies">Regularly Updating Dependencies<a href="https://dopebase.com/blog/react-native-security-best-practices#regularly-updating-dependencies" class="hash-link" aria-label="Direct link to Regularly Updating Dependencies" title="Direct link to Regularly Updating Dependencies" translate="no">​</a></h3>
<p>Keep your dependencies up to date by regularly updating to the latest versions. Update dependencies manually or use tools such as npm-check-updates to automate the process.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Bad practice: Using outdated dependencies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Good practice: Regularly update dependencies</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><br></span></code></pre></div></div>
<p>In the above example, we highlight the importance of regularly updating dependencies to ensure the latest security patches are applied.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-security-best-practices#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we have explored 10 best practices for ensuring the security of your React Native applications. By following these practices, you can significantly reduce the risk of security vulnerabilities and protect user data. Remember to implement secure coding practices, secure authentication and authorization, ensure network security, secure data storage, perform regular code reviews and testing, and keep dependencies updated. By prioritizing security throughout the development process, you can build secure and reliable React Native applications.</p>]]></content:encoded>
            <category>Authentication</category>
            <category>Authorization</category>
            <category>Best Practices</category>
            <category>Code Review</category>
            <category>Data Storage</category>
            <category>Network Security</category>
            <category>React Native</category>
            <category>Security</category>
        </item>
        <item>
            <title><![CDATA[Introduction to React Native State Management: Zustand]]></title>
            <link>https://dopebase.com/blog/react-native-state-management-zustand</link>
            <guid>https://dopebase.com/blog/react-native-state-management-zustand</guid>
            <pubDate>Tue, 07 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Use Zustand for shared client state while keeping server state, navigation state, forms, and ephemeral component state in their proper owners.]]></description>
            <content:encoded><![CDATA[<p>Use Zustand for shared client state while keeping server state, navigation state, forms, and ephemeral component state in their proper owners. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native state management zustand" src="https://dopebase.com/assets/images/01-cover6-a47ccb43-2763e82e96a0cd116cdf9fbfa8f1ba5a.jpg" width="1100" height="880" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-state-management-zustand#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Use Zustand for shared client state while keeping server state, navigation state, forms, and ephemeral component state in their proper owners.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-state-management-zustand#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Create small domain stores instead of one global object.</li>
<li class="">Use selectors to limit subscriptions and rerenders.</li>
<li class="">Persist only stable, non-sensitive state with migrations.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-state-management-zustand#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-state-management-zustand#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native-state-management">What is React Native State Management?<a href="https://dopebase.com/blog/react-native-state-management-zustand#what-is-react-native-state-management" class="hash-link" aria-label="Direct link to What is React Native State Management?" title="Direct link to What is React Native State Management?" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction-to-state-management">Introduction to state management<a href="https://dopebase.com/blog/react-native-state-management-zustand#introduction-to-state-management" class="hash-link" aria-label="Direct link to Introduction to state management" title="Direct link to Introduction to state management" translate="no">​</a></h3>
<p>State management in React Native refers to the process of managing and updating the state of an application. The state represents the current data of the application and is used to render the UI and handle user interactions. In React Native, state management becomes important as the application grows in complexity and requires handling different data sources and components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-state-management-is-important-in-react-native">Why state management is important in React Native<a href="https://dopebase.com/blog/react-native-state-management-zustand#why-state-management-is-important-in-react-native" class="hash-link" aria-label="Direct link to Why state management is important in React Native" title="Direct link to Why state management is important in React Native" translate="no">​</a></h3>
<p>State management is important in React Native for several reasons. Firstly, it helps in organizing and centralizing the application's data, making it easier to manage and update. With state management, we can avoid passing data through multiple levels of components using props, leading to cleaner and more maintainable code. It also enables better separation of concerns and improves code reusability.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="different-state-management-solutions-in-react-native">Different state management solutions in React Native<a href="https://dopebase.com/blog/react-native-state-management-zustand#different-state-management-solutions-in-react-native" class="hash-link" aria-label="Direct link to Different state management solutions in React Native" title="Direct link to Different state management solutions in React Native" translate="no">​</a></h3>
<p>There are several state management solutions available in React Native, each with its own benefits and use cases. Some popular options include Redux, MobX, and Zustand. These libraries provide a set of tools and patterns to manage the state of the application effectively.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="introducing-zustand">Introducing Zustand<a href="https://dopebase.com/blog/react-native-state-management-zustand#introducing-zustand" class="hash-link" aria-label="Direct link to Introducing Zustand" title="Direct link to Introducing Zustand" translate="no">​</a></h3>
<p>Zustand is a lightweight state management library for React applications. It provides a simple API to define and update the state, enabling efficient state management without the need for any external dependencies. Zustand leverages the concept of stores, actions, and selectors to manage and retrieve data from the state. It also offers built-in support for immutability using the immer library.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="overview-of-zustand">Overview of Zustand<a href="https://dopebase.com/blog/react-native-state-management-zustand#overview-of-zustand" class="hash-link" aria-label="Direct link to Overview of Zustand" title="Direct link to Overview of Zustand" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="advantages-of-using-zustand">Advantages of using Zustand<a href="https://dopebase.com/blog/react-native-state-management-zustand#advantages-of-using-zustand" class="hash-link" aria-label="Direct link to Advantages of using Zustand" title="Direct link to Advantages of using Zustand" translate="no">​</a></h3>
<p>Zustand has several advantages that make it a popular choice for state management in React Native applications. Firstly, it has a small footprint and minimal setup, making it easy to integrate and use. It also offers excellent performance due to its efficient reactivity system. Zustand uses a hook-based API, allowing for seamless integration with functional components. Additionally, it provides a built-in devtools extension for debugging and inspecting the state.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="getting-started-with-zustand">Getting started with Zustand<a href="https://dopebase.com/blog/react-native-state-management-zustand#getting-started-with-zustand" class="hash-link" aria-label="Direct link to Getting started with Zustand" title="Direct link to Getting started with Zustand" translate="no">​</a></h3>
<p>To get started with Zustand, we need to install the library using npm or yarn. Open your terminal and run the following command:</p>
<div class="language-shell codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-shell codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> zustand</span><br></span></code></pre></div></div>
<p>Once the installation is complete, we can import Zustand into our project:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">create</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'zustand'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>Now we are ready to create a store using Zustand.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-a-store">Creating a Store<a href="https://dopebase.com/blog/react-native-state-management-zustand#creating-a-store" class="hash-link" aria-label="Direct link to Creating a Store" title="Direct link to Creating a Store" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="defining-initial-state">Defining initial state<a href="https://dopebase.com/blog/react-native-state-management-zustand#defining-initial-state" class="hash-link" aria-label="Direct link to Defining initial state" title="Direct link to Defining initial state" translate="no">​</a></h3>
<p>In Zustand, a store represents the state of our application. We can define the initial state and create actions to modify it. To create a store, we use the <code>create</code> function provided by Zustand. Let's define a simple counter store:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> counterStore </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter keyword" style="color:#00009f">set</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we create a store called <code>counterStore</code> using the <code>create</code> function. We pass a function as an argument to <code>create</code>, which receives a <code>set</code> function as a parameter. The <code>set</code> function is used to update the state of the store.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-actions">Creating actions<a href="https://dopebase.com/blog/react-native-state-management-zustand#creating-actions" class="hash-link" aria-label="Direct link to Creating actions" title="Direct link to Creating actions" translate="no">​</a></h3>
<p>Actions in Zustand are functions that modify the state of the store. We can define actions within the <code>create</code> function using the <code>set</code> function provided as an argument. Let's add an action to increment the count in our counter store:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> counterStore </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter keyword" style="color:#00009f">set</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function-variable function" style="color:#d73a49">increment</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we add an <code>increment</code> action to our counter store. The <code>increment</code> action is a function that uses the <code>set</code> function to update the state. We access the current state using the <code>state</code> parameter and increment the <code>count</code> property by 1.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-selectors">Using selectors<a href="https://dopebase.com/blog/react-native-state-management-zustand#using-selectors" class="hash-link" aria-label="Direct link to Using selectors" title="Direct link to Using selectors" translate="no">​</a></h3>
<p>Selectors in Zustand allow us to retrieve specific data from the state. We can define selectors within the <code>create</code> function using the <code>get</code> function provided as an argument. Let's add a selector to retrieve the count from our counter store:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> counterStore </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">set</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> </span><span class="token parameter keyword" style="color:#00009f">get</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function-variable function" style="color:#d73a49">increment</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function-variable function" style="color:#d73a49">getCount</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we add a <code>getCount</code> selector to our counter store. The <code>getCount</code> selector is a function that uses the <code>get</code> function to retrieve the <code>count</code> property from the state.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="updating-state">Updating State<a href="https://dopebase.com/blog/react-native-state-management-zustand#updating-state" class="hash-link" aria-label="Direct link to Updating State" title="Direct link to Updating State" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="modifying-state-using-actions">Modifying state using actions<a href="https://dopebase.com/blog/react-native-state-management-zustand#modifying-state-using-actions" class="hash-link" aria-label="Direct link to Modifying state using actions" title="Direct link to Modifying state using actions" translate="no">​</a></h3>
<p>To modify the state of the store, we can call the actions defined in the <code>create</code> function. Let's update the count in our counter store using the <code>increment</code> action:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">counterStore</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">increment</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we call the <code>increment</code> action defined in our counter store. This will increment the count by 1.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-immer-for-immutable-updates">Using immer for immutable updates<a href="https://dopebase.com/blog/react-native-state-management-zustand#using-immer-for-immutable-updates" class="hash-link" aria-label="Direct link to Using immer for immutable updates" title="Direct link to Using immer for immutable updates" translate="no">​</a></h3>
<p>Zustand provides built-in support for immutability using the immer library. This allows us to update the state in a mutable way while still ensuring immutability. Let's modify our <code>increment</code> action to use immer:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> counterStore </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter keyword" style="color:#00009f">set</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function-variable function" style="color:#d73a49">increment</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we modify the <code>increment</code> action to use the <code>set</code> function with an immer callback. Inside the callback, we can directly modify the state using mutable updates.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="subscribing-to-state-changes">Subscribing to State Changes<a href="https://dopebase.com/blog/react-native-state-management-zustand#subscribing-to-state-changes" class="hash-link" aria-label="Direct link to Subscribing to State Changes" title="Direct link to Subscribing to State Changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-zustands-subscribe-function">Using Zustand's subscribe function<a href="https://dopebase.com/blog/react-native-state-management-zustand#using-zustands-subscribe-function" class="hash-link" aria-label="Direct link to Using Zustand's subscribe function" title="Direct link to Using Zustand's subscribe function" translate="no">​</a></h3>
<p>Zustand provides a <code>subscribe</code> function that allows us to subscribe to state changes in the store. We can use the <code>subscribe</code> function to react to state changes and update our components accordingly. Let's subscribe to the count changes in our counter store:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">counterStore</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Count:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we call the <code>subscribe</code> function on our counter store and pass a callback function. The callback function is called whenever the state of the store changes, and we can access the updated state within the callback.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="reacting-to-state-changes">Reacting to state changes<a href="https://dopebase.com/blog/react-native-state-management-zustand#reacting-to-state-changes" class="hash-link" aria-label="Direct link to Reacting to state changes" title="Direct link to Reacting to state changes" translate="no">​</a></h3>
<p>To react to state changes in our React Native components, we can use Zustand's <code>useStore</code> hook. The <code>useStore</code> hook allows us to access the state and actions defined in the store. Let's update a component to display the count from our counter store:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useStore </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./counterStore'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">CounterComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> count </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useStore</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we import the <code>useStore</code> hook from our counter store. We use the <code>useStore</code> hook with a selector function to retrieve the count from the state. The component will automatically update whenever the count changes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="combining-zustand-with-react-native-components">Combining Zustand with React Native Components<a href="https://dopebase.com/blog/react-native-state-management-zustand#combining-zustand-with-react-native-components" class="hash-link" aria-label="Direct link to Combining Zustand with React Native Components" title="Direct link to Combining Zustand with React Native Components" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-zustand-with-functional-components">Using Zustand with functional components<a href="https://dopebase.com/blog/react-native-state-management-zustand#using-zustand-with-functional-components" class="hash-link" aria-label="Direct link to Using Zustand with functional components" title="Direct link to Using Zustand with functional components" translate="no">​</a></h3>
<p>Zustand seamlessly integrates with functional components in React Native. We can use the <code>useStore</code> hook to access the state and actions defined in the store. Let's create a functional component that increments the count on button press:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useStore </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./counterStore'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">CounterComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> count </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useStore</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> increment </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useStore</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">increment</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Increment"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">increment</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we import the <code>useStore</code> hook from our counter store. We use the <code>useStore</code> hook to access the count from the state and the increment action. When the button is pressed, the <code>increment</code> action will be called, updating the count in the store.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="integrating-zustand-with-class-components">Integrating Zustand with class components<a href="https://dopebase.com/blog/react-native-state-management-zustand#integrating-zustand-with-class-components" class="hash-link" aria-label="Direct link to Integrating Zustand with class components" title="Direct link to Integrating Zustand with class components" translate="no">​</a></h3>
<p>Zustand can also be integrated with class components in React Native. We can use the <code>useStore</code> hook inside a higher-order component to access the state and actions defined in the store. Let's create a class component that displays the count from our counter store:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> withStore </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./counterStore'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">CounterComponent</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token plain"> </span><span class="token class-name">React</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Component</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> count </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">props</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withStore</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">CounterComponent</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code, we import the <code>withStore</code> higher-order component from our counter store. We wrap our class component with <code>withStore</code> and pass a selector function as an argument. The selector function maps the state to component props, allowing us to access the count.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-state-management-zustand#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored the concept of state management in React Native and learned about the advantages of using Zustand as a state management solution. We covered how to create a store using Zustand, define initial state, create actions to modify the state, and use selectors to retrieve specific data. We also discussed how to subscribe to state changes and integrate Zustand with React Native components. Zustand offers a simple and efficient way to manage the state of our React Native applications, leading to cleaner and more maintainable code.</p>]]></content:encoded>
            <category>React Native</category>
            <category>State Management</category>
            <category>Zustand</category>
        </item>
        <item>
            <title><![CDATA[Introduction to React Native Testing: React Native Testing Library]]></title>
            <link>https://dopebase.com/blog/react-native-testing-library-introduction-react-native</link>
            <guid>https://dopebase.com/blog/react-native-testing-library-introduction-react-native</guid>
            <pubDate>Mon, 06 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Test React Native behavior through accessible queries and realistic user actions, with native boundaries mocked only where necessary.]]></description>
            <content:encoded><![CDATA[<p>Test React Native behavior through accessible queries and realistic user actions, with native boundaries mocked only where necessary. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native testing library introduction react native" src="https://dopebase.com/assets/images/01-cover1-71ae5b21-b5317d56fa12a6eef906753dc9bf7832.jpg" width="800" height="563" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Test React Native behavior through accessible queries and realistic user actions, with native boundaries mocked only where necessary.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Prefer roles, labels, and visible text over implementation selectors.</li>
<li class="">Test loading, failure, retry, and navigation behavior.</li>
<li class="">Keep a small device-level suite for native integrations.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native-testing">What is React Native Testing?<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#what-is-react-native-testing" class="hash-link" aria-label="Direct link to What is React Native Testing?" title="Direct link to What is React Native Testing?" translate="no">​</a></h2>
<p>React Native testing refers to the process of verifying the correctness and functionality of React Native applications through automated tests. It involves writing test cases that simulate user interactions, check component renderings, and validate the behavior of the application.</p>
<p>The React Native Testing Library is a popular testing library that provides utility functions and tools for testing React Native components, Redux actions and reducers, and navigation components. It encourages developers to write tests that focus on the user's perspective and the behavior of the application, rather than implementation details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-is-testing-important-in-react-native-development">Why is Testing Important in React Native Development?<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#why-is-testing-important-in-react-native-development" class="hash-link" aria-label="Direct link to Why is Testing Important in React Native Development?" title="Direct link to Why is Testing Important in React Native Development?" translate="no">​</a></h2>
<p>Testing is crucial in React Native development for several reasons. Firstly, it helps ensure the stability and reliability of the application by catching bugs and regressions early in the development process. It allows developers to verify that their code works as expected and prevents issues from reaching production.</p>
<p>Secondly, testing promotes code maintainability and scalability. By writing tests, developers can create a safety net that allows them to confidently refactor and modify code without introducing bugs. It also serves as documentation for the behavior and requirements of the application.</p>
<p>Lastly, testing encourages good development practices such as modular and testable code. It forces developers to write code that is decoupled and independent, making it easier to test and reason about.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="getting-started-with-react-native-testing">Getting Started with React Native Testing<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#getting-started-with-react-native-testing" class="hash-link" aria-label="Direct link to Getting Started with React Native Testing" title="Direct link to Getting Started with React Native Testing" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="setting-up-the-testing-environment">Setting up the Testing Environment<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#setting-up-the-testing-environment" class="hash-link" aria-label="Direct link to Setting up the Testing Environment" title="Direct link to Setting up the Testing Environment" translate="no">​</a></h3>
<p>To get started with React Native testing, we need to set up the testing environment. This involves installing the necessary dependencies and configuring the testing framework.</p>
<p>We will use the Jest testing framework, which is highly recommended for React Native applications. Jest provides a simple and powerful way to write and run tests, with built-in support for mocking and assertions.</p>
<p>To install Jest, run the following command in your project directory:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install --save-dev jest</span><br></span></code></pre></div></div>
<p>Once Jest is installed, we need to create a configuration file called <code>jest.config.js</code> in the root of our project. This file specifies the settings and options for Jest. Here is an example configuration:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">module</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">preset</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">setupFilesAfterEnv</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'@testing-library/jest-native/extend-expect'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">transformIgnorePatterns</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'node_modules/(?!(jest-)?react-native|@react-native-community|@react-navigation)'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this configuration, we specify the preset as 'react-native' to enable the React Native specific setup. We also include the <code>@testing-library/jest-native</code> package to extend Jest's expect assertions with additional matchers for React Native components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="writing-your-first-test">Writing Your First Test<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#writing-your-first-test" class="hash-link" aria-label="Direct link to Writing Your First Test" title="Direct link to Writing Your First Test" translate="no">​</a></h3>
<p>Now that the testing environment is set up, let's write our first test. We will create a simple test that checks if a React Native component renders correctly.</p>
<p>Create a new file called <code>App.test.js</code> in the <code>__tests__</code> folder in your project root directory. Add the following code to the file:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">App</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../App'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'renders correctly'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> helloText </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Hello, World!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">helloText</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeDefined</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we import the <code>render</code> function from the <code>@testing-library/react-native</code> package. We also import the <code>App</code> component that we want to test.</p>
<p>The <code>render</code> function is used to render the component and return a set of query functions that allow us to interact with the rendered component. We can use these query functions to find elements in the component and make assertions.</p>
<p>In our test, we render the <code>App</code> component and use the <code>getByText</code> query function to find the element with the text 'Hello, World!'. We then assert that the <code>helloText</code> element is defined, indicating that the component rendered correctly.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If everything is set up correctly, you should see the test output indicating that the test passed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="understanding-test-suites-and-test-cases">Understanding Test Suites and Test Cases<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#understanding-test-suites-and-test-cases" class="hash-link" aria-label="Direct link to Understanding Test Suites and Test Cases" title="Direct link to Understanding Test Suites and Test Cases" translate="no">​</a></h3>
<p>In Jest, tests are organized into test suites and test cases. A test suite is a collection of test cases that are related to a specific feature or component. It helps organize tests and provides a way to run tests selectively.</p>
<p>A test case is an individual test that checks a specific behavior or functionality. It consists of one or more test assertions that validate the expected behavior of the code being tested.</p>
<p>In our example, we created a test suite with a single test case. We used the <code>test</code> function provided by Jest to define the test case. The first argument of the <code>test</code> function is the description of the test case, and the second argument is a function that contains the test code.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-components">Testing Components<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-components" class="hash-link" aria-label="Direct link to Testing Components" title="Direct link to Testing Components" translate="no">​</a></h2>
<p>Components are the building blocks of React Native applications. Testing components ensures that they render correctly, handle user interactions, and interact with other components and dependencies as expected.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-component-rendering">Testing Component Rendering<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-component-rendering" class="hash-link" aria-label="Direct link to Testing Component Rendering" title="Direct link to Testing Component Rendering" translate="no">​</a></h3>
<p>One of the most common tests for React Native components is to check if they render correctly. We can use the React Native Testing Library to easily render components and make assertions about their rendered output.</p>
<p>Let's create a simple example to demonstrate component rendering testing. Create a new file called <code>Button.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TouchableOpacity</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">Button</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> onPress</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> title </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">onPress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">Button</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a simple <code>Button</code> component that renders a <code>TouchableOpacity</code> and a <code>Text</code> component. It takes two props, <code>onPress</code> and <code>title</code>, which are used to configure the behavior and text of the button.</p>
<p>Now, let's write a test to check if the <code>Button</code> component renders correctly. Create a new file called <code>Button.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Button</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../Button'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'renders correctly'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Press Me"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> button </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Press Me'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">button</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeDefined</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we render the <code>Button</code> component with the <code>title</code> prop set to "Press Me". We then use the <code>getByText</code> query function to find the button element with the text "Press Me". Finally, we assert that the <code>button</code> element is defined, indicating that the component rendered correctly.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>Button</code> component renders correctly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-component-interactions">Testing Component Interactions<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-component-interactions" class="hash-link" aria-label="Direct link to Testing Component Interactions" title="Direct link to Testing Component Interactions" translate="no">​</a></h3>
<p>In addition to checking if a component renders correctly, we often need to test its interactions. This involves simulating user interactions and verifying that the component behaves as expected.</p>
<p>To test component interactions, we can use the React Native Testing Library's <code>fireEvent</code> function to fire events on the rendered component. We can then make assertions about the resulting behavior.</p>
<p>Let's extend our <code>Button</code> component example to include an <code>onPress</code> handler. Create a new file called <code>Button.js</code> and replace the previous code with the following:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TouchableOpacity</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">Button</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> onPress</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> title </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">handlePress</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">onPress</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">onPress</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">handlePress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">TouchableOpacity</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">Button</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this updated version, the <code>Button</code> component calls the <code>onPress</code> handler when the button is pressed. The <code>onPress</code> handler is optional, allowing the component to be used with or without an action.</p>
<p>Now, let's write a test to check if the <code>Button</code> component correctly invokes the <code>onPress</code> handler when pressed. Create a new file called <code>Button.test.js</code> and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> fireEvent </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Button</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../Button'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'invokes onPress handler'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> onPress </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> jest</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Press Me"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">onPress</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> button </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Press Me'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">button</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">onPress</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toHaveBeenCalled</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we define an <code>onPress</code> handler using Jest's <code>jest.fn()</code> function. This allows us to track whether the handler is invoked during the test.</p>
<p>We render the <code>Button</code> component with the <code>onPress</code> prop set to the <code>onPress</code> handler. We then use the <code>getByText</code> query function to find the button element with the text "Press Me". After that, we simulate a press event on the button using the <code>fireEvent.press</code> function. Finally, we assert that the <code>onPress</code> handler has been called.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>Button</code> component correctly invokes the <code>onPress</code> handler when pressed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="mocking-dependencies">Mocking Dependencies<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#mocking-dependencies" class="hash-link" aria-label="Direct link to Mocking Dependencies" title="Direct link to Mocking Dependencies" translate="no">​</a></h3>
<p>When testing components, we often need to mock dependencies such as APIs, external libraries, or Redux stores. Mocking dependencies allows us to control the behavior of the dependencies during testing and isolate the component being tested.</p>
<p>To mock dependencies, we can use Jest's mocking capabilities. Jest provides a <code>jest.mock()</code> function that allows us to replace the implementation of a module with a mock version.</p>
<p>Let's extend our <code>Button</code> component example to include a dependency on an API. Create a new file called <code>api.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">fetchData</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Simulate API call delay</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Promise</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">resolve</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">setTimeout</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">resolve</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Data from API'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a simple API module that exports a <code>fetchData</code> function. The function simulates an API call delay using a promise and returns a string.</p>
<p>Now, let's write a test for the <code>Button</code> component that mocks the <code>fetchData</code> API. Create a new file called <code>Button.test.js</code> and replace the previous code with the following:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> fireEvent </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Button</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../Button'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> fetchData </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../api'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">jest</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">mock</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'../api'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'renders correctly with data from API'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fetchData</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">mockResolvedValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Mocked Data'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> findByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Fetch Data"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> button </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Fetch Data'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">button</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> dataText </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">findByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Mocked Data'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">dataText</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeDefined</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we use Jest's <code>jest.mock()</code> function to mock the <code>fetchData</code> API module. We provide a mock implementation using <code>mockResolvedValue</code> to return a resolved promise with the string 'Mocked Data'.</p>
<p>We render the <code>Button</code> component without passing an <code>onPress</code> handler, as we are only interested in testing the rendering behavior. We use the <code>getByText</code> query function to find the button element with the text "Fetch Data".</p>
<p>When the button is pressed, the <code>fetchData</code> API is called. We use the <code>findByText</code> query function to wait for the component to render the text 'Mocked Data', indicating that the API call has completed. Finally, we assert that the <code>dataText</code> element is defined.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>Button</code> component renders correctly with the mocked data from the API.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-redux-in-react-native">Testing Redux in React Native<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-redux-in-react-native" class="hash-link" aria-label="Direct link to Testing Redux in React Native" title="Direct link to Testing Redux in React Native" translate="no">​</a></h2>
<p>Redux is a popular state management library used in many React Native applications. Testing Redux code involves validating the behavior of Redux actions, reducers, and middleware.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-redux-actions">Testing Redux Actions<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-redux-actions" class="hash-link" aria-label="Direct link to Testing Redux Actions" title="Direct link to Testing Redux Actions" translate="no">​</a></h3>
<p>Redux actions are functions that describe changes to the application state. Testing Redux actions involves verifying that the action creators return the correct action objects.</p>
<p>Let's create a simple example to demonstrate testing Redux actions. Create a new file called <code>counterActions.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">increment</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">decrement</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'DECREMENT'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have two action creators, <code>increment</code> and <code>decrement</code>, that return objects representing the corresponding actions.</p>
<p>Now, let's write a test to check if the <code>increment</code> action creator returns the correct action object. Create a new file called <code>counterActions.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> increment </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../counterActions'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'increment action returns the correct action object'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> action </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">increment</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toEqual</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we call the <code>increment</code> action creator and store the result in the <code>action</code> variable. We then assert that the <code>action</code> object is equal to <code>&amp;#123; type: 'INCREMENT' &amp;#125;</code>.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>increment</code> action creator returns the correct action object.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-redux-reducers">Testing Redux Reducers<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-redux-reducers" class="hash-link" aria-label="Direct link to Testing Redux Reducers" title="Direct link to Testing Redux Reducers" translate="no">​</a></h3>
<p>Redux reducers are pure functions that specify how the application state should change in response to actions. Testing Redux reducers involves verifying that the reducers produce the expected state given a specific action.</p>
<p>Let's create a simple example to demonstrate testing Redux reducers. Create a new file called <code>counterReducer.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> initialState </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">counterReducer</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">state </span><span class="token parameter operator" style="color:#393A34">=</span><span class="token parameter"> initialState</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">action</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">type</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'DECREMENT'</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">count</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword module" style="color:#00009f">default</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> state</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> counterReducer</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a <code>counterReducer</code> function that takes the current state and an action as arguments. It handles the 'INCREMENT' and 'DECREMENT' actions by updating the count property of the state accordingly.</p>
<p>Now, let's write a test to check if the <code>counterReducer</code> produces the expected state given an 'INCREMENT' action. Create a new file called <code>counterReducer.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">counterReducer</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../counterReducer'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'counterReducer increments count in state'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> state </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> action </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> nextState </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">counterReducer</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">state</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">nextState</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toEqual</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we define the initial state and the 'INCREMENT' action. We call the <code>counterReducer</code> function with the initial state and the action, and store the result in the <code>nextState</code> variable. Finally, we assert that the <code>nextState</code> is equal to <code>&amp;#123; count: 1 &amp;#125;</code>.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>counterReducer</code> produces the expected state given an 'INCREMENT' action.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-redux-middleware">Testing Redux Middleware<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-redux-middleware" class="hash-link" aria-label="Direct link to Testing Redux Middleware" title="Direct link to Testing Redux Middleware" translate="no">​</a></h3>
<p>Redux middleware intercepts dispatched actions and can modify, delay, or dispatch additional actions. Testing Redux middleware involves verifying that the middleware functions correctly handle actions and produce the expected behavior.</p>
<p>Let's create a simple example to demonstrate testing Redux middleware. Create a new file called <code>loggerMiddleware.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">loggerMiddleware</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token parameter">store</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token parameter">next</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token parameter">action</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Dispatching action:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Next state:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> result</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> loggerMiddleware</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a <code>loggerMiddleware</code> function that logs information about dispatched actions and the resulting state. It wraps the next middleware or the reducer during the dispatch process.</p>
<p>Now, let's write a test to check if the <code>loggerMiddleware</code> logs the dispatched action and the next state. Create a new file called <code>loggerMiddleware.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">loggerMiddleware</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../loggerMiddleware'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'loggerMiddleware logs actions and next state'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> store </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">getState</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> jest</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> next </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> jest</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> action </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">loggerMiddleware</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">store</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">next</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">log</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toHaveBeenCalledWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Dispatching action:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> action</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">log</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toHaveBeenCalledWith</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Next state:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we create mock functions for the store's <code>getState</code> method and the next middleware or the reducer. We define the <code>action</code> to be dispatched.</p>
<p>We call the <code>loggerMiddleware</code> function with the mock store, the mock next function, and the action. We then assert that <code>console.log</code> has been called with the expected log messages.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>loggerMiddleware</code> correctly logs the dispatched action and the next state.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-navigation-in-react-native">Testing Navigation in React Native<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-navigation-in-react-native" class="hash-link" aria-label="Direct link to Testing Navigation in React Native" title="Direct link to Testing Navigation in React Native" translate="no">​</a></h2>
<p>Navigation is a crucial part of many React Native applications. Testing navigation components involves verifying that screens are rendered correctly and that navigation state changes as expected.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-navigation-components">Testing Navigation Components<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-navigation-components" class="hash-link" aria-label="Direct link to Testing Navigation Components" title="Direct link to Testing Navigation Components" translate="no">​</a></h3>
<p>React Navigation is a popular navigation library for React Native applications. Testing navigation components involves simulating navigation actions and verifying that the screens are navigated correctly.</p>
<p>To test navigation components, we can use the React Navigation Testing Library. This library provides utility functions for rendering navigation components and interacting with the navigation state.</p>
<p>Let's create a simple example to demonstrate testing navigation components with React Navigation. First, make sure you have React Navigation installed in your project:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install @react-navigation/native</span><br></span></code></pre></div></div>
<p>Create a new file called <code>HomeScreen.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">HomeScreen</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> navigation </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Welcome</span><span class="token plain"> to the </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token maybe-class-name">Screen</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Go to Details"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> navigation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">navigate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Details'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a <code>HomeScreen</code> component that renders some text and a button. When the button is pressed, the component navigates to the 'Details' screen using the <code>navigation.navigate</code> function.</p>
<p>Now, let's write a test to check if the <code>HomeScreen</code> component navigates to the 'Details' screen when the button is pressed. Create a new file called <code>HomeScreen.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> fireEvent </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createNativeStackNavigator </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native-stack'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">HomeScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../HomeScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'navigates to Details screen on button press'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Stack</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createNativeStackNavigator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Details"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Details</span><span class="token plain"> </span><span class="token maybe-class-name">Screen</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> button </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Go to Details'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">button</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> detailsScreen </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Details Screen'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">detailsScreen</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeDefined</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we create a navigation stack using the <code>createNativeStackNavigator</code> function from React Navigation. We define two screens, 'Home' and 'Details', where 'Home' is the screen we want to test and 'Details' is a dummy screen with some text.</p>
<p>We render the navigation container and the stack navigator with the <code>HomeScreen</code> component as the initial screen. We use the <code>getByText</code> query function to find the button element with the text 'Go to Details'.</p>
<p>When the button is pressed, we navigate to the 'Details' screen using the <code>fireEvent.press</code> function. Finally, we assert that the 'Details' screen is rendered by checking if the 'Details Screen' text is defined.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>HomeScreen</code> component navigates to the 'Details' screen correctly when the button is pressed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="navigating-between-screens">Navigating Between Screens<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#navigating-between-screens" class="hash-link" aria-label="Direct link to Navigating Between Screens" title="Direct link to Navigating Between Screens" translate="no">​</a></h3>
<p>In addition to testing navigation actions, we often need to test navigating between screens manually. This involves simulating user interactions and verifying that the screens change as expected.</p>
<p>To navigate between screens manually, we can use the <code>fireEvent</code> function from the React Native Testing Library. We can simulate button presses, gestures, or other events to trigger navigation actions.</p>
<p>Let's extend our previous example to demonstrate manual screen navigation. Create a new file called <code>DetailsScreen.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">DetailsScreen</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> navigation </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Welcome</span><span class="token plain"> to the </span><span class="token maybe-class-name">Details</span><span class="token plain"> </span><span class="token maybe-class-name">Screen</span><span class="token operator" style="color:#393A34">!</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Go back to Home"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> navigation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">goBack</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">DetailsScreen</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a <code>DetailsScreen</code> component that renders some text and a button. When the button is pressed, the component navigates back to the previous screen using the <code>navigation.goBack</code> function.</p>
<p>Now, let's write a test to check if the <code>DetailsScreen</code> component navigates back to the 'Home' screen when the button is pressed. Create a new file called <code>DetailsScreen.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> fireEvent </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createNativeStackNavigator </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native-stack'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">HomeScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../HomeScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">DetailsScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../DetailsScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'navigates back to Home screen on button press'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Stack</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createNativeStackNavigator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Details"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">DetailsScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> goButton </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Go to Details'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">goButton</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> backButton </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Go back to Home'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">backButton</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> homeScreen </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Welcome to the Home Screen!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">homeScreen</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeDefined</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we define a new screen called 'Details' with the <code>DetailsScreen</code> component. We render the navigation container and the stack navigator with the 'Home' and 'Details' screens.</p>
<p>We use the <code>getByText</code> query function to find the button elements with the text 'Go to Details' and 'Go back to Home'. We simulate button presses on these elements using the <code>fireEvent.press</code> function.</p>
<p>After navigating to the 'Details' screen, we navigate back to the 'Home' screen by pressing the back button. Finally, we assert that the 'Home' screen is rendered by checking if the 'Welcome to the Home Screen!' text is defined.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>DetailsScreen</code> component navigates back to the 'Home' screen correctly when the button is pressed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-navigation-state">Testing Navigation State<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-navigation-state" class="hash-link" aria-label="Direct link to Testing Navigation State" title="Direct link to Testing Navigation State" translate="no">​</a></h3>
<p>In addition to testing screen navigation, we often need to test navigation state changes. This involves verifying that the navigation state is updated correctly when actions are dispatched.</p>
<p>To test navigation state changes, we can use the React Navigation Testing Library's <code>renderWithNavigation</code> function. This function allows us to render a component with a navigation prop that we can use to interact with the navigation state.</p>
<p>Let's create a simple example to demonstrate testing navigation state changes. Create a new file called <code>CounterScreen.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">CounterScreen</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> navigation </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setCount</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">increment</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setCount</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">count </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">decrement</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setCount</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">count </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Increment"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">increment</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Decrement"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">decrement</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Go to Details"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> navigation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">navigate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Details'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">CounterScreen</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a <code>CounterScreen</code> component that renders a counter and buttons to increment and decrement the count. It also has a button to navigate to the 'Details' screen.</p>
<p>Now, let's write a test to check if the <code>CounterScreen</code> component updates the count correctly and navigates to the 'Details' screen. Create a new file called <code>CounterScreen.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> fireEvent </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createNativeStackNavigator </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@react-navigation/native-stack'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">CounterScreen</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../CounterScreen'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'updates count and navigates to Details screen'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">Stack</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createNativeStackNavigator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Counter"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token maybe-class-name">CounterScreen</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Details"</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Details</span><span class="token plain"> </span><span class="token maybe-class-name">Screen</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> countText </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Count: 0'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> incrementButton </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Increment'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> decrementButton </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Decrement'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> goButton </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Go to Details'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">incrementButton</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">countText</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toHaveTextContent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Count: 1'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">decrementButton</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">countText</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toHaveTextContent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Count: 0'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">goButton</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> detailsScreen </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Details Screen'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">detailsScreen</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBeDefined</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we define a <code>Counter</code> screen and a <code>Details</code> screen using the stack navigator. We render the navigation container and the stack navigator with the <code>CounterScreen</code> component as the initial screen.</p>
<p>We use the <code>getByText</code> query function to find the elements with the text 'Count: 0', 'Increment', 'Decrement', and 'Go to Details'. We simulate button presses on the increment and decrement buttons using the <code>fireEvent.press</code> function.</p>
<p>After each button press, we assert that the <code>countText</code> element has the expected text content. Finally, we simulate a button press on the 'Go to Details' button and assert that the 'Details' screen is rendered.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>CounterScreen</code> component updates the count correctly and navigates to the 'Details' screen.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-asynchronous-operations">Testing Asynchronous Operations<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-asynchronous-operations" class="hash-link" aria-label="Direct link to Testing Asynchronous Operations" title="Direct link to Testing Asynchronous Operations" translate="no">​</a></h2>
<p>React Native applications often involve asynchronous operations such as API calls or async actions. Testing asynchronous operations requires handling promises and async/await syntax correctly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-api-calls">Testing API Calls<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-api-calls" class="hash-link" aria-label="Direct link to Testing API Calls" title="Direct link to Testing API Calls" translate="no">​</a></h3>
<p>To test API calls in React Native, we can use a combination of mocking and async/await syntax. We can mock the API module and return a resolved or rejected promise with the expected data.</p>
<p>Let's create a simple example to demonstrate testing API calls. First, make sure you have the <code>axios</code> library installed in your project:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install axios</span><br></span></code></pre></div></div>
<p>Create a new file called <code>api.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">axios</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'axios'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">fetchData</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> axios</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'https://api.example.com/data'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">data</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have an <code>api.js</code> module that exports a <code>fetchData</code> function. The function uses the <code>axios</code> library to make an API call and return the response data.</p>
<p>Now, let's write a test to check if the <code>fetchData</code> function correctly handles the API response. Create a new file called <code>api.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">axios</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'axios'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> fetchData </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../api'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">jest</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">mock</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'axios'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'fetchData handles API response correctly'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> mockedData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Mocked Data'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  axios</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">get</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">mockResolvedValueOnce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">data</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> mockedData </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> data </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">mockedData</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we mock the <code>axios</code> library using Jest's <code>jest.mock</code> function. We provide a mock implementation for the <code>get</code> method using <code>mockResolvedValueOnce</code> to return a resolved promise with the <code>mockedData</code>.</p>
<p>We call the <code>fetchData</code> function and store the result in the <code>data</code> variable using async/await syntax. Finally, we assert that the <code>data</code> is equal to the <code>mockedData</code>.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>fetchData</code> function correctly handles the API response.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-asynchronous-actions">Testing Asynchronous Actions<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#testing-asynchronous-actions" class="hash-link" aria-label="Direct link to Testing Asynchronous Actions" title="Direct link to Testing Asynchronous Actions" translate="no">​</a></h3>
<p>In Redux applications, asynchronous actions are often used to handle side effects such as API calls or dispatching other actions. Testing asynchronous actions requires handling promises and using a middleware like Redux Thunk.</p>
<p>Let's create a simple example to demonstrate testing asynchronous actions. First, make sure you have the <code>redux-thunk</code> library installed in your project:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install redux-thunk</span><br></span></code></pre></div></div>
<p>Create a new file called <code>counterActions.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">incrementAsync</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token parameter">dispatch</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT_REQUEST'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Simulate API call delay</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Promise</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">resolve</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">setTimeout</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">resolve</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT_SUCCESS'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT_FAILURE'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">error</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">message</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have an <code>incrementAsync</code> action creator that performs an asynchronous operation. It dispatches 'INCREMENT_REQUEST' to indicate that the operation has started, waits for a delay, and then dispatches 'INCREMENT_SUCCESS'. If an error occurs, it dispatches 'INCREMENT_FAILURE' with the error message.</p>
<p>Now, let's write a test to check if the <code>incrementAsync</code> action creator correctly dispatches the expected actions. Create a new file called <code>counterActions.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">configureStore</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'redux-mock-store'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">thunk</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'redux-thunk'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> incrementAsync </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../counterActions'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> middlewares </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">thunk</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> mockStore </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">configureStore</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">middlewares</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'incrementAsync dispatches the correct actions'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> store </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mockStore</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">incrementAsync</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> actions </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getActions</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">actions</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toEqual</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT_REQUEST'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'INCREMENT_SUCCESS'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we create a mock Redux store using the <code>redux-mock-store</code> library and the <code>thunk</code> middleware. We dispatch the <code>incrementAsync</code> action using the store's <code>dispatch</code> method.</p>
<p>After the action has completed, we get the dispatched actions using the store's <code>getActions</code> method. Finally, we assert that the dispatched actions match the expected actions.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>incrementAsync</code> action creator correctly dispatches the expected actions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-promises-and-asyncawait">Handling Promises and Async/Await<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#handling-promises-and-asyncawait" class="hash-link" aria-label="Direct link to Handling Promises and Async/Await" title="Direct link to Handling Promises and Async/Await" translate="no">​</a></h3>
<p>When testing asynchronous operations, it is important to handle promises correctly and use async/await syntax to wait for asynchronous actions to complete.</p>
<p>Jest provides several ways to handle promises in tests. We can use async/await syntax, return promises from test functions, or use the <code>.resolves</code> and <code>.rejects</code> matchers.</p>
<p>Let's create a simple example to demonstrate handling promises in tests. Create a new file called <code>promise.js</code> in your project directory and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">fetchData</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Promise</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">resolve</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> reject</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setTimeout</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">resolve</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Data from Promise'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we have a <code>fetchData</code> function that returns a promise that resolves with the string 'Data from Promise' after a delay.</p>
<p>Now, let's write a test to check if the <code>fetchData</code> function resolves with the expected data. Create a new file called <code>promise.test.js</code> in the <code>__tests__</code> folder and add the following code:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> fetchData </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'../promise'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'fetchData resolves with the expected data'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> data </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toBe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Data from Promise'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this test, we use async/await syntax to wait for the <code>fetchData</code> function to complete and store the result in the <code>data</code> variable. Finally, we assert that the <code>data</code> is equal to the expected string.</p>
<p>To run the test, execute the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest</span><br></span></code></pre></div></div>
<p>If the test passes, it means that the <code>fetchData</code> function correctly resolves with the expected data.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="best-practices-for-react-native-testing">Best Practices for React Native Testing<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#best-practices-for-react-native-testing" class="hash-link" aria-label="Direct link to Best Practices for React Native Testing" title="Direct link to Best Practices for React Native Testing" translate="no">​</a></h2>
<p>Writing maintainable tests is crucial for the long-term success of a React Native project. Here are some best practices to follow when writing tests for your React Native applications:</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="writing-maintainable-tests">Writing Maintainable Tests<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#writing-maintainable-tests" class="hash-link" aria-label="Direct link to Writing Maintainable Tests" title="Direct link to Writing Maintainable Tests" translate="no">​</a></h3>
<ul>
<li class="">
<p>Keep tests focused and independent: Each test should focus on a specific behavior or functionality and be independent of other tests. This allows tests to be run individually or in any order without affecting the results.</p>
</li>
<li class="">
<p>Use descriptive test names: Test names should clearly describe what is being tested and what the expected outcome is. This makes it easier to understand and debug failing tests.</p>
</li>
<li class="">
<p>Avoid testing implementation details: Tests should focus on the behavior and functionality of the application, rather than implementation details. This helps prevent tests from breaking when implementation details change.</p>
</li>
<li class="">
<p>Use test helpers and utilities: Use helper functions and utilities to reduce duplication and improve test readability. This can include custom matchers, setup and teardown functions, or utility functions for common testing tasks.</p>
</li>
<li class="">
<p>Mock external dependencies: Mocking dependencies such as APIs, external libraries, or Redux stores allows tests to run in isolation and avoids issues with external services or resources.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-test-coverage-tools">Using Test Coverage Tools<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#using-test-coverage-tools" class="hash-link" aria-label="Direct link to Using Test Coverage Tools" title="Direct link to Using Test Coverage Tools" translate="no">​</a></h3>
<p>Test coverage tools help measure the effectiveness of your tests by analyzing which parts of your code are covered by tests. They provide metrics such as line coverage, branch coverage, and function coverage.</p>
<p>Tools such as Istanbul or Jest's built-in coverage reporting can be used to generate coverage reports. These reports can help identify areas of your codebase that are not adequately covered by tests and guide your testing efforts.</p>
<p>To enable coverage reporting in Jest, add the <code>--coverage</code> flag when running tests:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npx jest --coverage</span><br></span></code></pre></div></div>
<p>This will generate a coverage report in the <code>coverage</code> directory of your project. Open the generated <code>index.html</code> file in a web browser to view the coverage report.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="continuous-integration-and-testing">Continuous Integration and Testing<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#continuous-integration-and-testing" class="hash-link" aria-label="Direct link to Continuous Integration and Testing" title="Direct link to Continuous Integration and Testing" translate="no">​</a></h3>
<p>Integrating testing into your continuous integration (CI) pipeline ensures that your tests are run automatically whenever changes are made to your codebase. This helps catch regressions and issues early in the development process.</p>
<p>Popular CI services such as Jenkins, Travis CI, or CircleCI can be used to set up automated test runs. These services can be configured to run tests on every commit, pull request, or on a schedule.</p>
<p>To integrate testing into your CI pipeline, follow these steps:</p>
<ol>
<li class="">
<p>Set up your CI service and configure it to run your test command (e.g., <code>npx jest</code>).</p>
</li>
<li class="">
<p>Configure your CI service to generate test coverage reports if desired.</p>
</li>
<li class="">
<p>Configure your CI service to notify you of test failures or coverage issues.</p>
</li>
<li class="">
<p>Optionally, configure your CI service to deploy your application if all tests pass.</p>
</li>
</ol>
<p>Continuous integration and testing can help ensure the stability and reliability of your React Native applications and improve the development workflow.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-testing-library-introduction-react-native#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored the basics of React Native testing using the React Native Testing Library. We covered setting up the testing environment, writing tests for components, Redux actions and reducers, navigation components, and asynchronous operations. We also discussed best practices for writing maintainable tests and integrating testing into continuous integration pipelines.</p>
<p>Testing is an essential part of the development process that helps ensure the stability, reliability, and maintainability of React Native applications. By following the techniques and best practices outlined in this tutorial, you can write effective tests and improve the quality of your codebase. Happy testing!</p>]]></content:encoded>
            <category>React Native</category>
            <category>React Native Testing Library</category>
            <category>Testing</category>
        </item>
        <item>
            <title><![CDATA[React Native Animations: Animated, Layout Transitions, and UI-Thread Work]]></title>
            <link>https://dopebase.com/blog/react-native-animations-animated-api</link>
            <guid>https://dopebase.com/blog/react-native-animations-animated-api</guid>
            <pubDate>Sun, 05 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Choose between the built-in Animated API, layout animations, and a UI-thread animation library based on interaction and performance needs.]]></description>
            <content:encoded><![CDATA[<p>Choose between the built-in Animated API, layout animations, and a UI-thread animation library based on interaction and performance needs. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native animations animated api" src="https://dopebase.com/assets/images/01-cover5-e2dda854-c81dbfae768da31092b3fda293ea2949.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-animations-animated-api#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Choose between the built-in Animated API, layout animations, and a UI-thread animation library based on interaction and performance needs.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-animations-animated-api#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Keep animation state separate from business state.</li>
<li class="">Respect reduced-motion preferences.</li>
<li class="">Profile gestures and transitions on slower hardware.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-animations-animated-api#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-animations-animated-api#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native">What is React Native?<a href="https://dopebase.com/blog/react-native-animations-animated-api#what-is-react-native" class="hash-link" aria-label="Direct link to What is React Native?" title="Direct link to What is React Native?" translate="no">​</a></h2>
<p>React Native is a JavaScript framework for building native mobile applications. It allows developers to write code once and deploy it on both iOS and Android platforms. React Native achieves this by using native components that are rendered using native UI components, resulting in a highly performant and responsive user interface.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction-to-react-native">Introduction to React Native<a href="https://dopebase.com/blog/react-native-animations-animated-api#introduction-to-react-native" class="hash-link" aria-label="Direct link to Introduction to React Native" title="Direct link to Introduction to React Native" translate="no">​</a></h3>
<p>React Native leverages the power of React, a JavaScript library for building user interfaces. It follows the same principles as React, such as component-based architecture and the use of a virtual DOM (Document Object Model). However, instead of rendering to the browser, React Native renders to native components, providing a native look and feel.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="advantages-of-react-native">Advantages of React Native<a href="https://dopebase.com/blog/react-native-animations-animated-api#advantages-of-react-native" class="hash-link" aria-label="Direct link to Advantages of React Native" title="Direct link to Advantages of React Native" translate="no">​</a></h3>
<p>There are several advantages to using React Native for mobile app development:</p>
<ul>
<li class=""><strong>Code Reusability</strong>: With React Native, you can write code once and deploy it on both iOS and Android platforms, reducing development time and effort.</li>
<li class=""><strong>Native Performance</strong>: React Native uses native UI components, resulting in a highly performant and responsive user interface.</li>
<li class=""><strong>Hot Reloading</strong>: React Native supports hot reloading, allowing developers to see the changes in real-time without having to rebuild the entire app.</li>
<li class=""><strong>Large Community</strong>: React Native has a large and active community of developers, providing access to a wealth of resources and support.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-native-vs-react">React Native vs React<a href="https://dopebase.com/blog/react-native-animations-animated-api#react-native-vs-react" class="hash-link" aria-label="Direct link to React Native vs React" title="Direct link to React Native vs React" translate="no">​</a></h3>
<p>While React Native and React share many similarities, there are some key differences between the two:</p>
<ul>
<li class=""><strong>Platform</strong>: React is primarily used for building web applications, while React Native is specifically designed for building mobile applications.</li>
<li class=""><strong>Rendering</strong>: React renders components to the browser using HTML, while React Native renders components to native UI components using JavaScript.</li>
<li class=""><strong>Styling</strong>: React uses CSS for styling, while React Native uses a combination of JavaScript and a StyleSheet API for styling native components.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction-to-animations">Introduction to Animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#introduction-to-animations" class="hash-link" aria-label="Direct link to Introduction to Animations" title="Direct link to Introduction to Animations" translate="no">​</a></h2>
<p>Animations are a powerful tool for creating engaging and interactive user interfaces. They can be used to communicate information, provide visual feedback, and enhance the overall user experience. In mobile app development, animations are particularly important as they can make the app feel more polished and professional.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-are-animations-important">Why are animations important?<a href="https://dopebase.com/blog/react-native-animations-animated-api#why-are-animations-important" class="hash-link" aria-label="Direct link to Why are animations important?" title="Direct link to Why are animations important?" translate="no">​</a></h3>
<p>Animations serve several purposes in mobile app development:</p>
<ul>
<li class=""><strong>Visual Feedback</strong>: Animations can provide visual feedback to users, such as indicating that an action has been successfully completed or highlighting changes in the user interface.</li>
<li class=""><strong>Guidance</strong>: Animations can guide users through the app by showing them how to interact with different elements and navigate between screens.</li>
<li class=""><strong>Delightful Experience</strong>: Well-designed animations can create a delightful user experience and make the app more enjoyable to use.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="types-of-animations">Types of animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#types-of-animations" class="hash-link" aria-label="Direct link to Types of animations" title="Direct link to Types of animations" translate="no">​</a></h3>
<p>There are various types of animations that can be used in mobile apps:</p>
<ul>
<li class=""><strong>Transition Animations</strong>: These animations are used to smoothly transition between different screens or views, providing a seamless user experience.</li>
<li class=""><strong>Element Animations</strong>: These animations are used to animate individual elements within a screen, such as buttons, images, or text.</li>
<li class=""><strong>Scrolling Animations</strong>: These animations are used to create effects while scrolling, such as parallax effects or revealing hidden content.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="benefits-of-using-animations-in-mobile-apps">Benefits of using animations in mobile apps<a href="https://dopebase.com/blog/react-native-animations-animated-api#benefits-of-using-animations-in-mobile-apps" class="hash-link" aria-label="Direct link to Benefits of using animations in mobile apps" title="Direct link to Benefits of using animations in mobile apps" translate="no">​</a></h3>
<p>Using animations in your mobile app can provide several benefits:</p>
<ul>
<li class=""><strong>Improved User Experience</strong>: Animations can make the app feel more responsive and interactive, improving the overall user experience.</li>
<li class=""><strong>Enhanced Visual Appeal</strong>: Well-designed animations can make your app visually appealing and help it stand out from the competition.</li>
<li class=""><strong>Engagement</strong>: Animations can increase user engagement by providing visual cues and feedback, making the app more enjoyable to use.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="getting-started-with-react-native-animations">Getting Started with React Native Animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#getting-started-with-react-native-animations" class="hash-link" aria-label="Direct link to Getting Started with React Native Animations" title="Direct link to Getting Started with React Native Animations" translate="no">​</a></h2>
<p>Before diving into React Native animations, you need to set up a React Native project and install the required dependencies.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="setting-up-a-react-native-project">Setting up a React Native project<a href="https://dopebase.com/blog/react-native-animations-animated-api#setting-up-a-react-native-project" class="hash-link" aria-label="Direct link to Setting up a React Native project" title="Direct link to Setting up a React Native project" translate="no">​</a></h3>
<p>To set up a React Native project, follow these steps:</p>
<ol>
<li class="">Install Node.js and npm (Node Package Manager) if you haven't already.</li>
<li class="">Open a terminal or command prompt and run the following command to install the React Native CLI (Command Line Interface):<!-- -->
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install -g react-native-cli</span><br></span></code></pre></div></div>
</li>
<li class="">Create a new React Native project by running the following command:<!-- -->
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">react-native init MyProject</span><br></span></code></pre></div></div>
</li>
<li class="">Navigate into the project directory:<!-- -->
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">cd MyProject</span><br></span></code></pre></div></div>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="installing-the-animated-api">Installing the Animated API<a href="https://dopebase.com/blog/react-native-animations-animated-api#installing-the-animated-api" class="hash-link" aria-label="Direct link to Installing the Animated API" title="Direct link to Installing the Animated API" translate="no">​</a></h3>
<p>The Animated API is a built-in module in React Native that provides a powerful and flexible way to create animations. To install the Animated API, run the following command in your project directory:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">npm install react-native-reanimated</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="basic-usage-of-animated-api">Basic usage of Animated API<a href="https://dopebase.com/blog/react-native-animations-animated-api#basic-usage-of-animated-api" class="hash-link" aria-label="Direct link to Basic usage of Animated API" title="Direct link to Basic usage of Animated API" translate="no">​</a></h3>
<p>To use the Animated API in your React Native project, you need to import it from the <code>react-native-reanimated</code> package. Here's an example of how to import and use the Animated API:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Animated</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native-reanimated'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> opacity </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">timing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">opacity</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">duration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> opacity </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a new <code>Animated.Value</code> instance called <code>opacity</code> and initialize it with a value of <code>0</code>. We then use the <code>Animated.timing</code> method to animate the <code>opacity</code> value from <code>0</code> to <code>1</code> over a duration of <code>1000</code> milliseconds. The <code>useNativeDriver</code> option is set to <code>true</code> to leverage the native animation capabilities of the platform. Finally, we apply the animated <code>opacity</code> value to the <code>style</code> prop of the <code>Animated.View</code> component, resulting in a fade-in effect for the text.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="animating-components">Animating Components<a href="https://dopebase.com/blog/react-native-animations-animated-api#animating-components" class="hash-link" aria-label="Direct link to Animating Components" title="Direct link to Animating Components" translate="no">​</a></h2>
<p>In addition to animating properties, React Native animations can also be applied to entire components. This allows you to create complex animations by combining multiple animated properties.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="animating-properties">Animating properties<a href="https://dopebase.com/blog/react-native-animations-animated-api#animating-properties" class="hash-link" aria-label="Direct link to Animating properties" title="Direct link to Animating properties" translate="no">​</a></h3>
<p>To animate a property of a component, you can use the <code>Animated.timing</code> method. This method allows you to specify the target value for the property, the duration of the animation, and other options.</p>
<p>Here's an example that animates the <code>opacity</code> and <code>translateY</code> properties of a component:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> opacity </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> translateY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">100</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">parallel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">timing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">opacity</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">duration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">timing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">translateY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">duration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> opacity</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> translateY </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create two <code>Animated.Value</code> instances, <code>opacity</code> and <code>translateY</code>, and initialize them with initial values. We then use the <code>Animated.parallel</code> method to animate both properties simultaneously. The <code>transform</code> style property is used to apply the animated <code>translateY</code> value to the Y-axis translation of the component.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-interpolation">Using interpolation<a href="https://dopebase.com/blog/react-native-animations-animated-api#using-interpolation" class="hash-link" aria-label="Direct link to Using interpolation" title="Direct link to Using interpolation" translate="no">​</a></h3>
<p>Interpolation is a powerful feature of the Animated API that allows you to map an input range to an output range. This is useful for creating complex animations that involve multiple properties.</p>
<p>Here's an example that animates the <code>opacity</code> and <code>scale</code> properties of a component using interpolation:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> progress </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> opacity </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> progress</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">interpolate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">inputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">outputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> scale </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> progress</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">interpolate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">inputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">outputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">timing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">progress</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">duration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> opacity</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> scale </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create an <code>Animated.Value</code> instance called <code>progress</code> and initialize it with a value of <code>0</code>. We then use the <code>interpolate</code> method to create two new animated values, <code>opacity</code> and <code>scale</code>, based on the <code>progress</code> value. The <code>inputRange</code> specifies the range of the <code>progress</code> value, and the <code>outputRange</code> specifies the corresponding range of the <code>opacity</code> and <code>scale</code> values. Finally, we animate the <code>progress</code> value using the <code>Animated.timing</code> method, resulting in a fade-in and scale-up effect for the text.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-complex-animations">Creating complex animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#creating-complex-animations" class="hash-link" aria-label="Direct link to Creating complex animations" title="Direct link to Creating complex animations" translate="no">​</a></h3>
<p>By combining multiple animated properties and using interpolation, you can create complex animations in React Native. Here's an example that animates the <code>opacity</code>, <code>translateY</code>, and <code>rotate</code> properties of a component:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> progress </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> opacity </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> progress</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">interpolate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">inputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">outputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> translateY </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> progress</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">interpolate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">inputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">outputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">100</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> rotate </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> progress</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">interpolate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">inputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">outputRange</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'0deg'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'360deg'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">timing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">progress</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">duration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> opacity</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> translateY </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> rotate </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create three <code>Animated.Value</code> instances, <code>progress</code>, <code>opacity</code>, and <code>translateY</code>, and initialize them with initial values. We also create an animated value <code>rotate</code> using interpolation. We then use the <code>Animated.timing</code> method to animate the <code>progress</code> value, resulting in a fade-in, slide-up, and rotation effect for the text.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="animated-api-methods">Animated API Methods<a href="https://dopebase.com/blog/react-native-animations-animated-api#animated-api-methods" class="hash-link" aria-label="Direct link to Animated API Methods" title="Direct link to Animated API Methods" translate="no">​</a></h2>
<p>The Animated API provides several methods for creating different types of animations. In this section, we will explore three commonly used methods: timing animation, spring animation, and decay animation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="timing-animation">Timing animation<a href="https://dopebase.com/blog/react-native-animations-animated-api#timing-animation" class="hash-link" aria-label="Direct link to Timing animation" title="Direct link to Timing animation" translate="no">​</a></h3>
<p>The <code>Animated.timing</code> method is used to create a timing animation, which animates a property over a specified duration. Here's an example that animates the <code>opacity</code> property of a component using timing animation:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> opacity </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">timing</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">opacity</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">duration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> opacity </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a new <code>Animated.Value</code> instance called <code>opacity</code> and initialize it with a value of <code>0</code>. We then use the <code>Animated.timing</code> method to animate the <code>opacity</code> value from <code>0</code> to <code>1</code> over a duration of <code>1000</code> milliseconds. The <code>useNativeDriver</code> option is set to <code>true</code> to leverage the native animation capabilities of the platform.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="spring-animation">Spring animation<a href="https://dopebase.com/blog/react-native-animations-animated-api#spring-animation" class="hash-link" aria-label="Direct link to Spring animation" title="Direct link to Spring animation" translate="no">​</a></h3>
<p>The <code>Animated.spring</code> method is used to create a spring animation, which animates a property using a spring-like motion. Here's an example that animates the <code>scale</code> property of a component using spring animation:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> scale </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">spring</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">scale</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">friction</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">tension</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> scale </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a new <code>Animated.Value</code> instance called <code>scale</code> and initialize it with a value of <code>1</code>. We then use the <code>Animated.spring</code> method to animate the <code>scale</code> value from <code>1</code> to <code>2</code> using the specified <code>friction</code> and <code>tension</code> values. The <code>useNativeDriver</code> option is set to <code>true</code> to leverage the native animation capabilities of the platform.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="decay-animation">Decay animation<a href="https://dopebase.com/blog/react-native-animations-animated-api#decay-animation" class="hash-link" aria-label="Direct link to Decay animation" title="Direct link to Decay animation" translate="no">​</a></h3>
<p>The <code>Animated.decay</code> method is used to create a decay animation, which animates a property based on an initial velocity and a deceleration factor. Here's an example that animates the <code>translateX</code> property of a component using decay animation:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> translateX </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">Value</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">decay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">translateX</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">velocity</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">deceleration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.997</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> translateX </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Hello, React Native Animations!</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Text</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a new <code>Animated.Value</code> instance called <code>translateX</code> and initialize it with a value of <code>0</code>. We then use the <code>Animated.decay</code> method to animate the <code>translateX</code> value based on the specified <code>velocity</code> and <code>deceleration</code> values. The <code>useNativeDriver</code> option is set to <code>true</code> to leverage the native animation capabilities of the platform.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-gestures-with-react-native-animations">Handling Gestures with React Native Animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#handling-gestures-with-react-native-animations" class="hash-link" aria-label="Direct link to Handling Gestures with React Native Animations" title="Direct link to Handling Gestures with React Native Animations" translate="no">​</a></h2>
<p>React Native animations can be combined with gesture recognition to create interactive and immersive user experiences. In this section, we will explore how to handle touch events and create drag and drop animations using React Native.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="responding-to-touch-events">Responding to touch events<a href="https://dopebase.com/blog/react-native-animations-animated-api#responding-to-touch-events" class="hash-link" aria-label="Direct link to Responding to touch events" title="Direct link to Responding to touch events" translate="no">​</a></h3>
<p>To respond to touch events in React Native, you can use the <code>PanResponder</code> API. The <code>PanResponder</code> API allows you to recognize and respond to touch gestures, such as dragging, swiping, or pinching.</p>
<p>Here's an example that creates a draggable component using the <code>PanResponder</code> API:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> pan </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">ValueXY</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> panResponder </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">PanResponder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function-variable function" style="color:#d73a49">onStartShouldSetPanResponder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">onPanResponderMove</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">event</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">dx</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> pan</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">dy</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> pan</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">y</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function-variable function" style="color:#d73a49">onPanResponderRelease</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">spring</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">pan</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">x</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">y</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript" style="color:#00009f">styles</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">box</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">translateX</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> pan</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">x</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">translateY</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> pan</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">y</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag spread punctuation" style="color:#393A34">{</span><span class="token tag spread operator" style="color:#393A34">...</span><span class="token tag spread" style="color:#00009f">panResponder</span><span class="token tag spread punctuation" style="color:#393A34">.</span><span class="token tag spread property-access" style="color:#00009f">panHandlers</span><span class="token tag spread punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a new <code>Animated.ValueXY</code> instance called <code>pan</code> to track the position of the draggable component. We then create a <code>PanResponder</code> instance using the <code>PanResponder.create</code> method. We specify the <code>onStartShouldSetPanResponder</code> callback to indicate that the component should become the responder for touch events. We also specify the <code>onPanResponderMove</code> callback to update the <code>pan</code> value based on the movement of the touch gesture. Finally, we specify the <code>onPanResponderRelease</code> callback to animate the <code>pan</code> value back to its original position using spring animation when the touch gesture is released.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="drag-and-drop-animations">Drag and drop animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#drag-and-drop-animations" class="hash-link" aria-label="Direct link to Drag and drop animations" title="Direct link to Drag and drop animations" translate="no">​</a></h3>
<p>Using the <code>PanResponder</code> API, you can create drag and drop animations in React Native. Here's an example that demonstrates drag and drop animations using the <code>PanResponder</code> API:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">App</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">boxes</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setBoxes</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">left</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">top</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">left</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">100</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">top</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">100</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> panResponders </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useMemo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> boxes</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">reduce</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">acc</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> box</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> pan </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Animated</span><span class="token class-name punctuation" style="color:#393A34">.</span><span class="token class-name">ValueXY</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> panResponder </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">PanResponder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function-variable function" style="color:#d73a49">onStartShouldSetPanResponder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token literal-property property" style="color:#36acaa">onPanResponderMove</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">event</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">dx</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> pan</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">dy</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> pan</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">y</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function-variable function" style="color:#d73a49">onPanResponderRelease</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token maybe-class-name">Animated</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">spring</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">pan</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">toValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">x</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">y</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">useNativeDriver</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">start</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      acc</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">box</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> pan</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> panResponder </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> acc</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> handleLayout </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useCallback</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">event</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> id</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> layout </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> event</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">nativeEvent</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> updatedBoxes </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> boxes</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">box</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">box</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> id</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">box</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">left</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> layout</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">x</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">top</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> layout</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">y</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> box</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setBoxes</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">updatedBoxes</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">boxes</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">View</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">styles</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">container</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">boxes</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">box</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Animated.View</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">          </span><span class="token tag attr-name" style="color:#00a4db">key</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">box</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">id</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">          </span><span class="token tag attr-name" style="color:#00a4db">onLayout</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript parameter" style="color:#00009f">event</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">handleLayout</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript" style="color:#00009f">event</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> box</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">id</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">          </span><span class="token tag attr-name" style="color:#00a4db">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag script language-javascript" style="color:#00009f">            styles</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">box</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag script language-javascript" style="color:#00009f">            </span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">transform</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">translateX</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> panResponders</span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript" style="color:#00009f">box</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">id</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">pan</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">x</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">translateY</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> panResponders</span><span class="token tag script language-javascript punctuation" style="color:#393A34">[</span><span class="token tag script language-javascript" style="color:#00009f">box</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">id</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">pan</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">y</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag script language-javascript" style="color:#00009f">          </span><span class="token tag script language-javascript punctuation" style="color:#393A34">]</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">          </span><span class="token tag spread punctuation" style="color:#393A34">{</span><span class="token tag spread operator" style="color:#393A34">...</span><span class="token tag spread" style="color:#00009f">panResponders</span><span class="token tag spread punctuation" style="color:#393A34">[</span><span class="token tag spread" style="color:#00009f">box</span><span class="token tag spread punctuation" style="color:#393A34">.</span><span class="token tag spread property-access" style="color:#00009f">id</span><span class="token tag spread punctuation" style="color:#393A34">]</span><span class="token tag spread punctuation" style="color:#393A34">.</span><span class="token tag spread property-access" style="color:#00009f">panResponder</span><span class="token tag spread punctuation" style="color:#393A34">.</span><span class="token tag spread property-access" style="color:#00009f">panHandlers</span><span class="token tag spread punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">        </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">View</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we maintain an array of <code>boxes</code> in the component's state, each representing a draggable component. We use the <code>useState</code> hook to initialize and update the <code>boxes</code> state. We then use the <code>useMemo</code> hook to create a memoized object <code>panResponders</code>, which contains the <code>pan</code> value and <code>panResponder</code> for each box.</p>
<p>We render each box as an <code>Animated.View</code> component and attach the corresponding <code>panHandlers</code> to enable dragging. We also attach an <code>onLayout</code> event handler to each box to update the position of the box in the <code>boxes</code> state when it is rendered.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="best-practices-for-react-native-animations">Best Practices for React Native Animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#best-practices-for-react-native-animations" class="hash-link" aria-label="Direct link to Best Practices for React Native Animations" title="Direct link to Best Practices for React Native Animations" translate="no">​</a></h2>
<p>To ensure smooth and performant animations in your React Native app, it is important to follow some best practices. In this section, we will discuss some best practices for optimizing performance and avoiding common pitfalls when working with React Native animations.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimizing-performance">Optimizing performance<a href="https://dopebase.com/blog/react-native-animations-animated-api#optimizing-performance" class="hash-link" aria-label="Direct link to Optimizing performance" title="Direct link to Optimizing performance" translate="no">​</a></h3>
<p>To optimize the performance of React Native animations, consider the following best practices:</p>
<ul>
<li class=""><strong>Use the Native Driver</strong>: Whenever possible, use the <code>useNativeDriver</code> option with a value of <code>true</code> when creating animations. This allows the animations to be offloaded to the native UI thread, resulting in smoother and more performant animations.</li>
<li class=""><strong>Batch Updates</strong>: To avoid unnecessary re-renders, batch multiple animated updates together using the <code>Animated.batch</code> method. This can greatly improve performance, especially when animating multiple properties simultaneously.</li>
<li class=""><strong>Avoid Layout Animations</strong>: Animating layout properties, such as width, height, or position, can be expensive in terms of performance. Whenever possible, use transforms, opacity, or other properties that are optimized for animation.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="avoiding-common-pitfalls">Avoiding common pitfalls<a href="https://dopebase.com/blog/react-native-animations-animated-api#avoiding-common-pitfalls" class="hash-link" aria-label="Direct link to Avoiding common pitfalls" title="Direct link to Avoiding common pitfalls" translate="no">​</a></h3>
<p>To avoid common pitfalls when working with React Native animations, keep the following in mind:</p>
<ul>
<li class=""><strong>Avoid Excessive Animations</strong>: Animating too many properties or components simultaneously can lead to performance issues. Be mindful of the number and complexity of animations in your app and optimize accordingly.</li>
<li class=""><strong>Avoid Infinite Animations</strong>: Running infinite animations can consume a significant amount of resources and impact performance. Use animations judiciously and consider stopping or pausing animations when they are not in use.</li>
<li class=""><strong>Consider Device Performance</strong>: Different devices have varying performance capabilities. Test your animations on different devices to ensure smooth performance across the board.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-and-debugging-animations">Testing and debugging animations<a href="https://dopebase.com/blog/react-native-animations-animated-api#testing-and-debugging-animations" class="hash-link" aria-label="Direct link to Testing and debugging animations" title="Direct link to Testing and debugging animations" translate="no">​</a></h3>
<p>Testing and debugging animations in React Native can be challenging. However, there are some tools and techniques that can simplify the process:</p>
<ul>
<li class=""><strong>React Native Debugger</strong>: Use the React Native Debugger tool to inspect and debug your animations. It provides a dedicated interface for inspecting the state of animated values and components.</li>
<li class=""><strong>Console Logging</strong>: Use console logging to log the values of animated properties and track their changes over time. This can help identify issues and inconsistencies in your animations.</li>
<li class=""><strong>Device Emulators</strong>: Use device emulators to test your animations on different devices and screen sizes. This can help ensure that your animations work seamlessly across a wide range of devices.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-animations-animated-api#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored the fundamentals of React Native animations using the Animated API. We learned about the importance of animations in mobile app development and the benefits they bring to the user experience. We also covered the basic usage of the Animated API, including animating properties, using interpolation, and creating complex animations. Additionally, we discussed the different methods provided by the Animated API for creating timing, spring, and decay animations. Finally, we explored how to handle touch events and create drag and drop animations using the PanResponder API. By following the best practices and testing techniques outlined in this tutorial, you can create smooth and performant animations in your React Native app.</p>]]></content:encoded>
            <category>Animations</category>
            <category>Mobile Development</category>
            <category>React Native</category>
        </item>
        <item>
            <title><![CDATA[10 Essential React Native Developer Tools]]></title>
            <link>https://dopebase.com/blog/essential-react-native-developer-tools</link>
            <guid>https://dopebase.com/blog/essential-react-native-developer-tools</guid>
            <pubDate>Sat, 04 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Build a focused React Native toolchain for debugging, profiling, dependency upgrades, native builds, and release observability.]]></description>
            <content:encoded><![CDATA[<p>Build a focused React Native toolchain for debugging, profiling, dependency upgrades, native builds, and release observability. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="essential react native developer tools" src="https://dopebase.com/assets/images/01-cover12-dccb4a42-e74b97d6cc69f8939d6be9232ec63b8f.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/essential-react-native-developer-tools#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Build a focused React Native toolchain for debugging, profiling, dependency upgrades, native builds, and release observability.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/essential-react-native-developer-tools#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Use the supported React Native DevTools workflow.</li>
<li class="">Automate dependency and native build checks in CI.</li>
<li class="">Capture symbols and source maps for production crashes.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/essential-react-native-developer-tools#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/essential-react-native-developer-tools#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="a-focused-react-native-toolchain">A focused React Native toolchain<a href="https://dopebase.com/blog/essential-react-native-developer-tools#a-focused-react-native-toolchain" class="hash-link" aria-label="Direct link to A focused React Native toolchain" title="Direct link to A focused React Native toolchain" translate="no">​</a></h2>
<p>A productive toolchain should answer four questions quickly: what failed, where the time went, whether the native build is compatible, and what users experienced in production. More tools do not automatically create better feedback. Choose one reliable tool for each layer and document the workflow for the team.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="project-creation-and-dependency-health">Project creation and dependency health<a href="https://dopebase.com/blog/essential-react-native-developer-tools#project-creation-and-dependency-health" class="hash-link" aria-label="Direct link to Project creation and dependency health" title="Direct link to Project creation and dependency health" translate="no">​</a></h2>
<p>For most product teams, start with a maintained React Native framework and TypeScript. Expo provides project creation, compatible native package installation, development builds, and cloud or local release tooling. Teams that need direct control over every native file can use the React Native Community CLI, but they also own more upgrade and build configuration.</p>
<p>Use these checks regularly:</p>
<ul>
<li class=""><code>npx expo-doctor</code> for Expo dependency and configuration health;</li>
<li class="">the React Native Upgrade Helper or framework upgrade guide before changing release lines;</li>
<li class="">a package manager lockfile committed with the project;</li>
<li class="">clean CI builds for Android and iOS, not only local incremental builds.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="debugging-and-profiling">Debugging and profiling<a href="https://dopebase.com/blog/essential-react-native-developer-tools#debugging-and-profiling" class="hash-link" aria-label="Direct link to Debugging and profiling" title="Direct link to Debugging and profiling" translate="no">​</a></h2>
<p>React Native DevTools is the supported starting point for JavaScript debugging, React component inspection, and performance traces. Pair it with Android Studio profilers, Instruments, device logs, and network inspection when the issue crosses the native boundary. Always reproduce performance problems in a release build because development instrumentation changes timing and memory behavior.</p>
<p>Metro errors deserve their own classification. Check module resolution, package exports, duplicate dependencies, monorepo watch folders, and transformer configuration before deleting caches. Preserve the first causal error and the dependency graph that produced it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-layers">Testing layers<a href="https://dopebase.com/blog/essential-react-native-developer-tools#testing-layers" class="hash-link" aria-label="Direct link to Testing layers" title="Direct link to Testing layers" translate="no">​</a></h2>
<p>Use Jest for fast unit tests and React Native Testing Library for component behavior through roles, labels, text, and user actions. Add a smaller device-level suite with Maestro or Detox for critical workflows that depend on navigation, permissions, secure storage, notifications, or native modules.</p>
<p>A healthy test portfolio covers:</p>
<ul>
<li class="">domain functions and reducers without rendering;</li>
<li class="">component loading, error, empty, and retry states;</li>
<li class="">integration at API and storage boundaries;</li>
<li class="">a few release-build journeys on real platform runtimes.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="code-quality-and-release-observability">Code quality and release observability<a href="https://dopebase.com/blog/essential-react-native-developer-tools#code-quality-and-release-observability" class="hash-link" aria-label="Direct link to Code quality and release observability" title="Direct link to Code quality and release observability" translate="no">​</a></h2>
<p>Use ESLint, Prettier, strict TypeScript, and import-boundary rules to make architectural mistakes visible before review. CI should run typechecking, tests, native build checks, and any generated-code validation required by the New Architecture.</p>
<p>Production needs source maps, native symbols, crash reporting, release identifiers, and logs that avoid sensitive data. EAS Build and Submit, Fastlane, or a carefully maintained native pipeline can all work; choose the smallest system the team can debug. Over-the-air updates require runtime compatibility, staged channels, adoption monitoring, and a known-good recovery target.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="tool-selection-checklist">Tool selection checklist<a href="https://dopebase.com/blog/essential-react-native-developer-tools#tool-selection-checklist" class="hash-link" aria-label="Direct link to Tool selection checklist" title="Direct link to Tool selection checklist" translate="no">​</a></h2>
<p>Before adopting a tool, verify active maintenance, supported React Native releases, New Architecture compatibility, CI behavior, data handling, and an exit path. Remove tools that duplicate another layer or require deprecated internal APIs.</p>]]></content:encoded>
            <category>Developer Tools</category>
            <category>Mobile App Development</category>
            <category>React Native</category>
        </item>
        <item>
            <title><![CDATA[10 React Native Best Practices for Scalable Apps]]></title>
            <link>https://dopebase.com/blog/react-native-best-practices-scalable-apps</link>
            <guid>https://dopebase.com/blog/react-native-best-practices-scalable-apps</guid>
            <pubDate>Fri, 03 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Scale React Native through clear feature boundaries, typed contracts, predictable data ownership, and an upgrade-friendly native dependency policy.]]></description>
            <content:encoded><![CDATA[<p>Scale React Native through clear feature boundaries, typed contracts, predictable data ownership, and an upgrade-friendly native dependency policy. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="react native best practices scalable apps" src="https://dopebase.com/assets/images/01-cover7-c903192c-0d3f5061a53b72032692d82f914a4e7a.jpg" width="800" height="533" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Scale React Native through clear feature boundaries, typed contracts, predictable data ownership, and an upgrade-friendly native dependency policy.</p>
<p>Use TypeScript, the New Architecture, supported public APIs, and libraries that publish an explicit compatibility policy. Prefer framework-managed native dependencies when that reduces upgrade risk, and verify behavior in release builds on both platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Organize by product feature rather than technical file type alone.</li>
<li class="">Keep APIs and storage behind typed adapters.</li>
<li class="">Set bundle, startup, crash-free, and test reliability budgets.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Test on representative Android and iOS devices, not only simulators.</li>
<li class="">Profile startup, interaction latency, memory, and network failure states.</li>
<li class="">Keep native dependencies compatible with the active React Native release line.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://reactnative.dev/architecture/landing-page" target="_blank" rel="noopener noreferrer" class="">React Native architecture</a></li>
<li class=""><a href="https://reactnative.dev/docs/getting-started" target="_blank" rel="noopener noreferrer" class="">React Native documentation</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react-native">What is React Native?<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#what-is-react-native" class="hash-link" aria-label="Direct link to What is React Native?" title="Direct link to What is React Native?" translate="no">​</a></h3>
<p>React Native is a JavaScript framework developed by Facebook for building native mobile applications. It allows developers to write code once and deploy it on both iOS and Android platforms. React Native uses native components, which makes the apps look and feel like native apps. It also provides a bridge that allows JavaScript code to interact with native code.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="benefits-of-react-native">Benefits of React Native<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#benefits-of-react-native" class="hash-link" aria-label="Direct link to Benefits of React Native" title="Direct link to Benefits of React Native" translate="no">​</a></h3>
<p>React Native offers several benefits for mobile app development. Firstly, it allows developers to write code in JavaScript, a language that is widely used and familiar to many developers. Secondly, it provides a rich set of pre-built UI components, which makes it easier to develop user interfaces. Thirdly, it enables hot-reloading, allowing developers to see the changes they make in real-time without having to rebuild the entire app. Lastly, React Native has a large and active community, which means that there are plenty of resources and support available.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="scalability-challenges-in-react-native">Scalability challenges in React Native<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#scalability-challenges-in-react-native" class="hash-link" aria-label="Direct link to Scalability challenges in React Native" title="Direct link to Scalability challenges in React Native" translate="no">​</a></h3>
<p>As your React Native app grows in size and complexity, you may encounter scalability challenges. These challenges can include maintaining a clean project structure, managing state effectively, optimizing performance, handling errors gracefully, and ensuring code quality. In this tutorial, we will address these challenges by discussing ten best practices for developing scalable React Native apps.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="1-project-structure">1. Project Structure<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#1-project-structure" class="hash-link" aria-label="Direct link to 1. Project Structure" title="Direct link to 1. Project Structure" translate="no">​</a></h2>
<p>Organizing files and folders is essential for maintaining a clean and scalable codebase. A well-structured project makes it easier to navigate and understand the code. Here are a few best practices for organizing your React Native project:</p>
<ul>
<li class=""><strong>Separating concerns</strong>: Divide your code into modules and components based on their responsibilities. This separation of concerns helps to keep your codebase modular and maintainable.</li>
<li class=""><strong>Using modules and components</strong>: Create reusable modules and components that can be easily shared across different parts of your app. This reduces code duplication and improves code reuse.</li>
</ul>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Example of a well-structured project</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">src</span><span class="token operator" style="color:#393A34">/</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  components</span><span class="token operator" style="color:#393A34">/</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">Button</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">Input</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  screens</span><span class="token operator" style="color:#393A34">/</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  utils</span><span class="token operator" style="color:#393A34">/</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    api</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    helpers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">js</span><br></span></code></pre></div></div>
<p>In the above example, the code is organized into folders based on their type (components, screens, utils). Each folder contains related files, making it easier to locate and maintain the code.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="2-state-management">2. State Management<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#2-state-management" class="hash-link" aria-label="Direct link to 2. State Management" title="Direct link to 2. State Management" translate="no">​</a></h2>
<p>Managing state effectively is crucial for developing scalable React Native apps. React Native provides multiple options for state management, and choosing the right library is essential. Here are some best practices for managing state in your React Native app:</p>
<ul>
<li class=""><strong>Choosing the right state management library</strong>: Evaluate different state management libraries (such as Redux, MobX, or Context API) and choose the one that best fits your app's requirements.</li>
<li class=""><strong>Managing global state</strong>: Use a state management library to handle global app state, such as user authentication, theme settings, or language preferences.</li>
<li class=""><strong>Local component state</strong>: For component-specific state, use the built-in <code>useState</code> hook provided by React Native. This hook allows you to manage state within a component without the need for a state management library.</li>
</ul>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Example of using useState hook for local component state</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useState </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:#d73a49">Counter</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setCount</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Initialize count state with 0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">increment</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setCount</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">count </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Update count state</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">count</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">Text</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Increment"</span><span class="token plain"> onPress</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">increment</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, the <code>useState</code> hook is used to manage the <code>count</code> state within the <code>Counter</code> component. The <code>setCount</code> function is used to update the state when the button is pressed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="3-performance-optimization">3. Performance Optimization<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#3-performance-optimization" class="hash-link" aria-label="Direct link to 3. Performance Optimization" title="Direct link to 3. Performance Optimization" translate="no">​</a></h2>
<p>Optimizing the performance of your React Native app is crucial for delivering a smooth and responsive user experience. Here are some best practices for performance optimization:</p>
<ul>
<li class=""><strong>Avoiding unnecessary re-renders</strong>: Use the <code>React.memo</code> higher-order component (HOC) to memoize components and prevent unnecessary re-renders. This is particularly useful for optimizing performance in large lists or complex components.</li>
<li class=""><strong>Using memoization</strong>: Use memoization techniques, such as memoizing expensive calculations or caching API responses, to improve performance and reduce unnecessary computations.</li>
<li class=""><strong>Optimizing network requests</strong>: Minimize network requests by implementing caching mechanisms, such as storing API responses in local storage or using a caching library like <code>react-query</code>.</li>
</ul>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Example of using React.memo for memoization</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">ExpensiveComponent</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">memo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter"> data </span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Expensive calculations based on data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token comment" style="color:#999988;font-style:italic">/* Render component */</span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, the <code>ExpensiveComponent</code> is wrapped with the <code>React.memo</code> HOC. This memoizes the component and prevents unnecessary re-renders when the <code>data</code> prop remains the same.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="4-error-handling">4. Error Handling<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#4-error-handling" class="hash-link" aria-label="Direct link to 4. Error Handling" title="Direct link to 4. Error Handling" translate="no">​</a></h2>
<p>Handling errors gracefully is essential for providing a good user experience and preventing app crashes. Here are some best practices for error handling in your React Native app:</p>
<ul>
<li class=""><strong>Handling exceptions</strong>: Use try-catch blocks to catch and handle exceptions in critical parts of your code. This helps prevent app crashes and allows you to handle errors gracefully.</li>
<li class=""><strong>Logging errors</strong>: Implement a logging mechanism to capture and log errors that occur in your app. This helps to identify and debug issues more effectively.</li>
<li class=""><strong>Error boundaries</strong>: Use Error Boundaries, a feature provided by React, to catch and handle errors in components. Error Boundaries allow you to display a fallback UI when an error occurs within a component tree.</li>
</ul>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Example of using Error Boundaries</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">ErrorBoundary</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token plain"> </span><span class="token class-name">Component</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  state </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">hasError</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getDerivedStateFromError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">hasError</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">componentDidCatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">error</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> errorInfo</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Log error and errorInfo</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">hasError</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token maybe-class-name">Something</span><span class="token plain"> went wrong</span><span class="token punctuation" style="color:#393A34">.</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">div</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">props</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">children</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token maybe-class-name">ErrorBoundary</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, the <code>ErrorBoundary</code> component is used as a wrapper around other components. If an error occurs within the wrapped components, the <code>ErrorBoundary</code> component will display a fallback UI instead of crashing the app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="5-testing">5. Testing<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#5-testing" class="hash-link" aria-label="Direct link to 5. Testing" title="Direct link to 5. Testing" translate="no">​</a></h2>
<p>Testing is essential for ensuring the reliability and stability of your React Native app. Here are some best practices for testing your React Native app:</p>
<ul>
<li class=""><strong>Unit testing components</strong>: Write unit tests for individual components to verify their behavior and logic. Use testing libraries such as Jest and React Testing Library for writing unit tests.</li>
<li class=""><strong>Integration testing</strong>: Write integration tests to test the interaction between different components and modules in your app. Use tools like Detox or Appium for writing integration tests in React Native.</li>
<li class=""><strong>Snapshot testing</strong>: Use snapshot testing to capture the output of a component and compare it against a previously saved snapshot. This helps to identify unexpected changes in the component's output.</li>
</ul>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Example of a unit test using Jest and React Testing Library</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> render</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> fireEvent </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@testing-library/react-native'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Button</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./Button'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">test</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Button calls onClick when clicked'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> handleClick </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> jest</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> getByText </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">render</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">Button</span><span class="token plain"> onClick</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">handleClick</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  fireEvent</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">press</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">getByText</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Click me'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">expect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">handleClick</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">toHaveBeenCalledTimes</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, a unit test is written for the <code>Button</code> component. The test checks if the <code>onClick</code> function is called when the button is clicked.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="6-code-quality">6. Code Quality<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#6-code-quality" class="hash-link" aria-label="Direct link to 6. Code Quality" title="Direct link to 6. Code Quality" translate="no">​</a></h2>
<p>Maintaining high code quality is important for the long-term maintainability and scalability of your React Native app. Here are some best practices for ensuring code quality:</p>
<ul>
<li class=""><strong>Linting and code formatting</strong>: Use a linter, such as ESLint, to enforce coding standards and catch common errors. Configure your linter to automatically format your code using a code formatter like Prettier.</li>
<li class=""><strong>Using TypeScript</strong>: Consider using TypeScript to add static typing to your React Native app. TypeScript helps catch type-related errors early and improves code quality.</li>
<li class=""><strong>Code reviews</strong>: Conduct code reviews with your team to identify and address potential issues early on. Code reviews help maintain code quality and ensure that best practices are followed.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/react-native-best-practices-scalable-apps#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we covered ten best practices for developing scalable React Native apps. By following these practices, you can ensure that your React Native app is well-structured, efficient, and maintainable. We discussed project structure, state management, performance optimization, error handling, testing, and code quality. By incorporating these best practices into your React Native development workflow, you can build robust and scalable mobile apps.</p>]]></content:encoded>
            <category>Best Practices</category>
            <category>Development</category>
            <category>React Native</category>
            <category>Scalable Apps</category>
        </item>
        <item>
            <title><![CDATA[Supabase vs. Firebase: Which Backend-as-a-Service is Right for You?]]></title>
            <link>https://dopebase.com/blog/supabase-firebase-backend-service-right</link>
            <guid>https://dopebase.com/blog/supabase-firebase-backend-service-right</guid>
            <pubDate>Thu, 02 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Compare Supabase and Firebase through data model, authorization, offline behavior, realtime needs, operational ownership, and exit strategy.]]></description>
            <content:encoded><![CDATA[<p>Compare Supabase and Firebase through data model, authorization, offline behavior, realtime needs, operational ownership, and exit strategy. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="supabase firebase backend service right" src="https://dopebase.com/assets/images/01-cover5-e2dda854-c81dbfae768da31092b3fda293ea2949.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Compare Supabase and Firebase through data model, authorization, offline behavior, realtime needs, operational ownership, and exit strategy.</p>
<p>Treat the database schema, Row Level Security policies, authentication lifecycle, indexes, and migrations as one system. Client convenience must not replace server-enforced authorization, and realtime subscriptions need cleanup and reconnect behavior.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Prototype the hardest query and authorization rule.</li>
<li class="">Estimate reads, writes, storage, egress, and background work.</li>
<li class="">Document how data can be exported and migrated.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Enable and test Row Level Security before exposing tables.</li>
<li class="">Validate session refresh, revoked access, and offline recovery.</li>
<li class="">Add indexes from measured query plans and monitor database limits.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://supabase.com/docs" target="_blank" rel="noopener noreferrer" class="">Supabase documentation</a></li>
<li class=""><a href="https://supabase.com/docs/guides/auth" target="_blank" rel="noopener noreferrer" class="">Supabase Auth</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-backend-as-a-service-baas">What is Backend-as-a-Service (BaaS)?<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#what-is-backend-as-a-service-baas" class="hash-link" aria-label="Direct link to What is Backend-as-a-Service (BaaS)?" title="Direct link to What is Backend-as-a-Service (BaaS)?" translate="no">​</a></h3>
<p>Backend-as-a-Service (BaaS) is a cloud computing model that provides developers with a complete backend infrastructure, including servers, databases, and APIs, eliminating the need for them to build and manage these components themselves. BaaS platforms allow developers to quickly develop and deploy applications, saving time and effort.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-baas-in-modern-app-development">Importance of BaaS in modern app development<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#importance-of-baas-in-modern-app-development" class="hash-link" aria-label="Direct link to Importance of BaaS in modern app development" title="Direct link to Importance of BaaS in modern app development" translate="no">​</a></h3>
<p>In today's fast-paced development environment, BaaS platforms have gained immense popularity due to their ability to accelerate the development process. By offloading backend responsibilities to a BaaS provider, developers can focus on building the user interface and delivering a seamless user experience. BaaS platforms also provide a range of features and services that can be easily integrated into applications, such as data storage, authentication, and real-time database capabilities.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-overview">Supabase Overview<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#supabase-overview" class="hash-link" aria-label="Direct link to Supabase Overview" title="Direct link to Supabase Overview" translate="no">​</a></h3>
<p>Supabase is an open-source BaaS platform that aims to provide developers with a set of tools to build scalable and secure applications. It is built on top of PostgreSQL, a powerful and reliable relational database, and offers a range of features to streamline the development process.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="features-of-supabase">Features of Supabase<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#features-of-supabase" class="hash-link" aria-label="Direct link to Features of Supabase" title="Direct link to Features of Supabase" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Real-time Database</strong>: Supabase provides real-time capabilities through the use of websockets, allowing developers to build applications that update in real-time without the need for manual refreshing.</p>
</li>
<li class="">
<p><strong>Authentication</strong>: Supabase offers easy-to-use authentication services, including email/password authentication, social login with providers like Google and GitHub, and JWT-based authentication.</p>
</li>
<li class="">
<p><strong>Data Storage</strong>: Supabase utilizes PostgreSQL as its database engine, providing developers with a robust and scalable solution for storing and querying data.</p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="advantages-of-using-supabase">Advantages of using Supabase<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#advantages-of-using-supabase" class="hash-link" aria-label="Direct link to Advantages of using Supabase" title="Direct link to Advantages of using Supabase" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Open-source</strong>: Supabase is an open-source platform, allowing developers to contribute to its development and customize it to suit their needs.</p>
</li>
<li class="">
<p><strong>Scalability</strong>: Supabase is built on top of PostgreSQL, which is known for its scalability and performance. This makes Supabase a suitable choice for applications that require high scalability and availability.</p>
</li>
<li class="">
<p><strong>Real-time Capabilities</strong>: Supabase's real-time database feature enables developers to build applications that update in real-time without the need for manual refreshing. This is particularly useful for collaborative applications, chat systems, and live dashboards.</p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-cases-for-supabase">Use cases for Supabase<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#use-cases-for-supabase" class="hash-link" aria-label="Direct link to Use cases for Supabase" title="Direct link to Use cases for Supabase" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Real-time Collaboration</strong>: Supabase's real-time capabilities make it an excellent choice for applications that require real-time collaboration, such as collaborative document editing or project management tools.</p>
</li>
<li class="">
<p><strong>Data-Intensive Applications</strong>: Supabase's integration with PostgreSQL makes it a great choice for applications that deal with large amounts of structured data, such as analytics platforms or e-commerce systems.</p>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="firebase-overview">Firebase Overview<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#firebase-overview" class="hash-link" aria-label="Direct link to Firebase Overview" title="Direct link to Firebase Overview" translate="no">​</a></h3>
<p>Firebase is a comprehensive BaaS platform provided by Google, offering a wide range of services and tools to help developers build high-quality applications quickly. It provides a complete backend infrastructure, including data storage, authentication, hosting, and more.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="features-of-firebase">Features of Firebase<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#features-of-firebase" class="hash-link" aria-label="Direct link to Features of Firebase" title="Direct link to Features of Firebase" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Real-time Database</strong>: Firebase offers a NoSQL real-time database that allows developers to store and sync data in real-time across multiple clients.</p>
</li>
<li class="">
<p><strong>Authentication</strong>: Firebase provides a simple and secure authentication system that supports various authentication providers, including email/password, social logins, and third-party identity providers.</p>
</li>
<li class="">
<p><strong>Serverless Functions</strong>: Firebase allows developers to write serverless functions using Node.js, which can be triggered by events or invoked directly from client applications.</p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="advantages-of-using-firebase">Advantages of using Firebase<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#advantages-of-using-firebase" class="hash-link" aria-label="Direct link to Advantages of using Firebase" title="Direct link to Advantages of using Firebase" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Integration with Google Services</strong>: Firebase seamlessly integrates with other Google services, such as Google Analytics, Google Cloud Storage, and Google Cloud Functions, making it easy to leverage these services within your application.</p>
</li>
<li class="">
<p><strong>Scalability</strong>: Firebase is built on Google Cloud Platform, which offers high scalability and reliability. This makes Firebase a suitable choice for applications with high traffic and demanding workloads.</p>
</li>
<li class="">
<p><strong>Extensive Documentation and Support</strong>: Firebase has extensive documentation, tutorials, and a large community of developers, making it easy to find help and resources when needed.</p>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-cases-for-firebase">Use cases for Firebase<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#use-cases-for-firebase" class="hash-link" aria-label="Direct link to Use cases for Firebase" title="Direct link to Use cases for Firebase" translate="no">​</a></h4>
<ul>
<li class="">
<p><strong>Mobile Applications</strong>: Firebase is widely used for building mobile applications, as it provides a range of features tailored specifically for mobile development, including push notifications, in-app messaging, and crash reporting.</p>
</li>
<li class="">
<p><strong>Real-time Chat Applications</strong>: Firebase's real-time database and authentication services make it a great choice for building real-time chat applications, where messages need to be delivered and displayed instantly.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparison">Comparison<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#comparison" class="hash-link" aria-label="Direct link to Comparison" title="Direct link to Comparison" translate="no">​</a></h2>
<p>Now that we have explored the features and advantages of Supabase and Firebase individually, let's compare them in different areas to help you make an informed decision.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="data-storage">Data Storage<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#data-storage" class="hash-link" aria-label="Direct link to Data Storage" title="Direct link to Data Storage" translate="no">​</a></h3>
<p>Both Supabase and Firebase offer data storage capabilities, but they differ in their approach. Supabase utilizes PostgreSQL, a powerful and reliable relational database, while Firebase offers a NoSQL real-time database.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-data-storage-example">Supabase Data Storage Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#supabase-data-storage-example" class="hash-link" aria-label="Direct link to Supabase Data Storage Example" title="Direct link to Supabase Data Storage Example" translate="no">​</a></h4>
<p>To store data in Supabase, you can use the <code>supabase-js</code> library, which provides a simple and intuitive API to interact with the database. Here's an example of how to insert data into a table using Supabase:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createClient </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@supabase/supabase-js'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> supabase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createClient</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'your-supabase-url'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'your-supabase-key'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">insertData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">insert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'John'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Jane'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'jane@example.com'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Error inserting data:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Data inserted successfully:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">insertData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the example above, we create a Supabase client using the provided URL and API key. We then use the <code>from</code> method to specify the table we want to insert data into, and the <code>insert</code> method to insert an array of objects representing the data.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="firebase-data-storage-example">Firebase Data Storage Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#firebase-data-storage-example" class="hash-link" aria-label="Direct link to Firebase Data Storage Example" title="Direct link to Firebase Data Storage Example" translate="no">​</a></h4>
<p>To store data in Firebase, you can use the Firebase Realtime Database API, which provides a NoSQL JSON data model. Here's an example of how to insert data into a Firebase database:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">firebase</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'firebase/app'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'firebase/database'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> firebaseConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Your Firebase configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">firebase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">initializeApp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">firebaseConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">insertData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> database </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> firebase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">database</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> usersRef </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> database</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">ref</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> newUsersRef </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> usersRef</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  newUsersRef</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'John'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Error inserting data:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Data inserted successfully'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">insertData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the example above, we initialize the Firebase app with the provided configuration. We then get a reference to the <code>users</code> collection in the database and use the <code>push</code> method to generate a new unique key for the user. Finally, we use the <code>set</code> method to insert the data into the database.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authentication">Authentication<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">​</a></h3>
<p>Authentication is a crucial component of most applications, and both Supabase and Firebase offer easy-to-use authentication services.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-authentication-example">Supabase Authentication Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#supabase-authentication-example" class="hash-link" aria-label="Direct link to Supabase Authentication Example" title="Direct link to Supabase Authentication Example" translate="no">​</a></h4>
<p>Supabase provides various authentication providers, including email/password authentication and social logins. Here's an example of how to authenticate a user using Supabase:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createClient </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@supabase/supabase-js'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> supabase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createClient</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'your-supabase-url'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'your-supabase-key'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">authenticateUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> session</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">auth</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">signIn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Error authenticating user:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'User authenticated successfully:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> session</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">authenticateUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the example above, we create a Supabase client using the provided URL and API key. We then use the <code>signIn</code> method of the <code>auth</code> object to authenticate a user using their email and password.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="firebase-authentication-example">Firebase Authentication Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#firebase-authentication-example" class="hash-link" aria-label="Direct link to Firebase Authentication Example" title="Direct link to Firebase Authentication Example" translate="no">​</a></h4>
<p>Firebase offers a wide range of authentication providers, including email/password authentication, social logins, and third-party identity providers. Here's an example of how to authenticate a user using Firebase:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">firebase</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'firebase/app'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'firebase/auth'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> firebaseConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Your Firebase configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">firebase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">initializeApp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">firebaseConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">authenticateUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> auth </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> firebase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">auth</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> userCredential </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> auth</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">signInWithEmailAndPassword</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'User authenticated successfully:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> userCredential</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">user</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Error authenticating user:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">authenticateUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the example above, we initialize the Firebase app with the provided configuration. We then get an instance of the <code>auth</code> object and use the <code>signInWithEmailAndPassword</code> method to authenticate a user using their email and password.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="real-time-database">Real-time Database<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#real-time-database" class="hash-link" aria-label="Direct link to Real-time Database" title="Direct link to Real-time Database" translate="no">​</a></h3>
<p>Real-time database capabilities are essential for applications that require instant updates. Both Supabase and Firebase provide real-time capabilities, but they differ in their approach.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-real-time-database-example">Supabase Real-time Database Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#supabase-real-time-database-example" class="hash-link" aria-label="Direct link to Supabase Real-time Database Example" title="Direct link to Supabase Real-time Database Example" translate="no">​</a></h4>
<p>Supabase utilizes websockets to provide real-time updates to clients. Here's an example of how to listen for real-time updates in Supabase:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createClient </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@supabase/supabase-js'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> supabase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createClient</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'your-supabase-url'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'your-supabase-key'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">supabase</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">on</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'INSERT'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">payload</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'New user inserted:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> payload</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">new</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the example above, we create a Supabase client using the provided URL and API key. We then use the <code>from</code> method to specify the table we want to listen for updates on. We can then use the <code>on</code> method to specify the type of event we want to listen for, in this case, <code>INSERT</code>. Finally, we call the <code>subscribe</code> method to start listening for real-time updates.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="firebase-real-time-database-example">Firebase Real-time Database Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#firebase-real-time-database-example" class="hash-link" aria-label="Direct link to Firebase Real-time Database Example" title="Direct link to Firebase Real-time Database Example" translate="no">​</a></h4>
<p>Firebase provides a real-time NoSQL database that automatically syncs data across multiple clients. Here's an example of how to listen for real-time updates in Firebase:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">firebase</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'firebase/app'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'firebase/database'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> firebaseConfig </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Your Firebase configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">firebase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">initializeApp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">firebaseConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> database </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> firebase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">database</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">database</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">ref</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">on</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'child_added'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">snapshot</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'New user added:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> snapshot</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">val</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the example above, we initialize the Firebase app with the provided configuration. We then get a reference to the <code>users</code> collection in the database and use the <code>on</code> method to listen for the <code>child_added</code> event. Whenever a new child is added to the <code>users</code> collection, the callback function will be triggered with a snapshot of the new data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="serverless-functions">Serverless Functions<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#serverless-functions" class="hash-link" aria-label="Direct link to Serverless Functions" title="Direct link to Serverless Functions" translate="no">​</a></h3>
<p>Serverless functions allow developers to run code in the cloud without managing servers. Both Supabase and Firebase support serverless functions.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-serverless-functions-example">Supabase Serverless Functions Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#supabase-serverless-functions-example" class="hash-link" aria-label="Direct link to Supabase Serverless Functions Example" title="Direct link to Supabase Serverless Functions Example" translate="no">​</a></h4>
<p>Supabase provides an easy way to create serverless functions using the <code>supabase</code> CLI. Here's an example of a Supabase serverless function that returns a random number:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// random-number.js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">exports</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method-variable function-variable method function property-access" style="color:#d73a49">handler</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">event</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> randomNumber </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Math</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">random</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">statusCode</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> randomNumber </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>To deploy the serverless function, navigate to the directory where the function is located and run the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">supabase functions deploy random-number</span><br></span></code></pre></div></div>
<p>Once deployed, the function will have a URL that can be used to invoke it.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="firebase-serverless-functions-example">Firebase Serverless Functions Example<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#firebase-serverless-functions-example" class="hash-link" aria-label="Direct link to Firebase Serverless Functions Example" title="Direct link to Firebase Serverless Functions Example" translate="no">​</a></h4>
<p>Firebase allows developers to write serverless functions using Node.js. Here's an example of a Firebase serverless function that returns a random number:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// random-number.js</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> functions </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'firebase-functions'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">exports</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">randomNumber</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> functions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">https</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">onRequest</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">request</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> response</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> randomNumber </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Math</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">random</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> randomNumber </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>To deploy the serverless function, navigate to the directory where the function is located and run the following command:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">firebase deploy --only functions</span><br></span></code></pre></div></div>
<p>Once deployed, the function will have a URL that can be used to invoke it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="pricing">Pricing<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#pricing" class="hash-link" aria-label="Direct link to Pricing" title="Direct link to Pricing" translate="no">​</a></h3>
<p>Pricing is an important consideration when choosing a BaaS platform. Both Supabase and Firebase offer a range of pricing plans to suit different needs.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-pricing">Supabase Pricing<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#supabase-pricing" class="hash-link" aria-label="Direct link to Supabase Pricing" title="Direct link to Supabase Pricing" translate="no">​</a></h4>
<p>Supabase offers a free plan that includes 10,000 monthly active users (MAUs) and 10 GB of data storage. They also offer paid plans starting at $25/month for additional MAUs and storage. You can find more details about Supabase's pricing on their website.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="firebase-pricing">Firebase Pricing<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#firebase-pricing" class="hash-link" aria-label="Direct link to Firebase Pricing" title="Direct link to Firebase Pricing" translate="no">​</a></h4>
<p>Firebase offers a free plan that includes a generous usage limit for most of its services. They also offer paid plans starting at $25/month for additional usage and advanced features. You can find more details about Firebase's pricing on their website.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="considerations">Considerations<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#considerations" class="hash-link" aria-label="Direct link to Considerations" title="Direct link to Considerations" translate="no">​</a></h2>
<p>When deciding between Supabase and Firebase, there are a few considerations to keep in mind.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="scalability">Scalability<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#scalability" class="hash-link" aria-label="Direct link to Scalability" title="Direct link to Scalability" translate="no">​</a></h3>
<p>Both Supabase and Firebase offer scalability, but they differ in their approach. Supabase is built on top of PostgreSQL, which is known for its scalability and performance. Firebase is built on Google Cloud Platform, which offers high scalability and reliability. Consider the scalability requirements of your application and choose accordingly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="developer-experience">Developer Experience<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#developer-experience" class="hash-link" aria-label="Direct link to Developer Experience" title="Direct link to Developer Experience" translate="no">​</a></h3>
<p>The developer experience is crucial when choosing a BaaS platform. Supabase and Firebase both provide comprehensive documentation and easy-to-use APIs. Consider your familiarity with the technologies and the ease of integration with your existing development workflow.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="community-support">Community Support<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#community-support" class="hash-link" aria-label="Direct link to Community Support" title="Direct link to Community Support" translate="no">​</a></h3>
<p>Community support can greatly impact your development experience. Both Supabase and Firebase have active communities of developers and provide support through forums, documentation, and tutorials. Consider the availability of resources and the community engagement of each platform.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/supabase-firebase-backend-service-right#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Supabase and Firebase are both powerful BaaS platforms that offer a range of features to simplify the development process. Supabase excels in real-time capabilities and data storage with its PostgreSQL integration, making it a great choice for applications that require real-time collaboration and deal with large amounts of structured data. Firebase, on the other hand, provides seamless integration with other Google services and is well-suited for mobile applications and real-time chat systems.</p>
<p>When choosing between Supabase and Firebase, consider the specific needs of your project, such as data storage requirements, authentication mechanisms, and scalability needs. Evaluate the advantages and use cases of each platform and consider factors like pricing, developer experience, and community support. By carefully considering these factors, you can select the BaaS platform that best aligns with your project's requirements and accelerate your development process.</p>]]></content:encoded>
            <category>BaaS</category>
            <category>Backend-as-a-Service</category>
            <category>Comparison</category>
            <category>Firebase</category>
            <category>Supabase</category>
        </item>
        <item>
            <title><![CDATA[Getting Started with Supabase: A Comprehensive Tutorial]]></title>
            <link>https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial</link>
            <guid>https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial</guid>
            <pubDate>Wed, 01 Jul 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Start a Supabase project with migrations, typed clients, Row Level Security, authentication, and a production-safe local workflow.]]></description>
            <content:encoded><![CDATA[<p>Start a Supabase project with migrations, typed clients, Row Level Security, authentication, and a production-safe local workflow. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="getting started supabase comprehensive tutorial" src="https://dopebase.com/assets/images/01-cover13-1e15a121-ab1074a5c7d759c8e91dedb191ad460c.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Start a Supabase project with migrations, typed clients, Row Level Security, authentication, and a production-safe local workflow.</p>
<p>Treat the database schema, Row Level Security policies, authentication lifecycle, indexes, and migrations as one system. Client convenience must not replace server-enforced authorization, and realtime subscriptions need cleanup and reconnect behavior.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Create schema changes as migrations instead of dashboard-only edits.</li>
<li class="">Generate types after schema changes.</li>
<li class="">Test allowed and denied access paths locally.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Enable and test Row Level Security before exposing tables.</li>
<li class="">Validate session refresh, revoked access, and offline recovery.</li>
<li class="">Add indexes from measured query plans and monitor database limits.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://supabase.com/docs" target="_blank" rel="noopener noreferrer" class="">Supabase documentation</a></li>
<li class=""><a href="https://supabase.com/docs/guides/auth" target="_blank" rel="noopener noreferrer" class="">Supabase Auth</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-supabase">What is Supabase?<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#what-is-supabase" class="hash-link" aria-label="Direct link to What is Supabase?" title="Direct link to What is Supabase?" translate="no">​</a></h3>
<p>Supabase is an open-source platform that combines the power of PostgreSQL and the simplicity of Firebase. It provides developers with a set of tools and services, including a database, authentication, real-time subscriptions, and API endpoints, to build scalable and secure applications.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-use-supabase">Why use Supabase?<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#why-use-supabase" class="hash-link" aria-label="Direct link to Why use Supabase?" title="Direct link to Why use Supabase?" translate="no">​</a></h3>
<p>Supabase offers several advantages for software developers. Firstly, it leverages the power of PostgreSQL, a popular and robust relational database management system. This ensures data integrity, scalability, and flexibility for your applications. Secondly, Supabase provides a suite of services that are commonly required in modern applications, such as user authentication, real-time subscriptions, and API endpoints. This eliminates the need for integrating multiple third-party services and simplifies the development process. Lastly, Supabase is open-source and self-hostable, giving you complete control over your data and infrastructure.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="prerequisites">Prerequisites<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h3>
<p>Before diving into Supabase, make sure you have the following prerequisites:</p>
<ul>
<li class="">Basic knowledge of SQL and relational databases.</li>
<li class="">Familiarity with JavaScript and Node.js.</li>
<li class="">An active internet connection.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="setting-up-supabase">Setting Up Supabase<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#setting-up-supabase" class="hash-link" aria-label="Direct link to Setting Up Supabase" title="Direct link to Setting Up Supabase" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-an-account">Creating an Account<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#creating-an-account" class="hash-link" aria-label="Direct link to Creating an Account" title="Direct link to Creating an Account" translate="no">​</a></h3>
<p>To get started with Supabase, you first need to create an account. Visit the <a href="https://supabase.io/" target="_blank" rel="noopener noreferrer" class="">Supabase website</a> and click on the "Get Started for Free" button. Fill in the required details, including your email address and a password, and click on the "Create Account" button. You will receive a confirmation email to verify your account.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-a-project">Creating a Project<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#creating-a-project" class="hash-link" aria-label="Direct link to Creating a Project" title="Direct link to Creating a Project" translate="no">​</a></h3>
<p>Once you have created an account, you can create a new project in Supabase. Log in to your Supabase account and click on the "New Project" button. Enter a name for your project and choose a region for hosting your database. Click on the "Create Project" button to create your project.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="configuring-supabase">Configuring Supabase<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#configuring-supabase" class="hash-link" aria-label="Direct link to Configuring Supabase" title="Direct link to Configuring Supabase" translate="no">​</a></h3>
<p>After creating a project, you will be redirected to the project dashboard. Here, you can find your project URL, API URL, and API key. These credentials are required to connect to your Supabase database and make API requests. Make sure to securely store these credentials as they are sensitive.</p>
<p>To configure Supabase in your application, you need to install the Supabase client library. You can install it via npm by running the following command:</p>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> @supabase/supabase-js</span><br></span></code></pre></div></div>
<p>Once installed, you can initialize the Supabase client by providing your project URL and API key:</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> createClient </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@supabase/supabase-js'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> supabaseUrl </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://your-project-url.supabase.co'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> supabaseKey </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'your-api-key'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> supabase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createClient</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">supabaseUrl</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> supabaseKey</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>With the Supabase client initialized, you are now ready to manage your database.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="database-management">Database Management<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#database-management" class="hash-link" aria-label="Direct link to Database Management" title="Direct link to Database Management" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-tables">Creating Tables<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#creating-tables" class="hash-link" aria-label="Direct link to Creating Tables" title="Direct link to Creating Tables" translate="no">​</a></h3>
<p>To create a table in Supabase, you can use the <code>supabase.createTable()</code> method. This method takes two arguments: the table name and an object representing the table schema. The schema defines the columns and their data types for the table.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">createTable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'integer'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">primaryKey</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">notNull</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'text'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">notNull</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'text'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">notNull</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">unique</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">createdAt</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'timestamp'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword module" style="color:#00009f">default</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'now()'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we create a table named "users" with four columns: "id", "name", "email", and "createdAt". The "id" column is defined as an integer primary key, while the "name" and "email" columns are defined as non-null text fields. The "createdAt" column is a timestamp with a default value of the current timestamp.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="defining-relationships">Defining Relationships<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#defining-relationships" class="hash-link" aria-label="Direct link to Defining Relationships" title="Direct link to Defining Relationships" translate="no">​</a></h3>
<p>Supabase supports defining relationships between tables using foreign keys. To define a foreign key relationship, you can use the <code>supabase.createTable()</code> method and the <code>references</code> property in the column definition.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">createTable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'orders'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'integer'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">primaryKey</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">notNull</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">userId</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'integer'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">references</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">totalAmount</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'numeric'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">notNull</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we create a table named "orders" with three columns: "id", "userId", and "totalAmount". The "userId" column is defined as an integer and references the "users" table. This establishes a foreign key relationship between the "orders" and "users" tables.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="performing-crud-operations">Performing CRUD Operations<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#performing-crud-operations" class="hash-link" aria-label="Direct link to Performing CRUD Operations" title="Direct link to Performing CRUD Operations" translate="no">​</a></h3>
<p>Supabase provides a set of methods for performing CRUD (Create, Read, Update, Delete) operations on your database. Here are some examples:</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="create">Create<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#create" class="hash-link" aria-label="Direct link to Create" title="Direct link to Create" translate="no">​</a></h4>
<p>To insert a new row into a table, you can use the <code>supabase.insert()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">insert</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'John Doe'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Jane Smith'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'jane@example.com'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we insert two new rows into the "users" table.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="read">Read<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#read" class="hash-link" aria-label="Direct link to Read" title="Direct link to Read" translate="no">​</a></h4>
<p>To fetch data from a table, you can use the <code>supabase.from()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">select</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'*'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we fetch all columns (<code>*</code>) from the "users" table.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="update">Update<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#update" class="hash-link" aria-label="Direct link to Update" title="Direct link to Update" translate="no">​</a></h4>
<p>To update existing rows in a table, you can use the <code>supabase.update()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">update</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'John Smith'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">eq</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'id'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we update the "name" column of the row with the ID of 1 in the "users" table.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="delete">Delete<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#delete" class="hash-link" aria-label="Direct link to Delete" title="Direct link to Delete" translate="no">​</a></h4>
<p>To delete rows from a table, you can use the <code>supabase.delete()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">delete</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">eq</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'id'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we delete the row with the ID of 1 from the "users" table.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="authentication">Authentication<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#authentication" class="hash-link" aria-label="Direct link to Authentication" title="Direct link to Authentication" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="setting-up-authentication">Setting Up Authentication<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#setting-up-authentication" class="hash-link" aria-label="Direct link to Setting Up Authentication" title="Direct link to Setting Up Authentication" translate="no">​</a></h3>
<p>Supabase provides built-in authentication functionality to handle user registration, login, and session management. To enable authentication in your project, you need to configure the authentication providers and initialize the authentication client.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="configuring-providers">Configuring Providers<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#configuring-providers" class="hash-link" aria-label="Direct link to Configuring Providers" title="Direct link to Configuring Providers" translate="no">​</a></h4>
<p>To configure authentication providers, navigate to the "Authentication" section in your project dashboard. Here, you can enable and configure various providers, such as email/password, Google, GitHub, and more. Follow the on-screen instructions for each provider to set up the required credentials.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="initializing-the-authentication-client">Initializing the Authentication Client<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#initializing-the-authentication-client" class="hash-link" aria-label="Direct link to Initializing the Authentication Client" title="Direct link to Initializing the Authentication Client" translate="no">​</a></h4>
<p>To initialize the authentication client, you can use the <code>supabase.auth</code> object.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> auth </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">auth</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>With the authentication client initialized, you can now perform various authentication actions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="user-registration">User Registration<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#user-registration" class="hash-link" aria-label="Direct link to User Registration" title="Direct link to User Registration" translate="no">​</a></h3>
<p>To allow users to register in your application, you can use the <code>auth.signUp()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> auth</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">signUp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we register a new user with the email "<a href="mailto:john@example.com" target="_blank" rel="noopener noreferrer" class="">john@example.com</a>" and the password "password123".</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="user-login">User Login<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#user-login" class="hash-link" aria-label="Direct link to User Login" title="Direct link to User Login" translate="no">​</a></h3>
<p>To authenticate users in your application, you can use the <code>auth.signIn()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> auth</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">signIn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'john@example.com'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'password123'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we authenticate the user with the email "<a href="mailto:john@example.com" target="_blank" rel="noopener noreferrer" class="">john@example.com</a>" and the password "password123".</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="real-time-subscriptions">Real-time Subscriptions<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#real-time-subscriptions" class="hash-link" aria-label="Direct link to Real-time Subscriptions" title="Direct link to Real-time Subscriptions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="enabling-real-time-subscriptions">Enabling Real-time Subscriptions<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#enabling-real-time-subscriptions" class="hash-link" aria-label="Direct link to Enabling Real-time Subscriptions" title="Direct link to Enabling Real-time Subscriptions" translate="no">​</a></h3>
<p>Supabase provides real-time subscription functionality, allowing you to listen for changes in your database and receive updates in real-time. To enable real-time subscriptions, you need to configure the triggers and initialize the real-time client.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="configuring-triggers">Configuring Triggers<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#configuring-triggers" class="hash-link" aria-label="Direct link to Configuring Triggers" title="Direct link to Configuring Triggers" translate="no">​</a></h4>
<p>To configure triggers, navigate to the "Database" section in your project dashboard and select the table for which you want to enable real-time subscriptions. Click on the "Triggers" tab and create a new trigger. You can define the trigger condition and the action to be performed when the condition is met.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="initializing-the-real-time-client">Initializing the Real-time Client<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#initializing-the-real-time-client" class="hash-link" aria-label="Direct link to Initializing the Real-time Client" title="Direct link to Initializing the Real-time Client" translate="no">​</a></h4>
<p>To initialize the real-time client, you can use the <code>supabase.realtime</code> object.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> realtime </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">realtime</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>With the real-time client initialized, you can now listen for changes and handle real-time updates.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="listening-for-changes">Listening for Changes<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#listening-for-changes" class="hash-link" aria-label="Direct link to Listening for Changes" title="Direct link to Listening for Changes" translate="no">​</a></h3>
<p>To listen for changes in a table, you can use the <code>realtime.from()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> unsubscribe </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> realtime</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">on</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'INSERT'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">payload</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'New user inserted:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> payload</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">new</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we listen for new rows (<code>INSERT</code>) in the "users" table. Whenever a new row is inserted, the callback function is invoked, and the new row data is logged to the console.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-real-time-updates">Handling Real-time Updates<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#handling-real-time-updates" class="hash-link" aria-label="Direct link to Handling Real-time Updates" title="Direct link to Handling Real-time Updates" translate="no">​</a></h3>
<p>To handle real-time updates, you can use the appropriate callback functions based on the type of change (<code>INSERT</code>, <code>UPDATE</code>, <code>DELETE</code>).</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> unsubscribe </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> realtime</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token keyword module" style="color:#00009f">from</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">on</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'*'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">payload</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Change occurred:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> payload</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we listen for any change (<code>*</code>) in the "users" table. Whenever a change occurs, the callback function is invoked, and the change payload is logged to the console.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="api-endpoints">API Endpoints<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#api-endpoints" class="hash-link" aria-label="Direct link to API Endpoints" title="Direct link to API Endpoints" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-custom-api-endpoints">Creating Custom API Endpoints<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#creating-custom-api-endpoints" class="hash-link" aria-label="Direct link to Creating Custom API Endpoints" title="Direct link to Creating Custom API Endpoints" translate="no">​</a></h3>
<p>Supabase allows you to create custom API endpoints to perform server-side logic and interact with your database. To create a custom API endpoint, you can use the Supabase CLI or the Supabase Dashboard.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-cli">Supabase CLI<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#supabase-cli" class="hash-link" aria-label="Direct link to Supabase CLI" title="Direct link to Supabase CLI" translate="no">​</a></h4>
<p>To create a custom API endpoint using the Supabase CLI, navigate to your project directory and run the following command:</p>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">supabase generate api my-endpoint</span><br></span></code></pre></div></div>
<p>This will generate a new API endpoint in the <code>api</code> directory of your project. You can then implement your server-side logic in the generated files.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-dashboard">Supabase Dashboard<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#supabase-dashboard" class="hash-link" aria-label="Direct link to Supabase Dashboard" title="Direct link to Supabase Dashboard" translate="no">​</a></h4>
<p>To create a custom API endpoint using the Supabase Dashboard, navigate to the "API" section in your project dashboard. Click on the "New Endpoint" button and enter a name for your endpoint. You can then define the route, HTTP methods, and serverless function code for your endpoint.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="securing-api-endpoints">Securing API Endpoints<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#securing-api-endpoints" class="hash-link" aria-label="Direct link to Securing API Endpoints" title="Direct link to Securing API Endpoints" translate="no">​</a></h3>
<p>Supabase allows you to secure your API endpoints using various authentication mechanisms, such as API keys, JWT tokens, or custom authentication logic. To secure an API endpoint, you can use the <code>supabase.auth.api()</code> method.</p>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> supabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">auth</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">api</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'my-endpoint'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/path'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we secure the API endpoint named "my-endpoint" and make a GET request to the "/path" route.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-api-endpoints">Testing API Endpoints<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#testing-api-endpoints" class="hash-link" aria-label="Direct link to Testing API Endpoints" title="Direct link to Testing API Endpoints" translate="no">​</a></h3>
<p>To test your API endpoints, you can use tools like cURL or Postman. Make sure to include the appropriate authentication headers or tokens when making API requests to secured endpoints.</p>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Authorization: Bearer &lt;api-key&gt;'</span><span class="token plain"> https://api.supabase.co/my-endpoint/path</span><br></span></code></pre></div></div>
<p>In the above example, we make a cURL request to the "/path" route of the "my-endpoint" API endpoint, including the API key in the Authorization header.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="deployment">Deployment<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#deployment" class="hash-link" aria-label="Direct link to Deployment" title="Direct link to Deployment" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="deploying-supabase">Deploying Supabase<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#deploying-supabase" class="hash-link" aria-label="Direct link to Deploying Supabase" title="Direct link to Deploying Supabase" translate="no">​</a></h3>
<p>To deploy Supabase, you can use the Supabase CLI or the Supabase Dashboard.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-cli-1">Supabase CLI<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#supabase-cli-1" class="hash-link" aria-label="Direct link to Supabase CLI" title="Direct link to Supabase CLI" translate="no">​</a></h4>
<p>To deploy Supabase using the Supabase CLI, navigate to your project directory and run the following command:</p>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">supabase deploy</span><br></span></code></pre></div></div>
<p>This will deploy your Supabase project to the Supabase hosting infrastructure.</p>
<h4 class="anchor anchorTargetStickyNavbar_Jy_3" id="supabase-dashboard-1">Supabase Dashboard<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#supabase-dashboard-1" class="hash-link" aria-label="Direct link to Supabase Dashboard" title="Direct link to Supabase Dashboard" translate="no">​</a></h4>
<p>To deploy Supabase using the Supabase Dashboard, navigate to the "Hosting" section in your project dashboard. Click on the "Deploy" button to deploy your project to the Supabase hosting infrastructure.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="scaling-supabase">Scaling Supabase<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#scaling-supabase" class="hash-link" aria-label="Direct link to Scaling Supabase" title="Direct link to Scaling Supabase" translate="no">​</a></h3>
<p>Supabase is designed to scale horizontally by adding more instances of the Supabase service. You can scale your Supabase project by upgrading your plan or contacting the Supabase team for custom scaling options.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="monitoring-and-maintenance">Monitoring and Maintenance<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#monitoring-and-maintenance" class="hash-link" aria-label="Direct link to Monitoring and Maintenance" title="Direct link to Monitoring and Maintenance" translate="no">​</a></h3>
<p>Supabase provides monitoring and maintenance tools to help you keep your application running smoothly. You can monitor your project's performance, view logs, and perform maintenance tasks using the Supabase Dashboard.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/getting-started-supabase-comprehensive-tutorial#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we covered the basics of getting started with Supabase. We learned how to set up a Supabase account, create a project, configure Supabase, manage the database, enable authentication, utilize real-time subscriptions, create custom API endpoints, deploy Supabase, and perform monitoring and maintenance tasks. With the knowledge gained from this tutorial, you are now equipped to build scalable and secure applications using Supabase. Explore the official Supabase documentation for more advanced features and capabilities. Happy coding!</p>]]></content:encoded>
            <category>API</category>
            <category>Authentication</category>
            <category>Database</category>
            <category>deployment</category>
            <category>Real-time</category>
            <category>Supabase</category>
            <category>Tutorial</category>
        </item>
        <item>
            <title><![CDATA[Angular vs React: Choosing the Right Framework]]></title>
            <link>https://dopebase.com/blog/angular-react-choosing-right-framework</link>
            <guid>https://dopebase.com/blog/angular-react-choosing-right-framework</guid>
            <pubDate>Tue, 30 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Compare Angular and React by application constraints, team structure, rendering strategy, ecosystem ownership, and maintenance model.]]></description>
            <content:encoded><![CDATA[<p>Compare Angular and React by application constraints, team structure, rendering strategy, ecosystem ownership, and maintenance model. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="angular react choosing right framework" src="https://dopebase.com/assets/images/01-cover19-0fb895df-efc15365cb7d27287150cf0d60b33c30.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Compare Angular and React by application constraints, team structure, rendering strategy, ecosystem ownership, and maintenance model.</p>
<p>Build with standalone APIs, strict TypeScript, signals where local reactive state benefits from them, and explicit server-rendering or prerendering decisions. Keep Angular core and CLI aligned and stay on a supported release line.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Build a representative form and data-heavy route in each candidate.</li>
<li class="">Compare upgrade cadence and architectural conventions.</li>
<li class="">Include testing, accessibility, SSR, and observability in the decision.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Measure production bundles and Core Web Vitals.</li>
<li class="">Use route-level loading and server rendering only where they improve the user journey.</li>
<li class="">Run accessibility, security, and regression tests in CI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://angular.dev/overview" target="_blank" rel="noopener noreferrer" class="">Angular documentation</a></li>
<li class=""><a href="https://angular.dev/guide/signals" target="_blank" rel="noopener noreferrer" class="">Angular signals</a></li>
<li class=""><a href="https://angular.dev/reference/releases" target="_blank" rel="noopener noreferrer" class="">Angular releases</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-angular">What is Angular?<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#what-is-angular" class="hash-link" aria-label="Direct link to What is Angular?" title="Direct link to What is Angular?" translate="no">​</a></h3>
<p>Angular is a full-featured framework for building web applications. It is developed and maintained by Google and provides a comprehensive set of tools and features for building complex and scalable applications. Angular follows the component-based architecture, where the application is divided into reusable components, making it easier to manage and maintain large codebases.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-react">What is React?<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#what-is-react" class="hash-link" aria-label="Direct link to What is React?" title="Direct link to What is React?" translate="no">​</a></h3>
<p>React is a lightweight JavaScript library for building user interfaces. It was developed by Facebook and is widely used for building single-page applications. React follows a virtual DOM approach, where changes in the UI are efficiently tracked and updated, resulting in faster rendering and improved performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-choosing-the-right-framework">Importance of Choosing the Right Framework<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#importance-of-choosing-the-right-framework" class="hash-link" aria-label="Direct link to Importance of Choosing the Right Framework" title="Direct link to Importance of Choosing the Right Framework" translate="no">​</a></h3>
<p>Choosing the right framework is crucial as it can significantly impact the development process, performance, and maintainability of your application. It is essential to consider factors such as performance, learning curve, community support, scalability, and the availability of tools and ecosystem before making a decision.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="performance">Performance<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="angular-performance">Angular Performance<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#angular-performance" class="hash-link" aria-label="Direct link to Angular Performance" title="Direct link to Angular Performance" translate="no">​</a></h3>
<p>Angular leverages the power of its own change detection mechanism known as Zone.js. Zone.js helps in efficient change detection and updates the UI only when necessary. Angular also provides lazy loading, which allows loading modules and components on-demand, improving the overall performance of the application.</p>
<p>Here's an example of how Angular handles change detection:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Input</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-example'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;div&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;h1&gt;{{ title }}&lt;/h1&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;button (click)="updateTitle()"&gt;Update Title&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/div&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ExampleComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Input</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> title</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">updateTitle</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">title</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Updated Title'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we have an <code>ExampleComponent</code> that takes an input <code>title</code> and updates it when the button is clicked. Angular's change detection mechanism efficiently detects the change in the <code>title</code> property and updates the UI accordingly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-performance">React Performance<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#react-performance" class="hash-link" aria-label="Direct link to React Performance" title="Direct link to React Performance" translate="no">​</a></h3>
<p>React's virtual DOM diffing algorithm enables efficient updating of the UI by only applying the necessary changes. It minimizes the number of actual DOM manipulations, resulting in improved performance. React also provides features like memoization and code splitting, which further enhance the performance of the application.</p>
<p>Here's an example of how React handles UI updates:</p>
<div class="language-jsx codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-jsx codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">React</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useState </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">ExampleComponent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setTitle</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Initial Title'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">updateTitle</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">setTitle</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Updated Title'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">updateTitle</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Update Title</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we have a functional component <code>ExampleComponent</code> that uses the <code>useState</code> hook to manage the <code>title</code> state. When the button is clicked, the <code>updateTitle</code> function is called, which updates the <code>title</code> state. React's virtual DOM efficiently updates the UI by only applying the necessary changes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparing-performance">Comparing Performance<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#comparing-performance" class="hash-link" aria-label="Direct link to Comparing Performance" title="Direct link to Comparing Performance" translate="no">​</a></h3>
<p>Both Angular and React offer excellent performance, but the specific requirements of your project may dictate which framework suits your needs better. Angular's change detection mechanism and lazy loading can be advantageous for large-scale applications, whereas React's virtual DOM diffing algorithm and code splitting make it a great choice for smaller, highly interactive applications.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="learning-curve">Learning Curve<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#learning-curve" class="hash-link" aria-label="Direct link to Learning Curve" title="Direct link to Learning Curve" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="angular-learning-curve">Angular Learning Curve<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#angular-learning-curve" class="hash-link" aria-label="Direct link to Angular Learning Curve" title="Direct link to Angular Learning Curve" translate="no">​</a></h3>
<p>Angular has a steep learning curve due to its comprehensive feature set and the use of TypeScript, a statically typed superset of JavaScript. Angular requires a solid understanding of concepts such as modules, components, services, and dependency injection. However, once you grasp these concepts, Angular provides a robust and structured approach to development.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-learning-curve">React Learning Curve<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#react-learning-curve" class="hash-link" aria-label="Direct link to React Learning Curve" title="Direct link to React Learning Curve" translate="no">​</a></h3>
<p>React has a relatively gentle learning curve compared to Angular. It follows a simpler component-based approach and uses JavaScript, which is familiar to most developers. React's documentation and community resources make it easy to get started and learn the framework quickly. However, mastering advanced concepts and best practices may require additional effort.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="ease-of-learning">Ease of Learning<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#ease-of-learning" class="hash-link" aria-label="Direct link to Ease of Learning" title="Direct link to Ease of Learning" translate="no">​</a></h3>
<p>While Angular may have a steeper learning curve, it provides a comprehensive set of tools and features that can benefit complex projects. React, on the other hand, offers a simpler approach to development, making it easier to learn and get started quickly. The choice between the two frameworks depends on your project requirements and the level of complexity you anticipate.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="community-support">Community Support<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#community-support" class="hash-link" aria-label="Direct link to Community Support" title="Direct link to Community Support" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="angular-community-support">Angular Community Support<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#angular-community-support" class="hash-link" aria-label="Direct link to Angular Community Support" title="Direct link to Angular Community Support" translate="no">​</a></h3>
<p>Angular has a large and active community. Being backed by Google, it has strong community support, and there are numerous online resources, tutorials, and forums available for developers to seek help and guidance. The official Angular documentation is extensive and regularly updated, making it a valuable resource for developers.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-community-support">React Community Support<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#react-community-support" class="hash-link" aria-label="Direct link to React Community Support" title="Direct link to React Community Support" translate="no">​</a></h3>
<p>React has one of the largest and most active communities among JavaScript frameworks. It has a vibrant ecosystem with numerous open-source libraries, tools, and components developed and maintained by the community. React's community support is unparalleled, and developers can easily find answers to their questions and find solutions to common problems.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparing-community-support">Comparing Community Support<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#comparing-community-support" class="hash-link" aria-label="Direct link to Comparing Community Support" title="Direct link to Comparing Community Support" translate="no">​</a></h3>
<p>Both Angular and React have strong community support, but React's community is more extensive and diverse. React's popularity and widespread adoption have led to a vast ecosystem of libraries and tools, making it easier to find solutions and leverage existing resources. However, Angular's official documentation and strong support from Google also make it a reliable choice for developers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="scalability">Scalability<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#scalability" class="hash-link" aria-label="Direct link to Scalability" title="Direct link to Scalability" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="angular-scalability">Angular Scalability<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#angular-scalability" class="hash-link" aria-label="Direct link to Angular Scalability" title="Direct link to Angular Scalability" translate="no">​</a></h3>
<p>Angular is designed with scalability in mind. Its modular architecture allows for easy component reuse and separation of concerns. Angular provides features like lazy loading, AOT (Ahead of Time) compilation, and tree shaking, which help optimize the bundle size and improve the performance of large-scale applications. With proper architectural patterns and best practices, Angular can handle complex projects with ease.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-scalability">React Scalability<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#react-scalability" class="hash-link" aria-label="Direct link to React Scalability" title="Direct link to React Scalability" translate="no">​</a></h3>
<p>React's component-based architecture also enables scalability. React components can be easily reused and composed, making it easier to manage and maintain large codebases. React's virtual DOM diffing algorithm ensures efficient rendering and updates, even for large applications. However, managing state and data flow in larger projects may require additional libraries or architectural patterns.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparing-scalability">Comparing Scalability<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#comparing-scalability" class="hash-link" aria-label="Direct link to Comparing Scalability" title="Direct link to Comparing Scalability" translate="no">​</a></h3>
<p>Both Angular and React are highly scalable frameworks, but Angular's opinionated approach and built-in features make it easier to scale and manage large-scale applications. React's flexibility allows for more customizability and adaptability to different project requirements. The choice between the two frameworks depends on the specific scalability needs of your project.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="tooling-and-ecosystem">Tooling and Ecosystem<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#tooling-and-ecosystem" class="hash-link" aria-label="Direct link to Tooling and Ecosystem" title="Direct link to Tooling and Ecosystem" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="angular-tooling-and-ecosystem">Angular Tooling and Ecosystem<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#angular-tooling-and-ecosystem" class="hash-link" aria-label="Direct link to Angular Tooling and Ecosystem" title="Direct link to Angular Tooling and Ecosystem" translate="no">​</a></h3>
<p>Angular provides a comprehensive set of tools and libraries that enhance the development experience. The Angular CLI (Command Line Interface) simplifies project setup, code generation, and testing. Angular projects can use modern browser automation such as Playwright or Cypress for end-to-end testing. The Angular ecosystem includes various libraries and packages that extend the functionality of the framework, such as Angular Material for UI components and NgRx for state management.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="react-tooling-and-ecosystem">React Tooling and Ecosystem<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#react-tooling-and-ecosystem" class="hash-link" aria-label="Direct link to React Tooling and Ecosystem" title="Direct link to React Tooling and Ecosystem" translate="no">​</a></h3>
<p>React has a rich ecosystem of tools and libraries that enhance the development experience. Modern React projects commonly use a framework or a build tool such as Vite. Vitest or Jest and React Testing Library cover unit and component behavior. The React ecosystem includes libraries like Material-UI for UI components and Redux for state management.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparing-tooling-and-ecosystem">Comparing Tooling and Ecosystem<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#comparing-tooling-and-ecosystem" class="hash-link" aria-label="Direct link to Comparing Tooling and Ecosystem" title="Direct link to Comparing Tooling and Ecosystem" translate="no">​</a></h3>
<p>Both Angular and React have robust tooling and ecosystems that cater to different needs. Angular's tooling is more integrated and provides a consistent development experience. React's ecosystem, on the other hand, offers more flexibility and allows developers to choose from a wide range of libraries and tools based on their preferences. The choice between the two frameworks depends on your familiarity with the tools and the specific requirements of your project.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/angular-react-choosing-right-framework#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we compared Angular and React, two popular JavaScript frameworks, based on various factors such as performance, learning curve, community support, scalability, and tooling and ecosystem. Angular provides a comprehensive set of features and tools, making it suitable for large-scale applications with complex requirements. React, on the other hand, offers a simpler approach to development and a vast ecosystem of libraries and tools, making it ideal for smaller, highly interactive applications. Ultimately, the choice between Angular and React depends on your project requirements and your familiarity with the frameworks and their respective ecosystems.</p>]]></content:encoded>
            <category>Angular</category>
            <category>dopebase.com</category>
            <category>Frontend Development</category>
            <category>JavaScript</category>
            <category>React</category>
            <category>Web Development</category>
        </item>
        <item>
            <title><![CDATA[Angular Performance Tips: Boosting Your App's Speed]]></title>
            <link>https://dopebase.com/blog/angular-performance-tips-boosting-app-speed</link>
            <guid>https://dopebase.com/blog/angular-performance-tips-boosting-app-speed</guid>
            <pubDate>Mon, 29 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Improve Angular performance with measured rendering work, route-level loading, image and network budgets, SSR decisions, and stable reactive state.]]></description>
            <content:encoded><![CDATA[<p>Improve Angular performance with measured rendering work, route-level loading, image and network budgets, SSR decisions, and stable reactive state. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="angular performance tips boosting app speed" src="https://dopebase.com/assets/images/01-cover18-e9609da2-84e091481879ed1ed71600acfa4ba77b.jpg" width="1100" height="618" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Improve Angular performance with measured rendering work, route-level loading, image and network budgets, SSR decisions, and stable reactive state.</p>
<p>Build with standalone APIs, strict TypeScript, signals where local reactive state benefits from them, and explicit server-rendering or prerendering decisions. Keep Angular core and CLI aligned and stay on a supported release line.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Use Angular DevTools and browser performance traces.</li>
<li class="">Adopt OnPush and signals where they reduce unnecessary work.</li>
<li class="">Track bundle and Core Web Vitals regressions in CI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Measure production bundles and Core Web Vitals.</li>
<li class="">Use route-level loading and server rendering only where they improve the user journey.</li>
<li class="">Run accessibility, security, and regression tests in CI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://angular.dev/overview" target="_blank" rel="noopener noreferrer" class="">Angular documentation</a></li>
<li class=""><a href="https://angular.dev/guide/signals" target="_blank" rel="noopener noreferrer" class="">Angular signals</a></li>
<li class=""><a href="https://angular.dev/reference/releases" target="_blank" rel="noopener noreferrer" class="">Angular releases</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-angular">What is Angular?<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#what-is-angular" class="hash-link" aria-label="Direct link to What is Angular?" title="Direct link to What is Angular?" translate="no">​</a></h3>
<p>Angular is a popular JavaScript framework for building web applications. It provides a structured approach to develop dynamic and responsive Single Page Applications (SPAs). Angular offers a rich set of features, including two-way data binding, dependency injection, and a powerful templating system. However, as your application grows in complexity, it's important to ensure its performance remains optimal.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-is-performance-important">Why is Performance Important?<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#why-is-performance-important" class="hash-link" aria-label="Direct link to Why is Performance Important?" title="Direct link to Why is Performance Important?" translate="no">​</a></h3>
<p>Performance is crucial for delivering a smooth user experience. Slow-loading pages and unresponsive UI can drive users away, leading to decreased engagement and conversion rates. By optimizing your Angular application's performance, you can minimize load times, improve rendering speed, and enhance overall user satisfaction.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimizing-angular-performance">Optimizing Angular Performance<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimizing-angular-performance" class="hash-link" aria-label="Direct link to Optimizing Angular Performance" title="Direct link to Optimizing Angular Performance" translate="no">​</a></h3>
<p>To optimize the performance of your Angular application, you can follow several best practices and techniques. In the following sections, we will explore each of these techniques in detail, along with code examples and step-by-step explanations.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-angular-cli">Use Angular CLI<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-angular-cli" class="hash-link" aria-label="Direct link to Use Angular CLI" title="Direct link to Use Angular CLI" translate="no">​</a></h2>
<p>Angular CLI (Command Line Interface) is a powerful tool that simplifies the development process and provides various optimization features out of the box. By utilizing Angular CLI, you can automate several tasks and improve your app's performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="lazy-loading">Lazy Loading<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#lazy-loading" class="hash-link" aria-label="Direct link to Lazy Loading" title="Direct link to Lazy Loading" translate="no">​</a></h3>
<p>Lazy loading is a technique that loads only the necessary modules and components when they are required, instead of loading everything upfront. This can significantly reduce the initial load time of your application and improve its overall performance. To enable lazy loading in your Angular app, you can use the <code>loadChildren</code> property in the routing configuration. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> routes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Routes</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'lazy'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function-variable function" style="color:#d73a49">loadChildren</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">import</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'./lazy/lazy.module'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">m </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> m</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">LazyModule</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define a route for the 'lazy' path and specify the module to load lazily using the <code>loadChildren</code> property. By doing so, the 'lazy' module will only be loaded when the user navigates to the corresponding route.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="change-detection-strategy">Change Detection Strategy<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#change-detection-strategy" class="hash-link" aria-label="Direct link to Change Detection Strategy" title="Direct link to Change Detection Strategy" translate="no">​</a></h3>
<p>Angular's change detection mechanism is responsible for detecting changes in the application's data and updating the view accordingly. By default, Angular uses the 'Default' change detection strategy, which checks all components for changes on every change detection cycle. This can be inefficient, especially for large applications with many components.</p>
<p>To optimize change detection, you can use the 'OnPush' change detection strategy. With this strategy, Angular only checks for changes in components that have inputs bound to them or when an event is triggered. This can significantly reduce the number of unnecessary change detection cycles and improve performance. Here's an example of using the 'OnPush' strategy:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-example'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./example.component.html'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  changeDetection</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ChangeDetectionStrategy</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">OnPush</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ExampleComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// component code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we set the <code>changeDetection</code> property of the component to <code>OnPush</code>. This tells Angular to use the 'OnPush' change detection strategy for this component.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="minimize-dom-manipulation">Minimize DOM Manipulation<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#minimize-dom-manipulation" class="hash-link" aria-label="Direct link to Minimize DOM Manipulation" title="Direct link to Minimize DOM Manipulation" translate="no">​</a></h3>
<p>DOM manipulation can be an expensive operation, especially when performed frequently. To improve performance, it's important to minimize unnecessary DOM updates. One way to achieve this is by using Angular's built-in directives such as <code>ngIf</code> and <code>ngFor</code> effectively.</p>
<p>For example, instead of using <code>ngShow</code> to conditionally show or hide an element, you can use <code>ngIf</code> to completely remove or add the element from the DOM. This can prevent unnecessary updates and improve rendering speed. Here's an example:</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngIf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">showElement</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- element content --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In this example, the <code>div</code> element will only be added to the DOM if the <code>showElement</code> variable evaluates to <code>true</code>. Otherwise, it will be completely removed from the DOM.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimize-network-requests">Optimize Network Requests<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimize-network-requests" class="hash-link" aria-label="Direct link to Optimize Network Requests" title="Direct link to Optimize Network Requests" translate="no">​</a></h3>
<p>Reducing the number of network requests can greatly improve the performance of your Angular application. You can optimize network requests by combining multiple requests into a single request, caching responses, and using server-side rendering. Additionally, you can leverage Angular's HttpClient module to implement efficient API calls.</p>
<p>To make multiple requests in parallel and combine their results, you can use the <code>forkJoin</code> operator from the RxJS library. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> forkJoin </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> request1$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/api/data1'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> request2$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/api/data2'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">forkJoin</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">request1$</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> request2$</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">data1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data2</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// handle the combined results</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>forkJoin</code> operator to combine the results of <code>request1$</code> and <code>request2$</code> into a single observable. The <code>subscribe</code> method receives an array containing the data from each request.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="avoid-unnecessary-dependencies">Avoid Unnecessary Dependencies<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#avoid-unnecessary-dependencies" class="hash-link" aria-label="Direct link to Avoid Unnecessary Dependencies" title="Direct link to Avoid Unnecessary Dependencies" translate="no">​</a></h3>
<p>Minimizing unnecessary dependencies can help reduce the size of your application bundle and improve its loading speed. When importing modules or libraries, only include the parts that are actually used in your code. Additionally, consider using tree-shaking, a process that removes unused code during the build process.</p>
<p>For example, instead of importing the entire <code>lodash</code> library, you can import only the specific functions you need. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> sortBy</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> filter </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'lodash'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sortedData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sortBy</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'name'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> filteredData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">filter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">sortedData</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> age</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">25</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we only import the <code>sortBy</code> and <code>filter</code> functions from the <code>lodash</code> library. This reduces the size of the bundle and improves loading speed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-aot-compilation">Use AOT Compilation<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-aot-compilation" class="hash-link" aria-label="Direct link to Use AOT Compilation" title="Direct link to Use AOT Compilation" translate="no">​</a></h3>
<p>Ahead-of-Time (AOT) compilation is a technique that compiles your Angular application during the build process, producing optimized and smaller JavaScript code. This can result in faster loading times and improved performance compared to the default Just-in-Time (JIT) compilation.</p>
<p>To enable AOT compilation in your Angular app, you can use the <code>--aot</code> flag when running the build command with Angular CLI. For example:</p>
<div class="language-text codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-text codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">ng build --aot</span><br></span></code></pre></div></div>
<p>By enabling AOT compilation, Angular will pre-compile your templates and generate optimized JavaScript code, resulting in improved performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="improving-rendering-performance">Improving Rendering Performance<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#improving-rendering-performance" class="hash-link" aria-label="Direct link to Improving Rendering Performance" title="Direct link to Improving Rendering Performance" translate="no">​</a></h2>
<p>Efficient rendering is crucial for a smooth user experience. In this section, we will explore various techniques to optimize rendering performance in your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-trackby-function">Use TrackBy Function<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-trackby-function" class="hash-link" aria-label="Direct link to Use TrackBy Function" title="Direct link to Use TrackBy Function" translate="no">​</a></h3>
<p>When rendering lists or tables with <code>ngFor</code>, Angular needs a way to track changes and update the DOM efficiently. By default, Angular uses the index of the items as the tracking mechanism. However, this can lead to unnecessary re-rendering when the order of items changes.</p>
<p>To optimize rendering performance, you can provide a custom <code>trackBy</code> function that tracks items based on a unique identifier. This can prevent unnecessary re-rendering and improve performance. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-list'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./list.component.html'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ListComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  items</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Item</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">trackByFn</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">index</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> item</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">id</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we define a <code>trackByFn</code> function that returns the <code>id</code> property of each item as the tracking identifier. This ensures that Angular only re-renders items when their <code>id</code> changes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="virtual-scrolling">Virtual Scrolling<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#virtual-scrolling" class="hash-link" aria-label="Direct link to Virtual Scrolling" title="Direct link to Virtual Scrolling" translate="no">​</a></h3>
<p>Virtual scrolling is a technique that allows you to render only a portion of a large list or table, improving rendering performance. Instead of rendering all items upfront, virtual scrolling dynamically renders only the visible items as the user scrolls.</p>
<p>To implement virtual scrolling in your Angular app, you can use the <code>cdk-virtual-scroll-viewport</code> directive from the Angular Material CDK. Here's an example:</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">cdk-virtual-scroll-viewport</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">itemSize</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">50</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">container</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*cdkVirtualFor</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">let item of items</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- item content --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">cdk-virtual-scroll-viewport</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In this example, we wrap the list items with the <code>cdk-virtual-scroll-viewport</code> directive and use the <code>*cdkVirtualFor</code> directive to iterate over the <code>items</code> array. The <code>itemSize</code> property defines the height (or width) of each item in pixels.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="onpush-change-detection">OnPush Change Detection<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#onpush-change-detection" class="hash-link" aria-label="Direct link to OnPush Change Detection" title="Direct link to OnPush Change Detection" translate="no">​</a></h3>
<p>As mentioned earlier, using the 'OnPush' change detection strategy can greatly improve rendering performance. By default, Angular uses the 'Default' change detection strategy, which checks all components for changes on every change detection cycle. However, with the 'OnPush' strategy, Angular only checks for changes in components that have inputs bound to them or when an event is triggered.</p>
<p>To enable the 'OnPush' change detection strategy for a component, you can set the <code>changeDetection</code> property to <code>OnPush</code>. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-example'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./example.component.html'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  changeDetection</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ChangeDetectionStrategy</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">OnPush</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ExampleComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// component code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>By using the 'OnPush' change detection strategy, Angular only performs change detection for this component when its inputs change or when an event is triggered. This can significantly reduce unnecessary re-rendering and improve performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="avoid-excessive-template-binding">Avoid Excessive Template Binding<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#avoid-excessive-template-binding" class="hash-link" aria-label="Direct link to Avoid Excessive Template Binding" title="Direct link to Avoid Excessive Template Binding" translate="no">​</a></h3>
<p>Excessive template binding can impact rendering performance, especially when binding to complex expressions or functions. To optimize rendering, it's important to minimize the number of bindings and simplify their expressions.</p>
<p>For example, instead of binding to a complex function in the template, you can calculate the value in the component and bind to the result. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-example'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./example.component.html'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ExampleComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  data</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">any</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">getFormattedData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// complex formatting logic</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> formattedData</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">{{ getFormattedData() }}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In this example, we calculate the <code>formattedData</code> in the component and bind to it in the template. This avoids unnecessary calculations in the template and improves rendering performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-ngif-instead-of-ngshow">Use ngIf Instead of ngShow<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-ngif-instead-of-ngshow" class="hash-link" aria-label="Direct link to Use ngIf Instead of ngShow" title="Direct link to Use ngIf Instead of ngShow" translate="no">​</a></h3>
<p>Angular provides both <code>ngIf</code> and <code>ngShow</code> directives to conditionally show or hide elements in the DOM. However, <code>ngIf</code> is more efficient for performance optimization. When an element is hidden using <code>ngIf</code>, it is completely removed from the DOM, whereas <code>ngShow</code> only hides the element using CSS.</p>
<p>To optimize rendering performance, it's recommended to use <code>ngIf</code> instead of <code>ngShow</code> when possible. Here's an example:</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngIf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">showElement</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- element content --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In this example, the <code>div</code> element will be completely removed from the DOM if the <code>showElement</code> variable evaluates to <code>false</code>. This reduces unnecessary updates and improves rendering speed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimize-css">Optimize CSS<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimize-css" class="hash-link" aria-label="Direct link to Optimize CSS" title="Direct link to Optimize CSS" translate="no">​</a></h3>
<p>CSS can impact rendering performance, especially when using complex selectors or excessive styles. To optimize CSS performance, it's important to minimize the use of complex selectors, remove unused styles, and avoid excessive nesting.</p>
<p>Additionally, consider using CSS preprocessors like Sass or Less to optimize CSS code organization and reduce duplication. These preprocessors provide features like variables, mixins, and nesting, which can improve code maintainability and performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="avoid-unnecessary-filters">Avoid Unnecessary Filters<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#avoid-unnecessary-filters" class="hash-link" aria-label="Direct link to Avoid Unnecessary Filters" title="Direct link to Avoid Unnecessary Filters" translate="no">​</a></h3>
<p>Filtering large datasets in the template can impact rendering performance, especially when performed frequently. To optimize performance, it's recommended to filter the dataset in the component and bind to the filtered result.</p>
<p>For example, instead of filtering the dataset directly in the template using the <code>filter</code> pipe, you can filter the data in the component and bind to the filtered result. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-example'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./example.component.html'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ExampleComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  data</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">any</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  filteredData</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">any</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">filterData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">filteredData</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">filter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">item </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/* filter condition */</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngFor</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">let item of filteredData</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- item content --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In this example, we filter the <code>data</code> array in the component using the <code>filter</code> method and assign the filtered result to the <code>filteredData</code> property. This avoids repeated filtering in the template and improves rendering performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimizing-data-loading">Optimizing Data Loading<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimizing-data-loading" class="hash-link" aria-label="Direct link to Optimizing Data Loading" title="Direct link to Optimizing Data Loading" translate="no">​</a></h2>
<p>Efficient data loading is crucial for a responsive user experience. In this section, we will explore various techniques to optimize data loading in your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-pagination">Use Pagination<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-pagination" class="hash-link" aria-label="Direct link to Use Pagination" title="Direct link to Use Pagination" translate="no">​</a></h3>
<p>Loading large datasets at once can impact performance and user experience. To optimize data loading, consider implementing pagination, which allows you to load data in smaller chunks or pages.</p>
<p>By implementing pagination, you can load and display a portion of the dataset initially and fetch additional data as the user navigates to the next page. This can improve loading times and reduce the memory footprint of your application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implement-server-side-rendering">Implement Server-Side Rendering<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#implement-server-side-rendering" class="hash-link" aria-label="Direct link to Implement Server-Side Rendering" title="Direct link to Implement Server-Side Rendering" translate="no">​</a></h3>
<p>Server-Side Rendering (SSR) is a technique that renders your application on the server and sends the pre-rendered HTML to the client. This can greatly improve the initial loading time of your Angular application, especially for low-bandwidth or high-latency connections.</p>
<p>To implement SSR in your Angular app, you can use frameworks like Angular Universal. Angular Universal allows you to render your app on the server and serve the pre-rendered HTML to the client, providing faster initial rendering and improved performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimize-api-calls">Optimize API Calls<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimize-api-calls" class="hash-link" aria-label="Direct link to Optimize API Calls" title="Direct link to Optimize API Calls" translate="no">​</a></h3>
<p>API calls can impact data loading performance, especially when dealing with large datasets or slow network connections. To optimize API calls, consider the following techniques:</p>
<ul>
<li class="">Use appropriate HTTP methods (GET, POST, PUT, DELETE) for each operation.</li>
<li class="">Minimize the size of request and response payloads by sending only the necessary data.</li>
<li class="">Implement caching mechanisms to avoid unnecessary requests for the same data.</li>
<li class="">Use compression techniques like Gzip to reduce the size of request and response payloads.</li>
</ul>
<p>By optimizing API calls, you can reduce network latency and improve data loading performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="cache-data">Cache Data<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#cache-data" class="hash-link" aria-label="Direct link to Cache Data" title="Direct link to Cache Data" translate="no">​</a></h3>
<p>Caching data can greatly improve data loading performance, especially for frequently accessed or static data. By caching data on the client-side or server-side, you can avoid unnecessary API calls and reduce network latency.</p>
<p>To implement data caching in your Angular app, you can use techniques like in-memory caching, local storage, or session storage. Additionally, consider using techniques like HTTP caching headers or service workers for browser-level caching.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-web-workers">Use Web Workers<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-web-workers" class="hash-link" aria-label="Direct link to Use Web Workers" title="Direct link to Use Web Workers" translate="no">​</a></h3>
<p>Web Workers are a browser feature that allows you to run JavaScript code in the background, separate from the main UI thread. By offloading computationally intensive tasks or data processing to Web Workers, you can improve the responsiveness of your Angular application.</p>
<p>To use Web Workers in your Angular app, you can create a separate JavaScript file for the worker code and use the <code>Worker</code> constructor to create a new worker instance. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> worker </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Worker</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'worker.js'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">worker</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method-variable function-variable method function property-access" style="color:#d73a49">onmessage</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">event</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// handle worker message</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">worker</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">postMessage</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'message to worker'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we create a new worker instance from the 'worker.js' file and listen for messages using the <code>onmessage</code> event. We can also send messages to the worker using the <code>postMessage</code> method.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimize-data-structures">Optimize Data Structures<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimize-data-structures" class="hash-link" aria-label="Direct link to Optimize Data Structures" title="Direct link to Optimize Data Structures" translate="no">​</a></h3>
<p>Efficient data structures can greatly improve data loading and manipulation performance. By choosing the right data structures for your application's needs, you can reduce search and retrieval times, improve memory usage, and enhance overall performance.</p>
<p>When working with large datasets, consider using data structures like maps, sets, or trees for efficient indexing, searching, and retrieval. Additionally, consider using techniques like memoization or caching for frequently accessed or computed data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implement-data-preloading">Implement Data Preloading<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#implement-data-preloading" class="hash-link" aria-label="Direct link to Implement Data Preloading" title="Direct link to Implement Data Preloading" translate="no">​</a></h3>
<p>Data preloading is a technique that allows you to load and cache essential data in the background, before it is actually needed. By preloading data, you can improve the perceived performance of your Angular application and provide a seamless user experience.</p>
<p>To implement data preloading in your Angular app, you can use techniques like route preloading or service workers. Route preloading allows you to load and cache data for future routes in the background, while service workers enable you to cache data at the browser level.</p>
<p>By preloading essential data, you can reduce the perceived load time and improve the overall performance of your Angular application.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="improving-angular-application-architecture">Improving Angular Application Architecture<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#improving-angular-application-architecture" class="hash-link" aria-label="Direct link to Improving Angular Application Architecture" title="Direct link to Improving Angular Application Architecture" translate="no">​</a></h2>
<p>Efficient application architecture is crucial for maintainability, scalability, and performance. In this section, we will explore various techniques to improve the architecture of your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="component-decomposition">Component Decomposition<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#component-decomposition" class="hash-link" aria-label="Direct link to Component Decomposition" title="Direct link to Component Decomposition" translate="no">​</a></h3>
<p>Component decomposition is a technique that involves breaking down complex components into smaller, reusable components. By decomposing your components, you can improve code organization, maintainability, and performance.</p>
<p>To decompose components, identify logical sub-components within a larger component and extract them into separate components. This allows you to encapsulate functionality, improve reusability, and enhance performance by reducing the complexity of individual components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="smart-vs-dumb-components">Smart vs Dumb Components<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#smart-vs-dumb-components" class="hash-link" aria-label="Direct link to Smart vs Dumb Components" title="Direct link to Smart vs Dumb Components" translate="no">​</a></h3>
<p>Smart and dumb components, also known as container and presentational components, are architectural patterns that help separate concerns and improve performance.</p>
<p>Smart components, or container components, are responsible for managing the state and logic of the application. They interact with services, handle data loading, and orchestrate the behavior of the application.</p>
<p>Dumb components, or presentational components, are responsible for rendering the UI and receiving user input. They receive data from parent components via inputs and emit events to communicate with parent components.</p>
<p>By separating concerns and using smart and dumb components, you can improve code maintainability, reusability, and performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="state-management">State Management<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#state-management" class="hash-link" aria-label="Direct link to State Management" title="Direct link to State Management" translate="no">​</a></h3>
<p>Efficient state management is crucial for scalable and performant Angular applications. By managing application state effectively, you can minimize unnecessary data fetching, improve rendering performance, and enhance overall user experience.</p>
<p>To implement state management in your Angular app, you can use libraries like NgRx or Akita. These libraries provide a centralized store and a set of patterns and utilities to manage application state. By adopting a state management approach, you can decouple state logic from components, improve code organization, and optimize performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="code-splitting">Code Splitting<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#code-splitting" class="hash-link" aria-label="Direct link to Code Splitting" title="Direct link to Code Splitting" translate="no">​</a></h3>
<p>Code splitting is a technique that allows you to split your application code into smaller chunks, which are loaded on-demand. By loading only the necessary code for a specific route or feature, you can improve initial loading times and reduce the memory footprint of your application.</p>
<p>To enable code splitting in your Angular app, you can use techniques like lazy loading or dynamic imports. Lazy loading allows you to load modules and components only when they are required, whereas dynamic imports allow you to load code dynamically at runtime.</p>
<p>By splitting your code into smaller chunks and loading them on-demand, you can improve the performance and responsiveness of your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimize-angular-modules">Optimize Angular Modules<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#optimize-angular-modules" class="hash-link" aria-label="Direct link to Optimize Angular Modules" title="Direct link to Optimize Angular Modules" translate="no">​</a></h3>
<p>Angular modules provide a way to organize and modularize your application's code. By optimizing the structure and composition of your modules, you can improve code maintainability, reusability, and performance.</p>
<p>To optimize Angular modules, consider the following techniques:</p>
<ul>
<li class="">Split large modules into smaller, more focused modules.</li>
<li class="">Identify and remove unnecessary dependencies between modules.</li>
<li class="">Use lazy loading to load modules on-demand.</li>
<li class="">Avoid circular dependencies between modules.</li>
<li class="">Optimize module loading order to minimize initial loading times.</li>
</ul>
<p>By optimizing your Angular modules, you can improve code organization, performance, and scalability.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="use-lazy-loading-for-modules">Use Lazy Loading for Modules<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#use-lazy-loading-for-modules" class="hash-link" aria-label="Direct link to Use Lazy Loading for Modules" title="Direct link to Use Lazy Loading for Modules" translate="no">​</a></h3>
<p>Lazy loading is a technique that allows you to load modules and components only when they are required, instead of loading everything upfront. By using lazy loading, you can improve initial loading times, reduce the memory footprint of your application, and enhance overall performance.</p>
<p>To enable lazy loading in your Angular app, you can use the <code>loadChildren</code> property in the routing configuration. This property specifies the module to load lazily when the user navigates to a specific route. Here's an example:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> routes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Routes</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'lazy'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function-variable function" style="color:#d73a49">loadChildren</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">import</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'./lazy/lazy.module'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">m </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> m</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">LazyModule</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In this example, we define a route for the 'lazy' path and specify the module to load lazily using the <code>loadChildren</code> property. By doing so, the 'lazy' module will only be loaded when the user navigates to the corresponding route.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="avoid-circular-dependencies">Avoid Circular Dependencies<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#avoid-circular-dependencies" class="hash-link" aria-label="Direct link to Avoid Circular Dependencies" title="Direct link to Avoid Circular Dependencies" translate="no">​</a></h3>
<p>Circular dependencies occur when two or more modules or components depend on each other directly or indirectly. Circular dependencies can lead to performance issues, as they can cause infinite loops, unnecessary re-rendering, and increased memory usage.</p>
<p>To avoid circular dependencies in your Angular app, it's important to carefully analyze and manage module dependencies. Consider using services or shared modules to break circular dependencies and improve performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-and-profiling">Testing and Profiling<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#testing-and-profiling" class="hash-link" aria-label="Direct link to Testing and Profiling" title="Direct link to Testing and Profiling" translate="no">​</a></h2>
<p>Testing and profiling are crucial for maintaining and optimizing the performance of your Angular application. In this section, we will explore various techniques to test and profile your Angular app.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="unit-testing">Unit Testing<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#unit-testing" class="hash-link" aria-label="Direct link to Unit Testing" title="Direct link to Unit Testing" translate="no">​</a></h3>
<p>Unit testing is a technique that involves testing individual components, services, or functions in isolation. By writing unit tests, you can ensure that each part of your application works correctly and efficiently.</p>
<p>To write unit tests for your Angular app, you can use frameworks like Jasmine or Jest. These frameworks provide a set of utilities and assertions to write tests and verify the behavior of your code.</p>
<p>By writing comprehensive unit tests, you can catch bugs early, improve code quality, and optimize performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="end-to-end-testing">End-to-End Testing<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#end-to-end-testing" class="hash-link" aria-label="Direct link to End-to-End Testing" title="Direct link to End-to-End Testing" translate="no">​</a></h3>
<p>End-to-End (E2E) testing is a technique that tests the entire application flow, simulating real user interactions. By performing E2E tests, you can ensure that all components, services, and interactions work correctly together.</p>
<p>To perform E2E testing in your Angular app, you can use frameworks like Playwright or Cypress. These frameworks provide a set of APIs and utilities to simulate user interactions, navigate through your application, and verify the behavior of your code.</p>
<p>By performing regular E2E tests, you can catch integration issues, identify performance bottlenecks, and optimize your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="performance-profiling">Performance Profiling<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#performance-profiling" class="hash-link" aria-label="Direct link to Performance Profiling" title="Direct link to Performance Profiling" translate="no">​</a></h3>
<p>Performance profiling is the process of analyzing the runtime behavior and performance characteristics of your application. By profiling your Angular app, you can identify performance bottlenecks, memory leaks, and areas for optimization.</p>
<p>To profile your Angular app, you can use browser developer tools like Chrome DevTools or Firefox Developer Tools. These tools provide performance monitoring, memory profiling, and CPU profiling capabilities.</p>
<p>By analyzing the profiling data, you can identify areas of your application that need optimization, improve rendering performance, and enhance overall user experience.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="memory-leaks-detection">Memory Leaks Detection<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#memory-leaks-detection" class="hash-link" aria-label="Direct link to Memory Leaks Detection" title="Direct link to Memory Leaks Detection" translate="no">​</a></h3>
<p>Memory leaks can impact the performance and stability of your Angular application. By detecting and fixing memory leaks, you can improve memory usage, prevent crashes, and optimize performance.</p>
<p>To detect memory leaks in your Angular app, you can use browser developer tools or memory profiling tools. These tools allow you to monitor memory usage, analyze memory snapshots, and detect potential memory leaks.</p>
<p>By regularly checking for memory leaks and fixing them, you can ensure efficient memory management and optimize the performance of your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="benchmarking">Benchmarking<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#benchmarking" class="hash-link" aria-label="Direct link to Benchmarking" title="Direct link to Benchmarking" translate="no">​</a></h3>
<p>Benchmarking is the process of measuring the performance of your Angular application under specific conditions or scenarios. By benchmarking your app, you can identify performance bottlenecks, compare different implementations, and optimize critical code paths.</p>
<p>To benchmark your Angular app, you can use tools like Lighthouse, WebPageTest, or custom benchmarking scripts. These tools provide metrics and insights into various performance aspects like load times, rendering speed, and network usage.</p>
<p>By benchmarking your Angular app, you can set performance goals, measure progress, and continuously optimize for better performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/angular-performance-tips-boosting-app-speed#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored various techniques and strategies to optimize the performance of your Angular application. We covered topics such as using Angular CLI, optimizing rendering performance, improving data loading, enhancing Angular application architecture, and testing and profiling. By implementing these tips, you can significantly boost your app's speed, enhance user experience, and deliver a seamless web application. Remember to regularly test, profile, and optimize your Angular app to ensure its performance remains optimal as your application grows.</p>]]></content:encoded>
            <category>Angular</category>
            <category>Development</category>
            <category>dopebase.com</category>
            <category>Optimization</category>
            <category>Performance</category>
            <category>Speed</category>
        </item>
        <item>
            <title><![CDATA[Angular SEO: SSR, Prerendering, and Search Visibility]]></title>
            <link>https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results</link>
            <guid>https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results</guid>
            <pubDate>Sun, 28 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Make Angular pages crawlable through server rendering or prerendering, stable URLs, complete metadata, structured data, and fast HTML responses.]]></description>
            <content:encoded><![CDATA[<p>Make Angular pages crawlable through server rendering or prerendering, stable URLs, complete metadata, structured data, and fast HTML responses. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="angular seo techniques rank higher search results" src="https://dopebase.com/assets/images/01-cover18-e9609da2-84e091481879ed1ed71600acfa4ba77b.jpg" width="1100" height="618" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Make Angular pages crawlable through server rendering or prerendering, stable URLs, complete metadata, structured data, and fast HTML responses.</p>
<p>Build with standalone APIs, strict TypeScript, signals where local reactive state benefits from them, and explicit server-rendering or prerendering decisions. Keep Angular core and CLI aligned and stay on a supported release line.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Choose SSR, prerendering, or client rendering per route.</li>
<li class="">Validate canonical, robots, sitemap, and structured data output.</li>
<li class="">Ensure meaningful content exists before client hydration.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Measure production bundles and Core Web Vitals.</li>
<li class="">Use route-level loading and server rendering only where they improve the user journey.</li>
<li class="">Run accessibility, security, and regression tests in CI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://angular.dev/overview" target="_blank" rel="noopener noreferrer" class="">Angular documentation</a></li>
<li class=""><a href="https://angular.dev/guide/signals" target="_blank" rel="noopener noreferrer" class="">Angular signals</a></li>
<li class=""><a href="https://angular.dev/reference/releases" target="_blank" rel="noopener noreferrer" class="">Angular releases</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-seo">What is SEO?<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#what-is-seo" class="hash-link" aria-label="Direct link to What is SEO?" title="Direct link to What is SEO?" translate="no">​</a></h3>
<p>SEO stands for Search Engine Optimization. It refers to the process of optimizing a website or web application to improve its visibility and ranking in search engine results pages (SERPs). The goal of SEO is to drive organic (non-paid) traffic to your website by making it more discoverable by search engines like Google, Bing, and Yahoo.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-seo-in-angular-development">Importance of SEO in Angular Development<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#importance-of-seo-in-angular-development" class="hash-link" aria-label="Direct link to Importance of SEO in Angular Development" title="Direct link to Importance of SEO in Angular Development" translate="no">​</a></h3>
<p>Angular is a popular framework for building dynamic and responsive web applications. However, by default, Angular applications are rendered on the client-side, which can pose challenges for SEO. Search engine crawlers have difficulty understanding and indexing client-side rendered applications, leading to poor search engine rankings.</p>
<p>To overcome this challenge, it is essential to implement Angular SEO techniques that enable search engines to crawl and index your application effectively. By optimizing your Angular application for SEO, you can improve its visibility, increase organic traffic, and ultimately boost user engagement and conversions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="angular-seo-techniques">Angular SEO Techniques<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#angular-seo-techniques" class="hash-link" aria-label="Direct link to Angular SEO Techniques" title="Direct link to Angular SEO Techniques" translate="no">​</a></h3>
<p>To rank higher in search results, there are several techniques you can employ in your Angular applications. These techniques include:</p>
<ol>
<li class="">Server-side Rendering (SSR)</li>
<li class="">Pre-rendering</li>
<li class="">Dynamic Rendering</li>
<li class="">Optimizing Metadata</li>
<li class="">URL Structure</li>
<li class="">Mobile Optimization</li>
<li class="">Performance Optimization</li>
</ol>
<p>In the following sections, we will explore each of these techniques in detail and provide code examples for implementation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="server-side-rendering-ssr">Server-side Rendering (SSR)<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#server-side-rendering-ssr" class="hash-link" aria-label="Direct link to Server-side Rendering (SSR)" title="Direct link to Server-side Rendering (SSR)" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-ssr">What is SSR?<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#what-is-ssr" class="hash-link" aria-label="Direct link to What is SSR?" title="Direct link to What is SSR?" translate="no">​</a></h3>
<p>Server-side Rendering (SSR) is a technique that allows web applications to render on the server before sending them to the client. Unlike client-side rendering, where the rendering process happens in the browser, SSR generates fully rendered HTML on the server and sends it to the client, which makes it more accessible to search engine crawlers.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="benefits-of-ssr-in-angular-seo">Benefits of SSR in Angular SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#benefits-of-ssr-in-angular-seo" class="hash-link" aria-label="Direct link to Benefits of SSR in Angular SEO" title="Direct link to Benefits of SSR in Angular SEO" translate="no">​</a></h3>
<p>Implementing SSR in Angular applications offers several benefits for SEO:</p>
<ul>
<li class="">Improved search engine indexing: SSR enables search engine crawlers to easily understand and index your application's content, leading to better visibility in search results.</li>
<li class="">Enhanced performance: SSR reduces the time required for initial rendering, resulting in faster page loads and improved user experience.</li>
<li class="">Social media sharing: SSR ensures that social media platforms can properly scrape and display content from your application, improving the appearance of shared links.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-ssr-in-angular">Implementing SSR in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#implementing-ssr-in-angular" class="hash-link" aria-label="Direct link to Implementing SSR in Angular" title="Direct link to Implementing SSR in Angular" translate="no">​</a></h3>
<p>To implement SSR in Angular, you can use the Angular Universal library. Angular Universal allows you to pre-render your application on the server and serve it as static HTML to the client. Here's an example of how to set up SSR in an Angular application:</p>
<ol>
<li class="">Install Angular Universal:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">ng </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> @nguniversal/express-engine</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Generate a new SSR version of your application:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">ng generate universal my-app</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Build the SSR version of your application:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run build:ssr</span><br></span></code></pre></div></div>
<ol start="4">
<li class="">Start the server:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> run serve:ssr</span><br></span></code></pre></div></div>
<p>By following these steps, you can enable SSR in your Angular application and improve its SEO performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="pre-rendering">Pre-rendering<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#pre-rendering" class="hash-link" aria-label="Direct link to Pre-rendering" title="Direct link to Pre-rendering" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-pre-rendering">What is Pre-rendering?<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#what-is-pre-rendering" class="hash-link" aria-label="Direct link to What is Pre-rendering?" title="Direct link to What is Pre-rendering?" translate="no">​</a></h3>
<p>Pre-rendering is a technique that generates static HTML pages for specific routes of your Angular application at build time. These pre-rendered pages can be served to search engine crawlers, ensuring that your application's content is indexed and ranked correctly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="advantages-of-pre-rendering-in-angular-seo">Advantages of Pre-rendering in Angular SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#advantages-of-pre-rendering-in-angular-seo" class="hash-link" aria-label="Direct link to Advantages of Pre-rendering in Angular SEO" title="Direct link to Advantages of Pre-rendering in Angular SEO" translate="no">​</a></h3>
<p>Pre-rendering offers several advantages for Angular SEO:</p>
<ul>
<li class="">Improved search engine indexing: Pre-rendered pages can be easily crawled and indexed by search engine bots, leading to better visibility in search results.</li>
<li class="">Faster initial rendering: Pre-rendered pages can be delivered instantly to the client, reducing the time required for initial rendering and improving user experience.</li>
<li class="">Accessibility for non-JavaScript clients: Pre-rendered pages are accessible to users without JavaScript support, ensuring that your content is available to a wider audience.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="how-to-implement-pre-rendering-in-angular">How to Implement Pre-rendering in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#how-to-implement-pre-rendering-in-angular" class="hash-link" aria-label="Direct link to How to Implement Pre-rendering in Angular" title="Direct link to How to Implement Pre-rendering in Angular" translate="no">​</a></h3>
<p>To implement pre-rendering in your Angular application, you can use the Angular Universal library along with a pre-rendering tool such as Prerender.io or Rendertron. Here's an example of how to set up pre-rendering in an Angular application using Prerender.io:</p>
<ol>
<li class="">Install the Prerender.io middleware:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> prerender-node </span><span class="token parameter variable" style="color:#36acaa">--save</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Create a <code>server.js</code> file and configure the Prerender.io middleware:</li>
</ol>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> prerender </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'prerender-node'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">prerender</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'prerenderToken'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'YOUR_PRERENDER_IO_TOKEN'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">prerender</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'prerenderServiceUrl'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://service.prerender.io/'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">prerender</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'protocol'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">prerender</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Build your Angular application:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">ng build </span><span class="token parameter variable" style="color:#36acaa">--prod</span><br></span></code></pre></div></div>
<ol start="4">
<li class="">Start your server:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">node</span><span class="token plain"> server.js</span><br></span></code></pre></div></div>
<p>By following these steps and configuring the Prerender.io middleware, you can enable pre-rendering in your Angular application and improve its SEO performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="dynamic-rendering">Dynamic Rendering<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#dynamic-rendering" class="hash-link" aria-label="Direct link to Dynamic Rendering" title="Direct link to Dynamic Rendering" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-dynamic-rendering">What is Dynamic Rendering?<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#what-is-dynamic-rendering" class="hash-link" aria-label="Direct link to What is Dynamic Rendering?" title="Direct link to What is Dynamic Rendering?" translate="no">​</a></h3>
<p>Dynamic Rendering is a technique that serves different versions of your Angular application to search engine crawlers and regular users. By dynamically rendering a simplified version of your application for search engine crawlers, you can ensure that your content is properly indexed and ranked in search results.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="benefits-of-dynamic-rendering-in-angular-seo">Benefits of Dynamic Rendering in Angular SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#benefits-of-dynamic-rendering-in-angular-seo" class="hash-link" aria-label="Direct link to Benefits of Dynamic Rendering in Angular SEO" title="Direct link to Benefits of Dynamic Rendering in Angular SEO" translate="no">​</a></h3>
<p>Implementing Dynamic Rendering in your Angular application offers several benefits for SEO:</p>
<ul>
<li class="">Improved search engine indexing: Dynamic Rendering allows search engine crawlers to understand and index your application's content effectively.</li>
<li class="">Reduced rendering complexity: Serving a simplified version of your application to search engine crawlers reduces the rendering complexity and improves performance.</li>
<li class="">Better user experience: By rendering the full version of your application for regular users, you can provide a rich, interactive experience while still ensuring SEO visibility.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-dynamic-rendering-in-angular">Implementing Dynamic Rendering in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#implementing-dynamic-rendering-in-angular" class="hash-link" aria-label="Direct link to Implementing Dynamic Rendering in Angular" title="Direct link to Implementing Dynamic Rendering in Angular" translate="no">​</a></h3>
<p>To implement Dynamic Rendering in your Angular application, you can use the Angular Universal library along with a dynamic rendering service such as Puppeteer or Rendertron. Here's an example of how to set up Dynamic Rendering in an Angular application using Puppeteer:</p>
<ol>
<li class="">Install the Puppeteer library:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> puppeteer </span><span class="token parameter variable" style="color:#36acaa">--save</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Create a <code>server.js</code> file and configure Puppeteer:</li>
</ol>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> express </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'express'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> app </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">express</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> puppeteer </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'puppeteer'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'*'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">req</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> res</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://your-angular-app.com'</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> req</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">originalUrl</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> browser </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> puppeteer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">launch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> page </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">newPage</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> page</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">goto</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">waitUntil</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'networkidle2'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> html </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> page</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">content</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">close</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  res</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">send</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">html</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">listen</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Server is running on port 3000'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Build your Angular application:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">ng build </span><span class="token parameter variable" style="color:#36acaa">--prod</span><br></span></code></pre></div></div>
<ol start="4">
<li class="">Start your server:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">node</span><span class="token plain"> server.js</span><br></span></code></pre></div></div>
<p>By following these steps and configuring Puppeteer, you can enable Dynamic Rendering in your Angular application and improve its SEO performance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimizing-metadata">Optimizing Metadata<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#optimizing-metadata" class="hash-link" aria-label="Direct link to Optimizing Metadata" title="Direct link to Optimizing Metadata" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-metadata-in-seo">Importance of Metadata in SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#importance-of-metadata-in-seo" class="hash-link" aria-label="Direct link to Importance of Metadata in SEO" title="Direct link to Importance of Metadata in SEO" translate="no">​</a></h3>
<p>Metadata refers to the HTML tags that provide additional information about your web pages to search engines. Optimizing metadata is crucial for SEO, as it helps search engines understand the context and relevance of your pages, resulting in better rankings. In Angular applications, optimizing metadata is essential to ensure that search engines can properly crawl and index your content.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimizing-title-tags">Optimizing Title Tags<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#optimizing-title-tags" class="hash-link" aria-label="Direct link to Optimizing Title Tags" title="Direct link to Optimizing Title Tags" translate="no">​</a></h3>
<p>The title tag is one of the most important metadata elements for SEO. It appears as the clickable headline in search engine results and should accurately describe the content of your page. In Angular, you can optimize title tags by dynamically updating them based on the current route. Here's an example of how to implement dynamic title tags in an Angular application:</p>
<ol>
<li class="">Import the <code>Title</code> service from <code>@angular/platform-browser</code>:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Title</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/platform-browser'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Inject the <code>Title</code> service into your component:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> titleService</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Title</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Update the title tag based on the current route:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">titleService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setTitle</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'My Angular App | Home'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>By using the <code>Title</code> service, you can dynamically update the title tag of your Angular application based on the current route, improving its SEO performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="optimizing-meta-descriptions">Optimizing Meta Descriptions<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#optimizing-meta-descriptions" class="hash-link" aria-label="Direct link to Optimizing Meta Descriptions" title="Direct link to Optimizing Meta Descriptions" translate="no">​</a></h3>
<p>The meta description is a brief summary of your web page's content. It appears below the title tag in search engine results and should provide a concise overview of what users can expect from your page. In Angular, you can optimize meta descriptions by dynamically updating them based on the current route. Here's an example of how to implement dynamic meta descriptions in an Angular application:</p>
<ol>
<li class="">Import the <code>Meta</code> service from <code>@angular/platform-browser</code>:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Meta</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/platform-browser'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Inject the <code>Meta</code> service into your component:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> metaService</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Meta</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Update the meta description tag based on the current route:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">metaService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">updateTag</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'description'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Welcome to my Angular app!'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>By using the <code>Meta</code> service, you can dynamically update the meta description tag of your Angular application based on the current route, improving its SEO performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-open-graph-tags">Using Open Graph Tags<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#using-open-graph-tags" class="hash-link" aria-label="Direct link to Using Open Graph Tags" title="Direct link to Using Open Graph Tags" translate="no">​</a></h3>
<p>Open Graph tags are a set of meta tags that provide structured information about your web pages to social media platforms. Optimizing Open Graph tags is essential for improving the appearance of shared links on platforms like Facebook, Twitter, and LinkedIn. In Angular, you can optimize Open Graph tags by dynamically updating them based on the current route. Here's an example of how to implement dynamic Open Graph tags in an Angular application:</p>
<ol>
<li class="">Import the <code>Meta</code> service from <code>@angular/platform-browser</code>:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Meta</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/platform-browser'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Inject the <code>Meta</code> service into your component:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> metaService</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Meta</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Update the Open Graph tags based on the current route:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">metaService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">updateTag</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> property</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'og:title'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'My Angular App'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">metaService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">updateTag</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> property</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'og:description'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Welcome to my Angular app!'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">metaService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">updateTag</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> property</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'og:image'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> content</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://example.com/image.jpg'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>By using the <code>Meta</code> service, you can dynamically update the Open Graph tags of your Angular application based on the current route, improving its appearance on social media platforms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-metadata-optimization-in-angular">Implementing Metadata Optimization in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#implementing-metadata-optimization-in-angular" class="hash-link" aria-label="Direct link to Implementing Metadata Optimization in Angular" title="Direct link to Implementing Metadata Optimization in Angular" translate="no">​</a></h3>
<p>To optimize metadata in your Angular application, you can use the <code>Title</code> and <code>Meta</code> services provided by the <code>@angular/platform-browser</code> package. By dynamically updating title tags, meta descriptions, and Open Graph tags based on the current route, you can ensure that search engines and social media platforms properly index and display your content.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="url-structure">URL Structure<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#url-structure" class="hash-link" aria-label="Direct link to URL Structure" title="Direct link to URL Structure" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-url-structure-in-seo">Importance of URL Structure in SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#importance-of-url-structure-in-seo" class="hash-link" aria-label="Direct link to Importance of URL Structure in SEO" title="Direct link to Importance of URL Structure in SEO" translate="no">​</a></h3>
<p>The URL structure of your web pages plays a significant role in SEO. Well-structured URLs that include relevant keywords and are user-friendly can improve search engine rankings and user experience. In Angular, you can optimize the URL structure by configuring routing and using Angular's built-in URL handling mechanisms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-keywords-in-urls">Using Keywords in URLs<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#using-keywords-in-urls" class="hash-link" aria-label="Direct link to Using Keywords in URLs" title="Direct link to Using Keywords in URLs" translate="no">​</a></h3>
<p>Including relevant keywords in your URLs can improve their visibility in search engine results. In Angular, you can configure routing to include keywords in your URLs. Here's an example of how to define routes with keywords in an Angular application:</p>
<ol>
<li class="">Import the <code>RouterModule</code> and <code>Routes</code> from <code>@angular/router</code>:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">RouterModule</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Routes</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/router'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Define your routes with keywords:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> routes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Routes</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'products'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductsComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'products/:id'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductDetailComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Configure routing in your Angular module:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">NgModule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  imports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">forRoot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">routes</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  exports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AppRoutingModule</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>By including relevant keywords in your URLs, you can improve their visibility in search engine results and attract more organic traffic to your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-user-friendly-urls">Creating User-friendly URLs<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#creating-user-friendly-urls" class="hash-link" aria-label="Direct link to Creating User-friendly URLs" title="Direct link to Creating User-friendly URLs" translate="no">​</a></h3>
<p>User-friendly URLs are easy to read and understand, making it easier for users to navigate your website. In Angular, you can create user-friendly URLs by configuring routing and using Angular's built-in URL handling mechanisms. Here's an example of how to create user-friendly URLs in an Angular application:</p>
<ol>
<li class="">Import the <code>RouterModule</code> and <code>Routes</code> from <code>@angular/router</code>:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">RouterModule</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Routes</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/router'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Define your routes with user-friendly URLs:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> routes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Routes</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'products'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductsComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'products/:id'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> component</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductDetailComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Configure routing in your Angular module:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">NgModule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  imports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">forRoot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">routes</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  exports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AppRoutingModule</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>By creating user-friendly URLs, you can improve the user experience of your Angular application and make it easier for users to navigate and share your content.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-url-structure-optimization-in-angular">Implementing URL Structure Optimization in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#implementing-url-structure-optimization-in-angular" class="hash-link" aria-label="Direct link to Implementing URL Structure Optimization in Angular" title="Direct link to Implementing URL Structure Optimization in Angular" translate="no">​</a></h3>
<p>To optimize the URL structure in your Angular application, you can use the <code>RouterModule</code> and <code>Routes</code> provided by the <code>@angular/router</code> package. By including relevant keywords and creating user-friendly URLs, you can improve the visibility of your web pages in search engine results and enhance the user experience.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="mobile-optimization">Mobile Optimization<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#mobile-optimization" class="hash-link" aria-label="Direct link to Mobile Optimization" title="Direct link to Mobile Optimization" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-mobile-optimization-is-important-for-seo">Why Mobile Optimization is Important for SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#why-mobile-optimization-is-important-for-seo" class="hash-link" aria-label="Direct link to Why Mobile Optimization is Important for SEO" title="Direct link to Why Mobile Optimization is Important for SEO" translate="no">​</a></h3>
<p>Mobile optimization is crucial for SEO as mobile devices account for a significant portion of web traffic. Search engines prioritize mobile-friendly websites in their rankings, and mobile users expect fast loading times and responsive design. By optimizing your Angular application for mobile devices, you can improve its visibility, user experience, and search engine rankings.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="responsive-design">Responsive Design<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#responsive-design" class="hash-link" aria-label="Direct link to Responsive Design" title="Direct link to Responsive Design" translate="no">​</a></h3>
<p>Responsive design is a mobile optimization technique that ensures your website adapts to different screen sizes and devices. In Angular, you can implement responsive design by using CSS media queries and Angular's built-in responsive layout features. Here's an example of how to implement responsive design in an Angular application:</p>
<ol>
<li class="">Define your responsive CSS styles using media queries:</li>
</ol>
<div class="language-css codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-css codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token atrule rule" style="color:#00a4db">@media</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule punctuation" style="color:#393A34">(</span><span class="token atrule property" style="color:#36acaa">max-width</span><span class="token atrule punctuation" style="color:#393A34">:</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule number" style="color:#36acaa">768</span><span class="token atrule unit" style="color:#00a4db">px</span><span class="token atrule punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">/* Styles for mobile devices */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token atrule rule" style="color:#00a4db">@media</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule punctuation" style="color:#393A34">(</span><span class="token atrule property" style="color:#36acaa">min-width</span><span class="token atrule punctuation" style="color:#393A34">:</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule number" style="color:#36acaa">769</span><span class="token atrule unit" style="color:#00a4db">px</span><span class="token atrule punctuation" style="color:#393A34">)</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule keyword" style="color:#00009f">and</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule punctuation" style="color:#393A34">(</span><span class="token atrule property" style="color:#36acaa">max-width</span><span class="token atrule punctuation" style="color:#393A34">:</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule number" style="color:#36acaa">1024</span><span class="token atrule unit" style="color:#00a4db">px</span><span class="token atrule punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">/* Styles for tablets */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token atrule rule" style="color:#00a4db">@media</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule punctuation" style="color:#393A34">(</span><span class="token atrule property" style="color:#36acaa">min-width</span><span class="token atrule punctuation" style="color:#393A34">:</span><span class="token atrule" style="color:#00a4db"> </span><span class="token atrule number" style="color:#36acaa">1025</span><span class="token atrule unit" style="color:#00a4db">px</span><span class="token atrule punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">/* Styles for desktops */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Use Angular's <code>@HostBinding</code> decorator to apply responsive CSS classes:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">HostBinding</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-my-component'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./my-component.component.html'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  styleUrls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'./my-component.component.css'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">MyComponentComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">HostBinding</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'class.mobile'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> isMobile </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">innerWidth</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">768</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">HostBinding</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'class.tablet'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> isTablet </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">innerWidth</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">768</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">innerWidth</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1024</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">HostBinding</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'class.desktop'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> isDesktop </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token dom variable" style="color:#36acaa">window</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">innerWidth</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1024</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>By using responsive design techniques, you can optimize your Angular application for mobile devices and provide a seamless user experience across different screen sizes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="mobile-friendly-testing">Mobile-friendly Testing<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#mobile-friendly-testing" class="hash-link" aria-label="Direct link to Mobile-friendly Testing" title="Direct link to Mobile-friendly Testing" translate="no">​</a></h3>
<p>Mobile-friendly testing is an essential step in mobile optimization. It allows you to identify and fix issues that may affect the user experience on mobile devices. Google's Mobile-Friendly Test is a useful tool for testing the mobile-friendliness of your Angular application. Here's how to use it:</p>
<ol>
<li class="">Go to the <a href="https://search.google.com/test/mobile-friendly" target="_blank" rel="noopener noreferrer" class="">Google Mobile-Friendly Test</a> page.</li>
<li class="">Enter the URL of your Angular application.</li>
<li class="">Click on the "Test URL" button.</li>
</ol>
<p>The Mobile-Friendly Test will analyze your Angular application and provide a report on its mobile-friendliness, highlighting any issues that need to be addressed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="accelerated-mobile-pages-amp">Accelerated Mobile Pages (AMP)<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#accelerated-mobile-pages-amp" class="hash-link" aria-label="Direct link to Accelerated Mobile Pages (AMP)" title="Direct link to Accelerated Mobile Pages (AMP)" translate="no">​</a></h3>
<p>Accelerated Mobile Pages (AMP) is an open-source framework that allows you to create fast-loading web pages for mobile devices. AMP pages are optimized for performance and can improve search engine rankings. In Angular, you can implement AMP by following the official AMP specifications and guidelines. Here's an example of how to create an AMP page in an Angular application:</p>
<ol>
<li class="">Install the <code>@ampproject/amphtml</code> package:</li>
</ol>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> @ampproject/amphtml </span><span class="token parameter variable" style="color:#36acaa">--save</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Create an AMP version of your Angular component:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-amp-component'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  templateUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./amp-component.component.html'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  styleUrls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'./amp-component.component.css'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AmpComponentComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Create an AMP-specific template for your component:</li>
</ol>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">amp-img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">image.jpg</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">width</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">300</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">height</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">200</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">alt</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">An AMP image</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">amp-img</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">This is an AMP page.</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>By creating AMP pages for your Angular application, you can improve its performance on mobile devices and potentially rank higher in search engine results.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-mobile-optimization-in-angular">Implementing Mobile Optimization in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#implementing-mobile-optimization-in-angular" class="hash-link" aria-label="Direct link to Implementing Mobile Optimization in Angular" title="Direct link to Implementing Mobile Optimization in Angular" translate="no">​</a></h3>
<p>To optimize your Angular application for mobile devices, you can implement responsive design, perform mobile-friendly testing, and create Accelerated Mobile Pages (AMP). By ensuring that your application is mobile-friendly, you can improve its visibility, user experience, and search engine rankings.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="performance-optimization">Performance Optimization<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#performance-optimization" class="hash-link" aria-label="Direct link to Performance Optimization" title="Direct link to Performance Optimization" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importance-of-performance-optimization-in-seo">Importance of Performance Optimization in SEO<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#importance-of-performance-optimization-in-seo" class="hash-link" aria-label="Direct link to Importance of Performance Optimization in SEO" title="Direct link to Importance of Performance Optimization in SEO" translate="no">​</a></h3>
<p>Performance optimization is crucial for SEO as search engines prioritize fast-loading websites in their rankings. Slow page load times can negatively impact user experience, increase bounce rates, and result in lower search engine rankings. By optimizing the performance of your Angular application, you can improve its visibility, user engagement, and search engine rankings.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="reducing-page-load-time">Reducing Page Load Time<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#reducing-page-load-time" class="hash-link" aria-label="Direct link to Reducing Page Load Time" title="Direct link to Reducing Page Load Time" translate="no">​</a></h3>
<p>Reducing page load time is a fundamental performance optimization technique. In Angular, you can reduce page load times by implementing techniques such as code splitting, lazy loading, and optimizing asset sizes. Here are some examples of how to reduce page load time in an Angular application:</p>
<ol>
<li class="">Code Splitting:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> loadRemoteModule </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular-architects/module-federation'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-home'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;h1&gt;Welcome to my Angular app!&lt;/h1&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;button (click)="loadFeature()"&gt;Load Feature&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;div *ngIf="showFeature"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;ng-container *loadRemoteModule="'http://remote-host/feature.js'; exportName: 'FeatureModule'"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">        &lt;ng-container *loadRemoteComponent="'FeatureComponent'"&gt;&lt;/ng-container&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;/ng-container&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/div&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">HomeComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  showFeature </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">loadFeature</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">showFeature</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">loadRemoteModule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      remoteEntry</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'http://remote-host/remoteEntry.js'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      remoteName</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'feature'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      exposedModule</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'FeatureModule'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Lazy Loading:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NgModule</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">RouterModule</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Routes</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/router'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> routes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Routes</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'lazy'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">loadChildren</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">import</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'./lazy/lazy.module'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">m </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> m</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">LazyModule</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">NgModule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  imports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">forRoot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">routes</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  exports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AppRoutingModule</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<ol start="3">
<li class="">Optimizing Asset Sizes:</li>
</ol>
<ul>
<li class="">Minify CSS and JavaScript files.</li>
<li class="">Compress images and other media assets.</li>
<li class="">Use lazy loading for large images and videos.</li>
</ul>
<p>By implementing these techniques, you can significantly reduce the page load time of your Angular application and improve its SEO performance.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="caching-strategies">Caching Strategies<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#caching-strategies" class="hash-link" aria-label="Direct link to Caching Strategies" title="Direct link to Caching Strategies" translate="no">​</a></h3>
<p>Caching is another important performance optimization technique. By leveraging browser caching, you can reduce server load and improve page load times for returning users. In Angular, you can implement caching strategies by configuring caching headers and using Angular's built-in HTTP caching mechanisms. Here's an example of how to implement caching in an Angular application:</p>
<ol>
<li class="">Configure caching headers on the server:</li>
</ol>
<div class="language-javascript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-javascript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">app</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">use</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">express</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">static</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'public'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">maxAge</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'1d'</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Use Angular's <code>HttpClient</code> module with caching options:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HttpClient</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/common/http'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-my-component'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">{{ data$ | async }}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">MyComponentComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  data$</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token builtin">any</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> http</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">HttpClient</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">ngOnInit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">data$</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'https://api.example.com/data'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> cache</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>By implementing caching strategies, you can reduce server load, improve page load times, and enhance the overall performance of your Angular application.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="lazy-loading">Lazy Loading<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#lazy-loading" class="hash-link" aria-label="Direct link to Lazy Loading" title="Direct link to Lazy Loading" translate="no">​</a></h3>
<p>Lazy loading is a technique that allows you to load only the necessary resources when they are needed, reducing the initial page load time. In Angular, you can implement lazy loading by using Angular's built-in <code>RouterModule</code> and <code>loadChildren</code> property. Here's an example of how to implement lazy loading in an Angular application:</p>
<ol>
<li class="">Define your lazy-loaded routes:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> routes</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Routes</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> path</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'lazy'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">loadChildren</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">import</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'./lazy/lazy.module'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">m </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> m</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access maybe-class-name">LazyModule</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Configure routing in your Angular module:</li>
</ol>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">NgModule</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  imports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">forRoot</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">routes</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  exports</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">RouterModule</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AppRoutingModule</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>By implementing lazy loading, you can improve the initial page load time of your Angular application and provide a better user experience.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="implementing-performance-optimization-in-angular">Implementing Performance Optimization in Angular<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#implementing-performance-optimization-in-angular" class="hash-link" aria-label="Direct link to Implementing Performance Optimization in Angular" title="Direct link to Implementing Performance Optimization in Angular" translate="no">​</a></h3>
<p>To optimize the performance of your Angular application, you can reduce page load times, implement caching strategies, leverage lazy loading, and apply other performance optimization techniques. By improving the performance of your application, you can enhance its visibility, user experience, and search engine rankings.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/angular-seo-techniques-rank-higher-search-results#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored various Angular SEO techniques that can help you rank higher in search results. We discussed the importance of SEO in Angular development and explained how to implement server-side rendering (SSR), pre-rendering, dynamic rendering, optimizing metadata, URL structure optimization, mobile optimization, and performance optimization in Angular applications. By following these techniques and best practices, you can improve the visibility, user experience, and search engine rankings of your Angular applications.</p>]]></content:encoded>
            <category>Angular</category>
            <category>Development</category>
            <category>dopebase.com</category>
            <category>Rank Higher</category>
            <category>Search Results</category>
            <category>SEO</category>
        </item>
        <item>
            <title><![CDATA[Angular Forms: A Complete Guide]]></title>
            <link>https://dopebase.com/blog/angular-forms-complete-guide</link>
            <guid>https://dopebase.com/blog/angular-forms-complete-guide</guid>
            <pubDate>Sat, 27 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Design Angular forms with typed reactive models, reusable validation, accessible errors, predictable submission state, and server-side validation.]]></description>
            <content:encoded><![CDATA[<p>Design Angular forms with typed reactive models, reusable validation, accessible errors, predictable submission state, and server-side validation. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="angular forms complete guide" src="https://dopebase.com/assets/images/01-cover9-624faeb4-ee661fd0cd06e7b81222922099bc369c.jpg" width="1100" height="619" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/angular-forms-complete-guide#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Design Angular forms with typed reactive models, reusable validation, accessible errors, predictable submission state, and server-side validation.</p>
<p>Build with standalone APIs, strict TypeScript, signals where local reactive state benefits from them, and explicit server-rendering or prerendering decisions. Keep Angular core and CLI aligned and stay on a supported release line.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/angular-forms-complete-guide#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Prefer typed reactive forms for complex workflows.</li>
<li class="">Keep validation messages connected to controls.</li>
<li class="">Prevent duplicate submissions and preserve recoverable input.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/angular-forms-complete-guide#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Measure production bundles and Core Web Vitals.</li>
<li class="">Use route-level loading and server rendering only where they improve the user journey.</li>
<li class="">Run accessibility, security, and regression tests in CI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/angular-forms-complete-guide#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://angular.dev/overview" target="_blank" rel="noopener noreferrer" class="">Angular documentation</a></li>
<li class=""><a href="https://angular.dev/guide/signals" target="_blank" rel="noopener noreferrer" class="">Angular signals</a></li>
<li class=""><a href="https://angular.dev/reference/releases" target="_blank" rel="noopener noreferrer" class="">Angular releases</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/angular-forms-complete-guide#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-are-angular-forms">What are Angular Forms?<a href="https://dopebase.com/blog/angular-forms-complete-guide#what-are-angular-forms" class="hash-link" aria-label="Direct link to What are Angular Forms?" title="Direct link to What are Angular Forms?" translate="no">​</a></h3>
<p>Angular Forms are a vital part of building interactive web applications. They allow users to input and submit data, providing a way for developers to capture user information. Angular provides two approaches for creating forms: Template-driven Forms and Reactive Forms.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-are-angular-forms-important">Why are Angular Forms important?<a href="https://dopebase.com/blog/angular-forms-complete-guide#why-are-angular-forms-important" class="hash-link" aria-label="Direct link to Why are Angular Forms important?" title="Direct link to Why are Angular Forms important?" translate="no">​</a></h3>
<p>Angular Forms play a crucial role in capturing user input and validating it before submitting it to the server. They enable developers to create dynamic and interactive user interfaces, enhancing the overall user experience. Whether it's a simple contact form or a complex data entry form, Angular Forms provide a structured and efficient way to handle user input.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="overview-of-angular-forms">Overview of Angular Forms<a href="https://dopebase.com/blog/angular-forms-complete-guide#overview-of-angular-forms" class="hash-link" aria-label="Direct link to Overview of Angular Forms" title="Direct link to Overview of Angular Forms" translate="no">​</a></h3>
<p>Angular Forms can be created using either the Template-driven approach or the Reactive approach. Template-driven Forms rely on directives in the template to create and manipulate form controls. Reactive Forms, on the other hand, use a more programmatic approach, creating form controls and handling form events in the component class.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="template-driven-forms">Template-driven Forms<a href="https://dopebase.com/blog/angular-forms-complete-guide#template-driven-forms" class="hash-link" aria-label="Direct link to Template-driven Forms" title="Direct link to Template-driven Forms" translate="no">​</a></h2>
<p>Template-driven Forms are created using directives in the template. They are ideal for simpler forms with less complex validation requirements. Let's dive into creating a Template-driven Form.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-a-template-driven-form">Creating a Template-driven Form<a href="https://dopebase.com/blog/angular-forms-complete-guide#creating-a-template-driven-form" class="hash-link" aria-label="Direct link to Creating a Template-driven Form" title="Direct link to Creating a Template-driven Form" translate="no">​</a></h3>
<p>To create a Template-driven Form, we need to add the <code>ngForm</code> directive to the form element and use the <code>ngModel</code> directive to bind form controls to properties in our component.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">form</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">#myForm</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">ngForm</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">label</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">for</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Name:</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">label</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">[(ngModel)]</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">user.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">required</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">submit</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Submit</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we bind the <code>name</code> input field to the <code>user.name</code> property using the <code>ngModel</code> directive. The <code>required</code> attribute ensures that the field is not empty. The <code>ngForm</code> directive creates a form instance that we can reference using the <code>#myForm</code> template reference variable.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-controls">Form Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#form-controls" class="hash-link" aria-label="Direct link to Form Controls" title="Direct link to Form Controls" translate="no">​</a></h3>
<p>Form controls represent the input fields in our form. We can access these controls using the <code>ngModel</code> directive and interact with their properties and methods in our component. For example, we can check if a control is valid or dirty, retrieve its value, or set its value programmatically.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NgForm</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token spread operator" style="color:#393A34">...</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">MyFormComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  user </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">''</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onSubmit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">form</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">NgForm</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">form</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">valid</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">user</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we import the <code>NgForm</code> class from the <code>@angular/forms</code> package. We bind the form to the <code>user</code> object and define an <code>onSubmit</code> method that is called when the form is submitted. We can access the form controls using the <code>form</code> parameter and check if the form is valid before performing any actions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="validation">Validation<a href="https://dopebase.com/blog/angular-forms-complete-guide#validation" class="hash-link" aria-label="Direct link to Validation" title="Direct link to Validation" translate="no">​</a></h3>
<p>Validation is an essential aspect of forms. Angular provides built-in validators and allows us to create custom validators to meet our specific validation requirements. We can apply validation rules to form controls using directives or programmatically in our component.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">[(ngModel)]</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">user.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">required</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">minlength</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngIf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">myForm.controls.name.invalid &amp;&amp; myForm.controls.name.touched</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngIf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">myForm.controls.name.errors.required</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Name is required.</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngIf</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">myForm.controls.name.errors.minlength</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Name must be at least 3 characters long.</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we apply the <code>required</code> and <code>minlength</code> validators to the <code>name</code> input field. We use the <code>invalid</code> and <code>touched</code> properties of the <code>name</code> control to display error messages conditionally.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-form-submission">Handling Form Submission<a href="https://dopebase.com/blog/angular-forms-complete-guide#handling-form-submission" class="hash-link" aria-label="Direct link to Handling Form Submission" title="Direct link to Handling Form Submission" translate="no">​</a></h3>
<p>To handle form submission, we can bind the <code>submit</code> event of the form to a method in our component. Inside the method, we can perform any necessary actions, such as sending the form data to the server or resetting the form.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">form</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">(submit)</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">onSubmit(myForm)</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Form controls here --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above code snippet, we bind the <code>submit</code> event of the form to the <code>onSubmit</code> method. We pass the <code>myForm</code> form instance to the method, allowing us to access the form controls and perform any necessary actions.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="reactive-forms">Reactive Forms<a href="https://dopebase.com/blog/angular-forms-complete-guide#reactive-forms" class="hash-link" aria-label="Direct link to Reactive Forms" title="Direct link to Reactive Forms" translate="no">​</a></h2>
<p>Reactive Forms provide a more programmatic approach to form creation and manipulation. They are suitable for complex forms with dynamic validation requirements. Let's explore how to create a Reactive Form.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-a-reactive-form">Creating a Reactive Form<a href="https://dopebase.com/blog/angular-forms-complete-guide#creating-a-reactive-form" class="hash-link" aria-label="Direct link to Creating a Reactive Form" title="Direct link to Creating a Reactive Form" translate="no">​</a></h3>
<p>To create a Reactive Form, we need to import the necessary classes from the <code>@angular/forms</code> package and create an instance of the <code>FormGroup</code> class in our component.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormBuilder</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormGroup</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Validators</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token spread operator" style="color:#393A34">...</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">MyFormComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  myForm</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormGroup</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> formBuilder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormBuilder</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">ngOnInit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onSubmit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">valid</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we import the <code>FormBuilder</code>, <code>FormGroup</code>, and <code>Validators</code> classes from the <code>@angular/forms</code> package. In the <code>ngOnInit</code> lifecycle hook, we create an instance of <code>FormGroup</code> using the <code>formBuilder.group()</code> method. We define the <code>name</code> control with an initial value of <code>''</code> and apply the <code>required</code> validator.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-controls-1">Form Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#form-controls-1" class="hash-link" aria-label="Direct link to Form Controls" title="Direct link to Form Controls" translate="no">​</a></h3>
<p>Similar to Template-driven Forms, Reactive Forms also use form controls to represent input fields. We can access and manipulate these controls using the <code>FormGroup</code> instance in our component.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formControlName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>formControlName</code> directive to bind the <code>name</code> input field to the corresponding control in the <code>FormGroup</code>. The value of the input field is automatically synchronized with the control's value.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="validation-1">Validation<a href="https://dopebase.com/blog/angular-forms-complete-guide#validation-1" class="hash-link" aria-label="Direct link to Validation" title="Direct link to Validation" translate="no">​</a></h3>
<p>Reactive Forms provide various built-in validators that we can apply to form controls using the <code>Validators</code> class. We can also create custom validators to meet our specific validation requirements.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">minLength</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code snippet, we apply the <code>required</code> and <code>minLength</code> validators to the <code>name</code> control. We pass an array of validators as the second argument to the <code>formBuilder.group()</code> method.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-form-submission-1">Handling Form Submission<a href="https://dopebase.com/blog/angular-forms-complete-guide#handling-form-submission-1" class="hash-link" aria-label="Direct link to Handling Form Submission" title="Direct link to Handling Form Submission" translate="no">​</a></h3>
<p>To handle form submission in Reactive Forms, we can call a method in our component directly when the form is submitted.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">form</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">[formGroup]</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">myForm</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">(submit)</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">onSubmit()</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Form controls here --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above code snippet, we bind the <code>formGroup</code> property of the form to the <code>myForm</code> instance in our component. We call the <code>onSubmit</code> method directly when the form is submitted.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-validation">Form Validation<a href="https://dopebase.com/blog/angular-forms-complete-guide#form-validation" class="hash-link" aria-label="Direct link to Form Validation" title="Direct link to Form Validation" translate="no">​</a></h2>
<p>Angular provides a range of options for form validation, including built-in validators, custom validators, and cross-field validation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="built-in-validators">Built-in Validators<a href="https://dopebase.com/blog/angular-forms-complete-guide#built-in-validators" class="hash-link" aria-label="Direct link to Built-in Validators" title="Direct link to Built-in Validators" translate="no">​</a></h3>
<p>Angular offers a set of built-in validators that we can use to validate form controls. These validators include required, minLength, maxLength, pattern, and more. We can apply these validators to form controls using the <code>Validators</code> class.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">email</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">minLength</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">8</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we apply the <code>required</code> validator to the <code>name</code> control, the <code>required</code> and <code>email</code> validators to the <code>email</code> control, and the <code>required</code> and <code>minLength</code> validators to the <code>password</code> control.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="custom-validators">Custom Validators<a href="https://dopebase.com/blog/angular-forms-complete-guide#custom-validators" class="hash-link" aria-label="Direct link to Custom Validators" title="Direct link to Custom Validators" translate="no">​</a></h3>
<p>Angular allows us to create custom validators to meet our specific validation requirements. We can create a custom validator function and apply it to a form control using the <code>Validators</code> class.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">forbiddenNameValidator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">control</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">AbstractControl</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ValidationErrors</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> forbiddenNames </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'admin'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'superuser'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">forbiddenNames</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">includes</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">control</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> forbiddenName</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> forbiddenNameValidator</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above code snippet, we define a custom validator function <code>forbiddenNameValidator</code> that checks if the value of the control is in the <code>forbiddenNames</code> array. If the value is forbidden, we return a validation error object. Otherwise, we return <code>null</code>. We apply this custom validator to the <code>name</code> control.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="cross-field-validation">Cross-field Validation<a href="https://dopebase.com/blog/angular-forms-complete-guide#cross-field-validation" class="hash-link" aria-label="Direct link to Cross-field Validation" title="Direct link to Cross-field Validation" translate="no">​</a></h3>
<p>Cross-field validation is the process of validating multiple form controls together. Angular allows us to implement cross-field validation by creating a custom validator function that takes the entire form as an argument.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">passwordMatchValidator</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">form</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormGroup</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ValidationErrors</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> password </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> form</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'password'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> confirmPassword </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> form</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'confirmPassword'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">password</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!==</span><span class="token plain"> confirmPassword</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    confirmPassword</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setErrors</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> passwordMatch</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    confirmPassword</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">setErrors</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  confirmPassword</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> validator</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> passwordMatchValidator </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we define a custom validator function <code>passwordMatchValidator</code> that compares the values of the <code>password</code> and <code>confirmPassword</code> controls. If the values don't match, we set the <code>passwordMatch</code> error on the <code>confirmPassword</code> control. Otherwise, we remove the error. We apply this custom validator to the entire form using the <code>validator</code> property of the <code>formBuilder.group()</code> method.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-controls-2">Form Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#form-controls-2" class="hash-link" aria-label="Direct link to Form Controls" title="Direct link to Form Controls" translate="no">​</a></h2>
<p>Form controls provide a way to interact with user input in Angular Forms. Angular supports various types of form controls, including input controls, checkbox controls, radio button controls, select controls, and more.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="input-controls">Input Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#input-controls" class="hash-link" aria-label="Direct link to Input Controls" title="Direct link to Input Controls" translate="no">​</a></h3>
<p>Input controls allow users to enter text or select a value from a predefined set of options. We can create input controls using the <code>input</code> element or Angular's built-in form control components like <code>input</code>, <code>textarea</code>, and <code>select</code>.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formControlName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we create a text input control and bind it to the <code>name</code> control in the form using the <code>formControlName</code> directive.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="checkbox-controls">Checkbox Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#checkbox-controls" class="hash-link" aria-label="Direct link to Checkbox Controls" title="Direct link to Checkbox Controls" translate="no">​</a></h3>
<p>Checkbox controls allow users to select one or more options from a list of choices. We can create checkbox controls using the <code>input</code> element with the <code>type="checkbox"</code> attribute.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">checkbox</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formControlName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">agree</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we create a checkbox control and bind it to the <code>agree</code> control in the form using the <code>formControlName</code> directive.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="radio-button-controls">Radio Button Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#radio-button-controls" class="hash-link" aria-label="Direct link to Radio Button Controls" title="Direct link to Radio Button Controls" translate="no">​</a></h3>
<p>Radio button controls allow users to select a single option from a list of choices. We can create radio button controls using the <code>input</code> element with the <code>type="radio"</code> attribute.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">label</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">radio</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">[value]</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">true</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formControlName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">gender</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Male</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">label</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">label</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">radio</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">[value]</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">false</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formControlName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">gender</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Female</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">label</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we create two radio button controls and bind them to the <code>gender</code> control in the form using the <code>formControlName</code> directive.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="select-controls">Select Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#select-controls" class="hash-link" aria-label="Direct link to Select Controls" title="Direct link to Select Controls" translate="no">​</a></h3>
<p>Select controls allow users to choose an option from a dropdown list. We can create select controls using the <code>select</code> element and the <code>option</code> element.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">select</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formControlName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">country</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">option</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Select a country</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">option</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">option</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">USA</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">USA</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">option</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">option</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Canada</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Canada</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">option</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">option</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">UK</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">UK</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">option</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">select</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we create a select control with multiple options and bind it to the <code>country</code> control in the form using the <code>formControlName</code> directive.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-arrays">Form Arrays<a href="https://dopebase.com/blog/angular-forms-complete-guide#form-arrays" class="hash-link" aria-label="Direct link to Form Arrays" title="Direct link to Form Arrays" translate="no">​</a></h2>
<p>Form Arrays provide a way to manage a dynamic list of form controls. They are useful when we need to handle a collection of related form controls that can be added or removed dynamically.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-form-arrays">Creating Form Arrays<a href="https://dopebase.com/blog/angular-forms-complete-guide#creating-form-arrays" class="hash-link" aria-label="Direct link to Creating Form Arrays" title="Direct link to Creating Form Arrays" translate="no">​</a></h3>
<p>To create a Form Array, we need to use the <code>FormArray</code> class from the <code>@angular/forms</code> package. We can create an instance of <code>FormArray</code> and add it to our form group.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormArray</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  names</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">array</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">get</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">names</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormArray</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'names'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">as</span><span class="token plain"> </span><span class="token maybe-class-name">FormArray</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">addName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">names</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">control</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">removeName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">index</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">names</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">removeAt</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">index</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we import the <code>FormArray</code> class from the <code>@angular/forms</code> package. We create a Form Array called <code>names</code> and add it to our form group. We define getter methods to retrieve the <code>names</code> Form Array and add or remove controls from it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="adding-and-removing-form-controls">Adding and Removing Form Controls<a href="https://dopebase.com/blog/angular-forms-complete-guide#adding-and-removing-form-controls" class="hash-link" aria-label="Direct link to Adding and Removing Form Controls" title="Direct link to Adding and Removing Form Controls" translate="no">​</a></h3>
<p>To add or remove form controls dynamically, we can use the methods provided by the <code>FormArray</code> class. We can use the <code>push()</code> method to add a control to the Form Array and the <code>removeAt()</code> method to remove a control at a specific index.</p>
<div class="language-html codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-html codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">formArrayName</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">names</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">*ngFor</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">let name of names.controls; let i = index</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">[formControlName]</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">i</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">(click)</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">removeName(i)</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Remove</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">(click)</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">addName()</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Add Name</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>formArrayName</code> directive to bind the <code>names</code> Form Array to the <code>div</code> element. We use the <code>ngFor</code> directive to iterate over the controls in the Form Array and display an input field for each control. We bind the <code>formControlName</code> directive to the index of the control. We also provide a button to remove a control at a specific index and a button to add a new control to the Form Array.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="working-with-form-array-values">Working with Form Array Values<a href="https://dopebase.com/blog/angular-forms-complete-guide#working-with-form-array-values" class="hash-link" aria-label="Direct link to Working with Form Array Values" title="Direct link to Working with Form Array Values" translate="no">​</a></h3>
<p>To access the values of a Form Array, we can use the <code>value</code> property of the Form Array. It returns an array containing the values of all the controls in the Form Array.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">onSubmit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">names</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we access the values of the <code>names</code> Form Array in the <code>onSubmit</code> method. We can perform any necessary actions with the array of values, such as sending them to the server.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-builder">Form Builder<a href="https://dopebase.com/blog/angular-forms-complete-guide#form-builder" class="hash-link" aria-label="Direct link to Form Builder" title="Direct link to Form Builder" translate="no">​</a></h2>
<p>The Form Builder is a utility class provided by Angular that simplifies the creation of forms. It provides a more concise and readable way to create form controls and form groups.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-form-builder">Using Form Builder<a href="https://dopebase.com/blog/angular-forms-complete-guide#using-form-builder" class="hash-link" aria-label="Direct link to Using Form Builder" title="Direct link to Using Form Builder" translate="no">​</a></h3>
<p>To use the Form Builder, we need to import the <code>FormBuilder</code> class from the <code>@angular/forms</code> package and inject it into our component constructor.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormBuilder</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> formBuilder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormBuilder</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above code snippet, we import the <code>FormBuilder</code> class from the <code>@angular/forms</code> package and inject it into our component constructor.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="simplifying-form-creation">Simplifying Form Creation<a href="https://dopebase.com/blog/angular-forms-complete-guide#simplifying-form-creation" class="hash-link" aria-label="Direct link to Simplifying Form Creation" title="Direct link to Simplifying Form Creation" translate="no">​</a></h3>
<p>The Form Builder simplifies the creation of form controls and form groups by providing a chainable API. We can use methods like <code>control()</code> and <code>group()</code> to create form controls and form groups respectively.</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">myForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">control</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">control</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">email</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">control</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use the Form Builder to create form controls with their initial values and validators. We pass these controls to the <code>group()</code> method to create a form group.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/angular-forms-complete-guide#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored Angular Forms and covered both Template-driven Forms and Reactive Forms. We learned how to create forms, handle form submission, and implement form validation using built-in and custom validators. We also explored form controls, including input controls, checkbox controls, radio button controls, and select controls. Additionally, we discussed form arrays and the Form Builder utility class, which simplifies form creation. With this comprehensive guide, you should now have the knowledge and skills to effectively use Angular Forms in your applications.</p>]]></content:encoded>
            <category>Angular</category>
            <category>dopebase.com</category>
            <category>Form Arrays</category>
            <category>Form Builder</category>
            <category>Form Controls</category>
            <category>Form Validation</category>
            <category>Forms</category>
            <category>Reactive Forms</category>
            <category>Template-driven Forms</category>
        </item>
        <item>
            <title><![CDATA[Angular and RxJS: Reactive Programming Made Easy]]></title>
            <link>https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy</link>
            <guid>https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy</guid>
            <pubDate>Fri, 26 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Use RxJS for asynchronous streams and cancellation while using signals for local synchronous state where they make ownership clearer.]]></description>
            <content:encoded><![CDATA[<p>Use RxJS for asynchronous streams and cancellation while using signals for local synchronous state where they make ownership clearer. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="angular rxjs reactive programming made easy" src="https://dopebase.com/assets/images/01-cover20-73f02b1c-621bc06a94c223005d83a1157af7214b.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Use RxJS for asynchronous streams and cancellation while using signals for local synchronous state where they make ownership clearer.</p>
<p>Build with standalone APIs, strict TypeScript, signals where local reactive state benefits from them, and explicit server-rendering or prerendering decisions. Keep Angular core and CLI aligned and stay on a supported release line.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Choose flattening operators by cancellation and ordering semantics.</li>
<li class="">Avoid nested subscriptions and unmanaged long-lived streams.</li>
<li class="">Convert between signals and observables only at clear boundaries.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Measure production bundles and Core Web Vitals.</li>
<li class="">Use route-level loading and server rendering only where they improve the user journey.</li>
<li class="">Run accessibility, security, and regression tests in CI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://angular.dev/overview" target="_blank" rel="noopener noreferrer" class="">Angular documentation</a></li>
<li class=""><a href="https://angular.dev/guide/signals" target="_blank" rel="noopener noreferrer" class="">Angular signals</a></li>
<li class=""><a href="https://angular.dev/reference/releases" target="_blank" rel="noopener noreferrer" class="">Angular releases</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-reactive-programming">What is Reactive Programming?<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#what-is-reactive-programming" class="hash-link" aria-label="Direct link to What is Reactive Programming?" title="Direct link to What is Reactive Programming?" translate="no">​</a></h3>
<p>Reactive programming is a programming paradigm that focuses on how data flows and changes over time. It allows developers to build applications that can react to changes in data streams and events in a declarative and composable manner. In reactive programming, the emphasis is on handling asynchronous events and data streams using a set of principles and patterns.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-use-reactive-programming-with-angular">Why use Reactive Programming with Angular?<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#why-use-reactive-programming-with-angular" class="hash-link" aria-label="Direct link to Why use Reactive Programming with Angular?" title="Direct link to Why use Reactive Programming with Angular?" translate="no">​</a></h3>
<p>Angular is a powerful framework for building complex web applications. However, as applications grow in size and complexity, managing asynchronous events and data streams can become a challenging task. Reactive programming with RxJS provides a solution to this problem by offering a set of powerful tools and patterns for handling asynchronous operations in a more efficient and maintainable way. By using RxJS, developers can easily manage complex scenarios such as event handling, form validation, HTTP requests, state management, and routing in their Angular applications.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="overview-of-rxjs">Overview of RxJS<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#overview-of-rxjs" class="hash-link" aria-label="Direct link to Overview of RxJS" title="Direct link to Overview of RxJS" translate="no">​</a></h3>
<p>RxJS (Reactive Extensions for JavaScript) is a library for reactive programming using Observables, which are a powerful abstraction for handling asynchronous events and data streams. RxJS provides a wide range of operators that can be used to transform, filter, and combine observables to create complex data processing pipelines. It also provides utilities for handling errors, managing subscriptions, and controlling the concurrency of operations.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="getting-started-with-rxjs">Getting Started with RxJS<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#getting-started-with-rxjs" class="hash-link" aria-label="Direct link to Getting Started with RxJS" title="Direct link to Getting Started with RxJS" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="installing-rxjs">Installing RxJS<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#installing-rxjs" class="hash-link" aria-label="Direct link to Installing RxJS" title="Direct link to Installing RxJS" translate="no">​</a></h3>
<p>To use RxJS in an Angular project, you first need to install it as a dependency. You can do this by running the following command in your project's root directory:</p>
<div class="language-bash codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-bash codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> rxjs</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="importing-rxjs-into-an-angular-project">Importing RxJS into an Angular Project<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#importing-rxjs-into-an-angular-project" class="hash-link" aria-label="Direct link to Importing RxJS into an Angular Project" title="Direct link to Importing RxJS into an Angular Project" translate="no">​</a></h3>
<p>After installing RxJS, you can import it into your Angular project by adding the following line to the top of your component or service file:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-observables">Creating Observables<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#creating-observables" class="hash-link" aria-label="Direct link to Creating Observables" title="Direct link to Creating Observables" translate="no">​</a></h3>
<p>Observables are the building blocks of reactive programming in RxJS. They represent a source of values that can be observed over time. You can create observables from various sources such as events, arrays, promises, or custom data sources. Here's an example of creating an observable from an array:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> numbers </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> numbers$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Observable</span><span class="token class-name operator" style="color:#393A34">&lt;</span><span class="token class-name builtin">number</span><span class="token class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">observer </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  numbers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">forEach</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">complete</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">numbers$</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we create an observable <code>numbers$</code> that emits each number from the <code>numbers</code> array. The <code>subscribe</code> method is used to listen to the emitted values and log them to the console.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="subscribing-to-observables">Subscribing to Observables<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#subscribing-to-observables" class="hash-link" aria-label="Direct link to Subscribing to Observables" title="Direct link to Subscribing to Observables" translate="no">​</a></h3>
<p>To consume the values emitted by an observable, you need to subscribe to it. The <code>subscribe</code> method takes one or more callbacks as arguments, which are invoked when different events occur in the observable's lifecycle. Here's an example of subscribing to an observable:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> numbers$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Observable</span><span class="token class-name operator" style="color:#393A34">&lt;</span><span class="token class-name builtin">number</span><span class="token class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">observer </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">complete</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">numbers$</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">number</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// next callback</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  error </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// error callback</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Complete'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// complete callback</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we subscribe to the <code>numbers$</code> observable and provide three callbacks: <code>next</code> for handling emitted values, <code>error</code> for handling errors, and <code>complete</code> for handling the completion of the observable.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="operators-in-rxjs">Operators in RxJS<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#operators-in-rxjs" class="hash-link" aria-label="Direct link to Operators in RxJS" title="Direct link to Operators in RxJS" translate="no">​</a></h3>
<p>Operators are functions that can be used to transform, filter, and combine observables to create complex data processing pipelines. RxJS provides a wide range of operators that can be categorized into different types such as creation operators, transformation operators, filtering operators, combination operators, and utility operators. Here's an example of using the <code>map</code> operator to transform the emitted values of an observable:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> map </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs/operators'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> numbers$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">Observable</span><span class="token class-name operator" style="color:#393A34">&lt;</span><span class="token class-name builtin">number</span><span class="token class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">observer </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  observer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">complete</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">numbers$</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>pipe</code> method to apply the <code>map</code> operator to the <code>numbers$</code> observable. The <code>map</code> operator transforms each emitted value by multiplying it by 2.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="reactive-forms">Reactive Forms<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#reactive-forms" class="hash-link" aria-label="Direct link to Reactive Forms" title="Direct link to Reactive Forms" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-reactive-forms">Creating Reactive Forms<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#creating-reactive-forms" class="hash-link" aria-label="Direct link to Creating Reactive Forms" title="Direct link to Creating Reactive Forms" translate="no">​</a></h3>
<p>Reactive forms provide a powerful way to handle user input and perform form validation in Angular applications. By using reactive forms, you can easily define the structure and validation rules of a form in a reactive and declarative manner. Here's an example of creating a reactive form in Angular:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormBuilder</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormGroup</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Validators</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-login-form'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;form [formGroup]="loginForm" (ngSubmit)="onSubmit()"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;input type="text" formControlName="username" placeholder="Username"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;input type="password" formControlName="password" placeholder="Password"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;button type="submit"&gt;Login&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/form&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">LoginFormComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  loginForm</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormGroup</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> formBuilder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormBuilder</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">loginForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      username</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      password</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onSubmit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">loginForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">valid</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Perform login</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>FormBuilder</code> service to create a reactive form <code>loginForm</code> with two form controls: <code>username</code> and <code>password</code>. We also define validation rules for each form control using the <code>Validators</code> class. The <code>onSubmit</code> method is called when the form is submitted, and it performs the login logic if the form is valid.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="form-validation-with-rxjs">Form Validation with RxJS<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#form-validation-with-rxjs" class="hash-link" aria-label="Direct link to Form Validation with RxJS" title="Direct link to Form Validation with RxJS" translate="no">​</a></h3>
<p>Reactive forms in Angular provide built-in support for form validation. You can define validation rules for each form control using the <code>Validators</code> class, and Angular automatically handles the validation logic. Here's an example of adding validation rules to a form control:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormBuilder</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormGroup</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Validators</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-registration-form'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;form [formGroup]="registrationForm" (ngSubmit)="onSubmit()"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;input type="text" formControlName="email" placeholder="Email"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;div *ngIf="emailControl.touched &amp;&amp; emailControl.invalid"&gt;Invalid email&lt;/div&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;button type="submit"&gt;Register&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/form&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">RegistrationFormComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  registrationForm</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormGroup</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">get</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">emailControl</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">registrationForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'email'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> formBuilder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormBuilder</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">registrationForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">email</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onSubmit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">registrationForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">valid</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Perform registration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we define a validation rule for the <code>email</code> form control using the <code>Validators.required</code> and <code>Validators.email</code> validators. If the email control is touched and invalid, we display an error message using the <code>*ngIf</code> directive.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-form-submissions">Handling Form Submissions<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#handling-form-submissions" class="hash-link" aria-label="Direct link to Handling Form Submissions" title="Direct link to Handling Form Submissions" translate="no">​</a></h3>
<p>Reactive forms in Angular provide a convenient way to handle form submissions using the <code>ngSubmit</code> event. By binding a method to the <code>ngSubmit</code> event, you can perform custom logic when the form is submitted. Here's an example of handling form submissions:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormBuilder</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">FormGroup</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Validators</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/forms'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-contact-form'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;form [formGroup]="contactForm" (ngSubmit)="onSubmit()"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;input type="text" formControlName="name" placeholder="Name"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;input type="email" formControlName="email" placeholder="Email"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;textarea formControlName="message" placeholder="Message"&gt;&lt;/textarea&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;button type="submit"&gt;Send&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/form&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">ContactFormComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  contactForm</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormGroup</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> formBuilder</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">FormBuilder</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">contactForm</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">formBuilder</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">group</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">email</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token maybe-class-name">Validators</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">required</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onSubmit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">contactForm</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">valid</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// Send contact form data</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we bind the <code>onSubmit</code> method to the <code>ngSubmit</code> event of the contact form. If the form is valid, the <code>onSubmit</code> method is called and the contact form data can be sent to the server or processed in any other way.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="reactive-http-requests">Reactive HTTP Requests<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#reactive-http-requests" class="hash-link" aria-label="Direct link to Reactive HTTP Requests" title="Direct link to Reactive HTTP Requests" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="making-http-requests-with-rxjs">Making HTTP Requests with RxJS<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#making-http-requests-with-rxjs" class="hash-link" aria-label="Direct link to Making HTTP Requests with RxJS" title="Direct link to Making HTTP Requests with RxJS" translate="no">​</a></h3>
<p>RxJS provides a set of operators for handling HTTP requests in a reactive and composable way. By using these operators, you can easily send HTTP requests, transform the response data, handle errors, and control the concurrency of operations. Here's an example of making an HTTP GET request using RxJS:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HttpClient</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/common/http'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-user-list'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;li *ngFor="let user of users$ | async"&gt;{{ user.name }}&lt;/li&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">UserListComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  users$</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> http</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">HttpClient</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">users$</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">get</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name maybe-class-name">User</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">[</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">]</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/api/users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>HttpClient</code> service provided by Angular to make an HTTP GET request to the <code>/api/users</code> endpoint. The response data is automatically converted into an observable using the <code>get</code> method of the <code>HttpClient</code> service. We then use the <code>async</code> pipe in the template to subscribe to the observable and automatically update the user list whenever the response data changes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-responses">Handling Responses<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#handling-responses" class="hash-link" aria-label="Direct link to Handling Responses" title="Direct link to Handling Responses" translate="no">​</a></h3>
<p>RxJS provides operators for transforming and filtering the response data of an HTTP request. For example, you can use the <code>map</code> operator to transform the response data, the <code>filter</code> operator to filter the response data based on certain criteria, and the <code>tap</code> operator to perform side effects such as logging or caching. Here's an example of transforming the response data of an HTTP request:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HttpClient</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/common/http'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> map </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs/operators'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-user-list'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;li *ngFor="let user of users$ | async"&gt;{{ user.fullName }}&lt;/li&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">UserListComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  users$</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> http</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">HttpClient</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">users$</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">get</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name maybe-class-name">User</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">[</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">]</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/api/users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">users </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> users</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">user </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">user</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> fullName</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">user</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation property-access">firstName</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c"> </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">user</span><span class="token template-string interpolation punctuation" style="color:#393A34">.</span><span class="token template-string interpolation property-access">lastName</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>map</code> operator to transform the response data of the HTTP request. We map each user object to a new object with an additional <code>fullName</code> property, which is constructed by concatenating the <code>firstName</code> and <code>lastName</code> properties.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="error-handling">Error Handling<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#error-handling" class="hash-link" aria-label="Direct link to Error Handling" title="Direct link to Error Handling" translate="no">​</a></h3>
<p>RxJS provides operators for handling errors in HTTP requests. For example, you can use the <code>catchError</code> operator to handle HTTP errors and return a default value or perform a fallback action. Here's an example of handling errors in an HTTP request:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HttpClient</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/common/http'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports keyword" style="color:#00009f">of</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> catchError </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs/operators'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-user-list'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;li *ngFor="let user of users$ | async"&gt;{{ user.name }}&lt;/li&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">UserListComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  users$</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> http</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">HttpClient</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">users$</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">get</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name maybe-class-name">User</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">[</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">]</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'/api/users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token function" style="color:#d73a49">catchError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'An error occurred:'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">of</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>catchError</code> operator to handle errors in the HTTP request. If an error occurs, we log the error to the console and return an empty array as a fallback value using the <code>of</code> operator.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="reactive-state-management">Reactive State Management<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#reactive-state-management" class="hash-link" aria-label="Direct link to Reactive State Management" title="Direct link to Reactive State Management" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction-to-reactive-state-management">Introduction to Reactive State Management<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#introduction-to-reactive-state-management" class="hash-link" aria-label="Direct link to Introduction to Reactive State Management" title="Direct link to Introduction to Reactive State Management" translate="no">​</a></h3>
<p>Managing state is an important aspect of building complex applications. In Angular, reactive state management can be achieved using RxJS in combination with a state management library such as NgRx. By using reactive state management, you can centralize and manage the state of your application in a predictable and composable way. Here's an example of using RxJS for reactive state management:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">BehaviorSubject</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-counter'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;button (click)="increment()"&gt;Increment&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;span&gt;{{ count$ | async }}&lt;/span&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;button (click)="decrement()"&gt;Decrement&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">CounterComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> countSubject </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name maybe-class-name">BehaviorSubject</span><span class="token class-name operator" style="color:#393A34">&lt;</span><span class="token class-name builtin">number</span><span class="token class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  count$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">countSubject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">asObservable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">increment</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">countSubject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">countSubject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">decrement</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">countSubject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">next</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">countSubject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>BehaviorSubject</code> class from RxJS to create a reactive state for the counter component. The <code>countSubject</code> is a subject that emits the current count value, and the <code>count$</code> observable is created from the subject using the <code>asObservable</code> method. We can then subscribe to the <code>count$</code> observable in the template using the <code>async</code> pipe, and the count value will automatically update whenever the subject emits a new value.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-rxjs-with-ngrx">Using RxJS with NgRx<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#using-rxjs-with-ngrx" class="hash-link" aria-label="Direct link to Using RxJS with NgRx" title="Direct link to Using RxJS with NgRx" translate="no">​</a></h3>
<p>NgRx is a state management library for Angular applications that is built on top of RxJS. It provides a set of powerful tools and patterns for managing state in a reactive and composable way. By using NgRx, you can centralize your application's state, define actions and reducers to modify the state, and use selectors to derive data from the state. Here's an example of using NgRx for reactive state management:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Store</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@ngrx/store'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> increment</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> decrement </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./counter.actions'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-counter'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;button (click)="onIncrement()"&gt;Increment&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;span&gt;{{ count$ | async }}&lt;/span&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;button (click)="onDecrement()"&gt;Decrement&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">CounterComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  count$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">select</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'count'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> store</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Store</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onIncrement</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">increment</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onDecrement</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">decrement</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>Store</code> class provided by NgRx to create a reactive state for the counter component. The <code>count$</code> observable is created by selecting the <code>count</code> property from the store using the <code>select</code> method. We can then dispatch actions to modify the state using the <code>dispatch</code> method of the store.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="managing-state-in-angular-applications">Managing State in Angular Applications<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#managing-state-in-angular-applications" class="hash-link" aria-label="Direct link to Managing State in Angular Applications" title="Direct link to Managing State in Angular Applications" translate="no">​</a></h3>
<p>Reactive state management is not limited to individual components. In Angular applications, you can use RxJS and a state management library to manage the state of the entire application. This allows you to centralize the state, share data between components, and handle complex scenarios such as caching, optimistic updates, and undo/redo. Here's an example of managing state in an Angular application:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Store</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@ngrx/store'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> loadUsers </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./user.actions'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-user-list'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">      &lt;li *ngFor="let user of users$ | async"&gt;{{ user.name }}&lt;/li&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;/ul&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;button (click)="onLoadUsers()"&gt;Load Users&lt;/button&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">UserListComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  users$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">select</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'users'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> store</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Store</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> users</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">User</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">onLoadUsers</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">store</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">dispatch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">loadUsers</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>Store</code> class provided by NgRx to create a reactive state for the user list component. The <code>users$</code> observable is created by selecting the <code>users</code> property from the store. We can then dispatch actions to load users from the server using the <code>dispatch</code> method of the store.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="reactive-routing">Reactive Routing<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#reactive-routing" class="hash-link" aria-label="Direct link to Reactive Routing" title="Direct link to Reactive Routing" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="using-rxjs-with-angular-router">Using RxJS with Angular Router<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#using-rxjs-with-angular-router" class="hash-link" aria-label="Direct link to Using RxJS with Angular Router" title="Direct link to Using RxJS with Angular Router" translate="no">​</a></h3>
<p>Angular Router is a powerful tool for handling routing in Angular applications. By using RxJS with Angular Router, you can easily handle route changes, pass parameters between routes, and perform complex routing scenarios. Here's an example of using RxJS with Angular Router:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ActivatedRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/router'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> map </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs/operators'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-user-details'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;h2&gt;User Details&lt;/h2&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;p&gt;User ID: {{ userId$ | async }}&lt;/p&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">UserDetailsComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  userId$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">route</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">paramMap</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">params </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> params</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'id'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> route</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ActivatedRoute</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>ActivatedRoute</code> class provided by Angular Router to access route parameters. The <code>userId$</code> observable is created by using the <code>paramMap</code> property of the route to get the <code>id</code> parameter and map it to the desired format using the <code>map</code> operator.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-route-parameters">Handling Route Parameters<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#handling-route-parameters" class="hash-link" aria-label="Direct link to Handling Route Parameters" title="Direct link to Handling Route Parameters" translate="no">​</a></h3>
<p>Route parameters are a powerful feature of Angular Router that allows you to pass data between routes. By using route parameters, you can easily create dynamic routes, handle complex routing scenarios, and share data between components. Here's an example of handling route parameters in Angular Router:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Component</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ActivatedRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/router'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> switchMap </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs/operators'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Component</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  selector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'app-user-details'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  template</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c"></span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;h2&gt;User Details&lt;/h2&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;p&gt;User ID: {{ userId$ | async }}&lt;/p&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">    &lt;p&gt;User Name: {{ userName$ | async }}&lt;/p&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token template-string string" style="color:#e3116c">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">UserDetailsComponent</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  userId$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">route</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">paramMap</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">switchMap</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">params </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">userService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">params</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'id'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  userName$ </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">route</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">paramMap</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">switchMap</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">params </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">userService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">getUserName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">params</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'id'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> route</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ActivatedRoute</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> userService</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">UserService</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we use the <code>paramMap</code> property of the <code>ActivatedRoute</code> to access route parameters. We then use the <code>switchMap</code> operator to switch to an observable returned by a service method that fetches the user data based on the route parameter.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="guarding-routes">Guarding Routes<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#guarding-routes" class="hash-link" aria-label="Direct link to Guarding Routes" title="Direct link to Guarding Routes" translate="no">​</a></h3>
<p>Route guards are a feature of Angular Router that allows you to control access to routes based on certain conditions. By using route guards, you can implement authentication and authorization logic, handle route activation and deactivation, and perform other custom routing scenarios. Here's an example of using route guards in Angular Router:</p>
<div class="language-typescript codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-typescript codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Injectable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/core'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">CanActivate</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">ActivatedRouteSnapshot</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">RouterStateSnapshot</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@angular/router'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Observable</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'rxjs'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AuthService</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./auth.service'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token decorator at operator" style="color:#393A34">@</span><span class="token decorator function" style="color:#d73a49">Injectable</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name maybe-class-name">AuthGuard</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">implements</span><span class="token plain"> </span><span class="token class-name maybe-class-name">CanActivate</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">constructor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> authService</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">AuthService</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">canActivate</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    next</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">ActivatedRouteSnapshot</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    state</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">RouterStateSnapshot</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token maybe-class-name">Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token builtin">boolean</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token known-class-name class-name">Promise</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token builtin">boolean</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token builtin">boolean</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">authService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">isAuthenticated</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In the above example, we create a route guard <code>AuthGuard</code> that implements the <code>CanActivate</code> interface provided by Angular Router. The <code>canActivate</code> method is called when a route is activated, and it returns a boolean value indicating whether the route can be activated or not. We can then use this route guard to protect certain routes by adding it to the <code>canActivate</code> property of the route definition.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/angular-rxjs-reactive-programming-made-easy#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we have explored the concept of reactive programming and its benefits in Angular development. We have learned how to install and import RxJS into an Angular project, create observables, and subscribe to them. We have also explored various aspects of reactive programming such as reactive forms, reactive HTTP requests, reactive state management, and reactive routing. By leveraging the power of RxJS, developers can easily handle complex scenarios in their Angular applications and build more efficient and maintainable code.</p>]]></content:encoded>
            <category>Angular</category>
            <category>Development</category>
            <category>dopebase.com</category>
            <category>Reactive Programming</category>
            <category>RxJS</category>
        </item>
        <item>
            <title><![CDATA[Kotlin vs. Java: A Comprehensive Comparison]]></title>
            <link>https://dopebase.com/blog/kotlin-java-comprehensive-comparison</link>
            <guid>https://dopebase.com/blog/kotlin-java-comprehensive-comparison</guid>
            <pubDate>Thu, 25 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Compare Kotlin and Java for JVM and Android work through interoperability, null safety, concurrency, tooling, team adoption, and library constraints.]]></description>
            <content:encoded><![CDATA[<p>Compare Kotlin and Java for JVM and Android work through interoperability, null safety, concurrency, tooling, team adoption, and library constraints. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="kotlin java comprehensive comparison" src="https://dopebase.com/assets/images/01-cover17-900a7fcc-d72c5607a053a5692a81e5d653349657.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Compare Kotlin and Java for JVM and Android work through interoperability, null safety, concurrency, tooling, team adoption, and library constraints.</p>
<p>Use modern Kotlin language features, structured concurrency, lifecycle-aware state, and explicit boundaries between UI, domain, and data layers. For Android UI, prefer Compose unless an existing View-based surface has a clear reason to remain.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Adopt Kotlin incrementally in mixed JVM codebases.</li>
<li class="">Keep Java-facing APIs simple and test nullability boundaries.</li>
<li class="">Measure build and migration cost on the real project.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Pin compatible Kotlin, Gradle, and Android plugin versions.</li>
<li class="">Test cancellation, process recreation, offline behavior, and error recovery.</li>
<li class="">Keep platform-specific code behind small interfaces.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://kotlinlang.org/docs/home.html" target="_blank" rel="noopener noreferrer" class="">Kotlin documentation</a></li>
<li class=""><a href="https://kotlinlang.org/docs/coroutines-guide.html" target="_blank" rel="noopener noreferrer" class="">Kotlin coroutines</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-kotlin">What is Kotlin?<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#what-is-kotlin" class="hash-link" aria-label="Direct link to What is Kotlin?" title="Direct link to What is Kotlin?" translate="no">​</a></h3>
<p>Kotlin is a modern statically-typed programming language that runs on the Java Virtual Machine (JVM). It was developed by JetBrains, the same company behind popular IDEs such as IntelliJ IDEA. Kotlin is designed to be fully interoperable with Java, which means you can use Kotlin code alongside existing Java code in your projects. It offers a concise syntax, null safety, functional programming capabilities, and better tooling support compared to Java.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-java">What is Java?<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#what-is-java" class="hash-link" aria-label="Direct link to What is Java?" title="Direct link to What is Java?" translate="no">​</a></h3>
<p>Java is a widely-used programming language that has been around since the mid-1990s. It is known for its "write once, run anywhere" principle, which means Java code can be executed on any device that has a Java Virtual Machine (JVM). Java has a large ecosystem, a vast community, and extensive libraries and frameworks. It is a statically-typed language that follows an object-oriented programming (OOP) paradigm.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="syntax-comparison">Syntax Comparison<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#syntax-comparison" class="hash-link" aria-label="Direct link to Syntax Comparison" title="Direct link to Syntax Comparison" translate="no">​</a></h3>
<p>Let's start by comparing the syntax of Kotlin and Java. Here's a simple example of declaring a variable in Kotlin:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Hello, Kotlin!"</span><br></span></code></pre></div></div>
<p>In this example, we declare a variable named <code>message</code> of type <code>String</code> and initialize it with the value "Hello, Kotlin!". The <code>val</code> keyword is used for declaring read-only variables in Kotlin.</p>
<p>Now, let's see how the same variable declaration looks in Java:</p>
<div class="language-java codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-java codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">final</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> message </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, Java!"</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>In Java, we use the <code>final</code> keyword to declare a read-only variable. The type is specified before the variable name, followed by the variable assignment.</p>
<p>As you can see, Kotlin provides a more concise syntax compared to Java. It eliminates boilerplate code and reduces the chances of common programming errors.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="variable-declarations">Variable Declarations<a href="https://dopebase.com/blog/kotlin-java-comprehensive-comparison#variable-declarations" class="hash-link" aria-label="Direct link to Variable Declarations" title="Direct link to Variable Declarations" translate="no">​</a></h3>
<p>In Kotlin, variable declarations can be mutable (<code>var</code>) or read-only (<code>val</code>). Mutable variables can be reassigned, while read-only variables can only be assigned once.</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> count</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">count </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Valid reassignment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> pi</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Double </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3.14</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pi </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3.1415</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Error: Val cannot be reassigned</span><br></span></code></pre></div></div>
<p>In Java, variables are mutable by default. However, you can use the <code>final</code> keyword to declare read-only variables.</p>
<div class="language-java codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-java codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> count </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">count </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Valid reassignment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">final</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">double</span><span class="token plain"> pi </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3.14</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pi </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3.1415</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Error: Cannot assign a value to final variable</span><br></span></code></pre></div></div>
<p>Control Flow</p>
<p>Both Kotlin and Java support similar control flow structures such as if-else statements, for loops, while loops, and switch statements. Here's an example of an if-else statement in Kotlin:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> number </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">number </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"Positive number"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">number </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"Negative number"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"Zero"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In Java, the same if-else statement would look like this:</p>
<div class="language-java codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-java codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> number </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">number </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Positive number"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">number </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Negative number"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Zero"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Null Safety</p>
<p>One of the key features of Kotlin is its built-in null safety. In Kotlin, you have to explicitly specify whether a variable can hold a null value or not. This helps to prevent null pointer exceptions, which are a common source of bugs in Java.</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">null</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">name </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"John"</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Valid assignment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">name</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">length </span><span class="token comment" style="color:#999988;font-style:italic">// Compile-time error: Variable 'name' can be null</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> length </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">?</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">length </span><span class="token comment" style="color:#999988;font-style:italic">// Safe access with the '?' operator</span><br></span></code></pre></div></div>
<p>In Java, all variables can hold null values by default, unless they are explicitly declared with the <code>@NotNull</code> annotation from external libraries.</p>
<div class="language-java codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-java codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token class-name">String</span><span class="token plain"> name </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Valid assignment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> length </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> name</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">length</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// NullPointerException at runtime</span><br></span></code></pre></div></div>
<p>Performance</p>
<p>When it comes to performance, Kotlin and Java are comparable. Since Kotlin runs on the JVM, it benefits from the optimizations and performance improvements of the Java platform. Therefore, the performance of Kotlin code is similar to that of equivalent Java code.</p>
<p>Compilation Time</p>
<p>Kotlin generally has slower compilation times compared to Java. This is because Kotlin's compiler performs more complex type inference and additional checks for null safety. However, the difference in compilation time is usually negligible for small to medium-sized projects.</p>
<p>Runtime Performance</p>
<p>In terms of runtime performance, Kotlin and Java are again comparable. Kotlin code is compiled to bytecode that runs on the Java Virtual Machine (JVM), which means it benefits from the optimizations and performance improvements of the Java platform.</p>
<p>Interoperability</p>
<p>Kotlin and Java are fully interoperable, which means you can use Kotlin code alongside existing Java code in your projects. This allows for a smooth transition from Java to Kotlin or vice versa.</p>
<p>Using Kotlin code in Java</p>
<p>To use Kotlin code in a Java project, you need to add the Kotlin runtime library to your project dependencies. Then, you can simply import and use Kotlin classes and functions in your Java code.</p>
<div class="language-java codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-java codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token import namespace" style="opacity:0.7">com</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import namespace" style="opacity:0.7">example</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import class-name">MyKotlinClass</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Main</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">MyKotlinClass</span><span class="token plain"> myKotlinObject </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">MyKotlinClass</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        myKotlinObject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">sayHello</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Using Java code in Kotlin</p>
<p>Similarly, you can use Java code in a Kotlin project without any issues. Kotlin provides seamless interoperability with Java, allowing you to call Java classes and methods directly.</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> com</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">example</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">MyJavaClass</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> myJavaObject </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">MyJavaClass</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    myJavaObject</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">sayHello</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Tooling and IDE Support</p>
<p>Kotlin has excellent tooling support, especially when used with JetBrains' IntelliJ IDEA IDE. IntelliJ offers a dedicated Kotlin plugin that provides features like smart code completion, refactoring tools, and debugging support. Other IDEs such as Eclipse and Android Studio also have support for Kotlin.</p>
<p>Java, being a more established language, has a wide range of IDE options available. IntelliJ IDEA, Eclipse, and NetBeans are popular choices for Java development.</p>
<p>Community and Adoption</p>
<p>Kotlin Community</p>
<p>Kotlin has a rapidly growing community of developers who are passionate about the language. The official Kotlin website provides extensive documentation, tutorials, and a vibrant forum where developers can ask questions and share their experiences.</p>
<p>Java Community</p>
<p>Java has one of the largest developer communities in the world. It has been around for decades and has a vast ecosystem of libraries, frameworks, and tools. The Java community is known for its active participation in open-source projects and its willingness to share knowledge and best practices.</p>
<p>Adoption Trends</p>
<p>Kotlin's adoption has been steadily increasing since its release. It is the preferred language for Android app development, and many companies have started adopting Kotlin for their backend and frontend projects. Some popular companies using Kotlin include Pinterest, Uber, and Trello.</p>
<p>Java, on the other hand, has been widely adopted across various industries and domains. It is still the primary language for enterprise-level applications and is used heavily in the financial, healthcare, and government sectors.</p>
<p>Conclusion</p>
<p>In conclusion, Kotlin and Java are both powerful programming languages with their own strengths and areas of application. Kotlin offers a more concise syntax, null safety, and better tooling support compared to Java. It also has a growing community and is gaining popularity in the software development industry. On the other hand, Java has a vast ecosystem, extensive libraries and frameworks, and a mature community. It is still the language of choice for many enterprise-level applications. Ultimately, the choice between Kotlin and Java depends on the specific requirements and preferences of your development projects.</p>]]></content:encoded>
            <category>Comparison</category>
            <category>Development</category>
            <category>Java</category>
            <category>Kotlin</category>
        </item>
        <item>
            <title><![CDATA[Exploring Kotlin Coroutines: A Beginner's Guide]]></title>
            <link>https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide</link>
            <guid>https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide</guid>
            <pubDate>Wed, 24 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Learn Kotlin coroutines through structured concurrency, cancellation, dispatchers, lifecycle ownership, and testable suspend functions.]]></description>
            <content:encoded><![CDATA[<p>Learn Kotlin coroutines through structured concurrency, cancellation, dispatchers, lifecycle ownership, and testable suspend functions. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="exploring kotlin coroutines beginners guide" src="https://dopebase.com/assets/images/01-cover13-1e15a121-ab1074a5c7d759c8e91dedb191ad460c.jpg" width="1100" height="733" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Learn Kotlin coroutines through structured concurrency, cancellation, dispatchers, lifecycle ownership, and testable suspend functions.</p>
<p>Use modern Kotlin language features, structured concurrency, lifecycle-aware state, and explicit boundaries between UI, domain, and data layers. For Android UI, prefer Compose unless an existing View-based surface has a clear reason to remain.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Launch work in an owner scope instead of a global scope.</li>
<li class="">Propagate cancellation and never swallow cancellation exceptions.</li>
<li class="">Inject dispatchers or abstractions where deterministic tests need them.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Pin compatible Kotlin, Gradle, and Android plugin versions.</li>
<li class="">Test cancellation, process recreation, offline behavior, and error recovery.</li>
<li class="">Keep platform-specific code behind small interfaces.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://kotlinlang.org/docs/home.html" target="_blank" rel="noopener noreferrer" class="">Kotlin documentation</a></li>
<li class=""><a href="https://kotlinlang.org/docs/coroutines-guide.html" target="_blank" rel="noopener noreferrer" class="">Kotlin coroutines</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-are-kotlin-coroutines">What are Kotlin Coroutines?<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#what-are-kotlin-coroutines" class="hash-link" aria-label="Direct link to What are Kotlin Coroutines?" title="Direct link to What are Kotlin Coroutines?" translate="no">​</a></h3>
<p>Kotlin Coroutines are a feature in Kotlin that allow for asynchronous programming. They provide a way to write asynchronous code in a more sequential and concise manner. Coroutines can be thought of as lightweight threads that can be suspended and resumed at any point, allowing for efficient and non-blocking code execution.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="why-use-kotlin-coroutines">Why use Kotlin Coroutines?<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#why-use-kotlin-coroutines" class="hash-link" aria-label="Direct link to Why use Kotlin Coroutines?" title="Direct link to Why use Kotlin Coroutines?" translate="no">​</a></h3>
<p>There are several advantages to using Kotlin Coroutines in your development projects. Firstly, they provide a simpler and more readable syntax compared to traditional callback-based or thread-based asynchronous code. Coroutines also allow for easy cancellation of tasks and handling of exceptions. They also provide built-in support for concurrency and shared mutable state.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="getting-started-with-kotlin-coroutines">Getting started with Kotlin Coroutines<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#getting-started-with-kotlin-coroutines" class="hash-link" aria-label="Direct link to Getting started with Kotlin Coroutines" title="Direct link to Getting started with Kotlin Coroutines" translate="no">​</a></h3>
<p>To get started with Kotlin Coroutines, you will need to add the kotlinx.coroutines dependency to your project. You can do this by adding the following line to your Gradle build file:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">dependencies </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    implementation 'org</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">jetbrains</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">kotlinx</span><span class="token operator" style="color:#393A34">:</span><span class="token plain">kotlinx</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">coroutines</span><span class="token operator" style="color:#393A34">-</span><span class="token plain">android</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">1.5</span><span class="token punctuation" style="color:#393A34">.</span><span class="token number" style="color:#36acaa">0</span><span class="token plain">'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Once the dependency is added, you can start using Kotlin Coroutines in your code.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="basic-concepts">Basic Concepts<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#basic-concepts" class="hash-link" aria-label="Direct link to Basic Concepts" title="Direct link to Basic Concepts" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="suspend-functions">Suspend Functions<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#suspend-functions" class="hash-link" aria-label="Direct link to Suspend Functions" title="Direct link to Suspend Functions" translate="no">​</a></h3>
<p>Suspend functions are the building blocks of Kotlin Coroutines. They are functions that can be paused and resumed at any point without blocking the thread. Suspend functions are defined using the <code>suspend</code> modifier. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Perform asynchronous operation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">delay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Data fetched"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, the <code>fetchData</code> function is a suspend function that simulates a delay of 1 second before returning a string.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutine-builders">Coroutine Builders<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutine-builders" class="hash-link" aria-label="Direct link to Coroutine Builders" title="Direct link to Coroutine Builders" translate="no">​</a></h3>
<p>Coroutine builders are used to create coroutines. There are several coroutine builders available in Kotlin, including <code>launch</code>, <code>async</code>, <code>runBlocking</code>, and <code>withContext</code>.</p>
<p>The <code>launch</code> builder is used to start a coroutine that does not return a result. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>launch</code> builder to start a coroutine in the <code>GlobalScope</code>.</p>
<p>The <code>async</code> builder is used to start a coroutine that returns a result. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> deferredResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token label symbol" style="color:#36acaa">@async</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Result"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>async</code> builder to start a coroutine and get a <code>Deferred</code> object that represents the result of the coroutine.</p>
<p>The <code>runBlocking</code> builder is used to start a coroutine and block the current thread until the coroutine is completed. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    runBlocking </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>runBlocking</code> builder to start a coroutine and block the main thread until the coroutine is completed.</p>
<p>The <code>withContext</code> builder is used to switch the coroutine's context. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Dispatchers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">IO</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Perform asynchronous operation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">delay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token label symbol" style="color:#36acaa">@withContext</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Data fetched"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>withContext</code> builder to switch the coroutine's context to the IO dispatcher before performing an asynchronous operation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutine-scope">Coroutine Scope<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutine-scope" class="hash-link" aria-label="Direct link to Coroutine Scope" title="Direct link to Coroutine Scope" translate="no">​</a></h3>
<p>Coroutine scope is used to define the lifetime of a coroutine. It ensures that all coroutines started within the scope are completed before the scope is completed. Coroutine scope is typically defined using the <code>coroutineScope</code> builder. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> coroutineScope </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>coroutineScope</code> builder to define the scope of the coroutine.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="dispatchers">Dispatchers<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#dispatchers" class="hash-link" aria-label="Direct link to Dispatchers" title="Direct link to Dispatchers" translate="no">​</a></h3>
<p>Dispatchers are used to specify the execution context of a coroutine. There are several dispatchers available in Kotlin, including <code>Dispatchers.Default</code>, <code>Dispatchers.IO</code>, and <code>Dispatchers.Main</code>. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Dispatchers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">IO</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Perform asynchronous operation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">delay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token label symbol" style="color:#36acaa">@withContext</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Data fetched"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>Dispatchers.IO</code> dispatcher to perform an asynchronous operation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="cancellation-and-timeouts">Cancellation and Timeouts<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#cancellation-and-timeouts" class="hash-link" aria-label="Direct link to Cancellation and Timeouts" title="Direct link to Cancellation and Timeouts" translate="no">​</a></h3>
<p>Coroutines can be cancelled using the <code>cancel</code> function. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> job </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">isActive</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">job</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">cancel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we start a coroutine and cancel it using the <code>cancel</code> function.</p>
<p>Timeouts can be set on coroutines using the <code>withTimeout</code> builder. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withTimeout</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we set a timeout of 1 second on the coroutine using the <code>withTimeout</code> builder.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutine-context">Coroutine Context<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutine-context" class="hash-link" aria-label="Direct link to Coroutine Context" title="Direct link to Coroutine Context" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutine-context-and-dispatchers">Coroutine Context and Dispatchers<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutine-context-and-dispatchers" class="hash-link" aria-label="Direct link to Coroutine Context and Dispatchers" title="Direct link to Coroutine Context and Dispatchers" translate="no">​</a></h3>
<p>Coroutine context is a set of key-value pairs that provide additional information about a coroutine. Dispatchers are one of the key-value pairs in the coroutine context and are used to specify the execution context of a coroutine. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> coroutineContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">CoroutineName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"MyCoroutine"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> Dispatchers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">IO</span><br></span></code></pre></div></div>
<p>In this example, we create a coroutine context with a name and the IO dispatcher.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutine-name">Coroutine Name<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutine-name" class="hash-link" aria-label="Direct link to Coroutine Name" title="Direct link to Coroutine Name" translate="no">​</a></h3>
<p>Coroutine name is a key-value pair in the coroutine context that provides a name for the coroutine. It is useful for debugging purposes. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> coroutineContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">CoroutineName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"MyCoroutine"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> Dispatchers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">IO</span><br></span></code></pre></div></div>
<p>In this example, we create a coroutine context with a name.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutineexceptionhandler">CoroutineExceptionHandler<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutineexceptionhandler" class="hash-link" aria-label="Direct link to CoroutineExceptionHandler" title="Direct link to CoroutineExceptionHandler" translate="no">​</a></h3>
<p>Coroutine exception handler is a key-value pair in the coroutine context that handles uncaught exceptions in coroutines. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> coroutineContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> CoroutineExceptionHandler </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> coroutineContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> throwable </span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Handle exception</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we create a coroutine context with an exception handler.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutine-builders-1">Coroutine Builders<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutine-builders-1" class="hash-link" aria-label="Direct link to Coroutine Builders" title="Direct link to Coroutine Builders" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="launch">launch<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#launch" class="hash-link" aria-label="Direct link to launch" title="Direct link to launch" translate="no">​</a></h3>
<p>The <code>launch</code> builder is used to start a coroutine that does not return a result. It returns a <code>Job</code> object that represents the coroutine. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> job </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">job</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>launch</code> builder to start a coroutine and use the <code>join</code> function to wait for the coroutine to complete.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="async">async<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#async" class="hash-link" aria-label="Direct link to async" title="Direct link to async" translate="no">​</a></h3>
<p>The <code>async</code> builder is used to start a coroutine that returns a result. It returns a <code>Deferred</code> object that represents the result of the coroutine. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> deferredResult </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token label symbol" style="color:#36acaa">@async</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Result"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> deferredResult</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">await</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>async</code> builder to start a coroutine and use the <code>await</code> function to get the result of the coroutine.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="runblocking">runBlocking<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#runblocking" class="hash-link" aria-label="Direct link to runBlocking" title="Direct link to runBlocking" translate="no">​</a></h3>
<p>The <code>runBlocking</code> builder is used to start a coroutine and block the current thread until the coroutine is completed. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token plain">runBlocking </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>runBlocking</code> builder to start a coroutine and block the main thread until the coroutine is completed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="withcontext">withContext<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#withcontext" class="hash-link" aria-label="Direct link to withContext" title="Direct link to withContext" translate="no">​</a></h3>
<p>The <code>withContext</code> builder is used to switch the coroutine's context. It suspends the current coroutine and resumes it in a different context. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Dispatchers</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">IO</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Perform asynchronous operation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">delay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token label symbol" style="color:#36acaa">@withContext</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Data fetched"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we use the <code>withContext</code> builder to switch the coroutine's context to the IO dispatcher before performing an asynchronous operation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="cancellation-and-timeouts-1">Cancellation and Timeouts<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#cancellation-and-timeouts-1" class="hash-link" aria-label="Direct link to Cancellation and Timeouts" title="Direct link to Cancellation and Timeouts" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="cancellation-basics">Cancellation Basics<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#cancellation-basics" class="hash-link" aria-label="Direct link to Cancellation Basics" title="Direct link to Cancellation Basics" translate="no">​</a></h3>
<p>Coroutines can be cancelled using the <code>cancel</code> function. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> job </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">isActive</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">job</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">cancel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we start a coroutine and cancel it using the <code>cancel</code> function.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="timeouts">Timeouts<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#timeouts" class="hash-link" aria-label="Direct link to Timeouts" title="Direct link to Timeouts" translate="no">​</a></h3>
<p>Timeouts can be set on coroutines using the <code>withTimeout</code> builder. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withTimeout</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we set a timeout of 1 second on the coroutine using the <code>withTimeout</code> builder.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="exception-handling">Exception Handling<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#exception-handling" class="hash-link" aria-label="Direct link to Exception Handling" title="Direct link to Exception Handling" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-exceptions-in-coroutines">Handling Exceptions in Coroutines<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#handling-exceptions-in-coroutines" class="hash-link" aria-label="Direct link to Handling Exceptions in Coroutines" title="Direct link to Handling Exceptions in Coroutines" translate="no">​</a></h3>
<p>Exceptions thrown in coroutines can be handled using the <code>try-catch</code> block. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> job </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">try</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">e</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Exception</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Handle exception</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">job</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we use a <code>try-catch</code> block to handle exceptions thrown in the coroutine.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="supervisorjob">SupervisorJob<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#supervisorjob" class="hash-link" aria-label="Direct link to SupervisorJob" title="Direct link to SupervisorJob" translate="no">​</a></h3>
<p>The <code>SupervisorJob</code> is a special kind of job that allows child coroutines to fail independently of their parent. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> parentJob </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">SupervisorJob</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> childJob </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">parentJob</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">parentJob</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">cancel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we create a <code>SupervisorJob</code> and use it as the parent job for a child coroutine. The child coroutine can fail without affecting the parent job.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="coroutineexceptionhandler-1">CoroutineExceptionHandler<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#coroutineexceptionhandler-1" class="hash-link" aria-label="Direct link to CoroutineExceptionHandler" title="Direct link to CoroutineExceptionHandler" translate="no">​</a></h3>
<p>Coroutine exception handler is a key-value pair in the coroutine context that handles uncaught exceptions in coroutines. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> coroutineContext </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> CoroutineExceptionHandler </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> coroutineContext</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> throwable </span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Handle exception</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> job </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">coroutineContext</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Coroutine code</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">job</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we create a coroutine context with an exception handler and use it when launching the coroutine.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="advanced-topics">Advanced Topics<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#advanced-topics" class="hash-link" aria-label="Direct link to Advanced Topics" title="Direct link to Advanced Topics" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="channels">Channels<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#channels" class="hash-link" aria-label="Direct link to Channels" title="Direct link to Channels" translate="no">​</a></h3>
<p>Channels are a way to communicate between coroutines. They provide a flow of data that can be sent and received asynchronously. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> channel </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> Channel</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Int</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> sender </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">delay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        channel</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">send</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> receiver </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">value </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> channel</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Process value</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">sender</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">receiver</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we create a channel and use two coroutines to send and receive data through the channel.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="flow">Flow<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#flow" class="hash-link" aria-label="Direct link to Flow" title="Direct link to Flow" translate="no">​</a></h3>
<p>Flow is a new way of handling streams of data in Kotlin. It is a type-safe and asynchronous alternative to channels. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchNumbers</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Flow</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Int</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> flow </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token operator" style="color:#393A34">..</span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">delay</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">emit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> job </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">fetchNumbers</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">onEach</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> value </span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token comment" style="color:#999988;font-style:italic">// Process value</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">collect</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">job</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this example, we define a flow that emits numbers from 1 to 10 with a delay of 1 second. We then use the <code>collect</code> function to collect and process the emitted values.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="shared-mutable-state-and-concurrency">Shared Mutable State and Concurrency<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#shared-mutable-state-and-concurrency" class="hash-link" aria-label="Direct link to Shared Mutable State and Concurrency" title="Direct link to Shared Mutable State and Concurrency" translate="no">​</a></h3>
<p>Coroutines provide built-in support for concurrency and shared mutable state. They offer a way to safely update shared mutable state using atomic operations and thread-safe data structures. Here's an example:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> counter </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">AtomicInteger</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> coroutines </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">List</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    GlobalScope</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">launch</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">repeat</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            counter</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">incrementAndGet</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">runBlocking </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    coroutines</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">forEach</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> it</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">counter</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we create multiple coroutines that increment a counter variable. We use an <code>AtomicInteger</code> to safely update the counter and ensure that the final result is correct.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/exploring-kotlin-coroutines-beginners-guide#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we have explored Kotlin Coroutines and covered the basic concepts, such as suspend functions, coroutine builders, and dispatchers. We have also delved into more advanced topics like exception handling, channels, and shared mutable state. Kotlin Coroutines provide a powerful and efficient way to write asynchronous code in Kotlin. By using coroutines, you can make your code more readable, concise, and maintainable.</p>]]></content:encoded>
            <category>Asynchronous Programming</category>
            <category>Beginner's Guide</category>
            <category>Coroutines</category>
            <category>Kotlin</category>
        </item>
        <item>
            <title><![CDATA[Kotlin Multiplatform: Building Apps for iOS and Android]]></title>
            <link>https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android</link>
            <guid>https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android</guid>
            <pubDate>Tue, 23 Jun 2026 09:00:00 GMT</pubDate>
            <description><![CDATA[Use Kotlin Multiplatform to share domain and data logic while choosing shared or native UI based on product and team constraints.]]></description>
            <content:encoded><![CDATA[<p>Use Kotlin Multiplatform to share domain and data logic while choosing shared or native UI based on product and team constraints. This revised guide emphasizes supported APIs, production tradeoffs, and an upgrade-friendly path without tying the advice to a calendar year.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="kotlin multiplatform mobile building apps ios android" src="https://dopebase.com/assets/images/01-cover3-d06e0ac2-348f3f7d3144250416c76d3389739a61.jpg" width="1100" height="732" class="img_Denh"></p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="modern-implementation-baseline">Modern implementation baseline<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#modern-implementation-baseline" class="hash-link" aria-label="Direct link to Modern implementation baseline" title="Direct link to Modern implementation baseline" translate="no">​</a></h2>
<p>Use Kotlin Multiplatform to share domain and data logic while choosing shared or native UI based on product and team constraints.</p>
<p>Use modern Kotlin language features, structured concurrency, lifecycle-aware state, and explicit boundaries between UI, domain, and data layers. For Android UI, prefer Compose unless an existing View-based surface has a clear reason to remain.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="recommended-approach">Recommended approach<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#recommended-approach" class="hash-link" aria-label="Direct link to Recommended approach" title="Direct link to Recommended approach" translate="no">​</a></h3>
<ul>
<li class="">Start with a small shared module and explicit interfaces.</li>
<li class="">Keep platform capabilities behind expect/actual or injected adapters.</li>
<li class="">Design Swift-facing APIs deliberately and test both targets.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="production-checklist">Production checklist<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#production-checklist" class="hash-link" aria-label="Direct link to Production checklist" title="Direct link to Production checklist" translate="no">​</a></h3>
<ul>
<li class="">Pin compatible Kotlin, Gradle, and Android plugin versions.</li>
<li class="">Test cancellation, process recreation, offline behavior, and error recovery.</li>
<li class="">Keep platform-specific code behind small interfaces.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="authoritative-references">Authoritative references<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#authoritative-references" class="hash-link" aria-label="Direct link to Authoritative references" title="Direct link to Authoritative references" translate="no">​</a></h3>
<ul>
<li class=""><a href="https://kotlinlang.org/docs/home.html" target="_blank" rel="noopener noreferrer" class="">Kotlin documentation</a></li>
<li class=""><a href="https://kotlinlang.org/docs/coroutines-guide.html" target="_blank" rel="noopener noreferrer" class="">Kotlin coroutines</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="introduction">Introduction<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="what-is-kotlin-multiplatform-kmp">What is Kotlin Multiplatform (KMP)?<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#what-is-kotlin-multiplatform-kmp" class="hash-link" aria-label="Direct link to What is Kotlin Multiplatform (KMP)?" title="Direct link to What is Kotlin Multiplatform (KMP)?" translate="no">​</a></h3>
<p>Kotlin Multiplatform (KMP) is a framework that enables developers to write shared code in Kotlin and use it across multiple platforms, including iOS and Android. With KMP, developers can save time and effort by reusing code and business logic between different mobile platforms, reducing the need for separate codebases. KMP provides a seamless integration between Kotlin and native platform-specific code, allowing developers to leverage the full power of each platform while maintaining code consistency.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="advantages-of-using-kmp">Advantages of using KMP<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#advantages-of-using-kmp" class="hash-link" aria-label="Direct link to Advantages of using KMP" title="Direct link to Advantages of using KMP" translate="no">​</a></h3>
<p>There are several advantages to using Kotlin Multiplatform for building mobile apps:</p>
<ol>
<li class="">
<p>Code Reusability: KMP allows developers to write shared code in Kotlin that can be used across multiple platforms, eliminating the need for separate codebases for iOS and Android. This significantly reduces development time and effort.</p>
</li>
<li class="">
<p>Native Performance: KMP provides a seamless integration between Kotlin and native platform-specific code, allowing developers to leverage the performance and capabilities of each platform. This ensures that the apps developed with KMP have native-like performance and user experience.</p>
</li>
<li class="">
<p>Easy Maintenance: With KMP, developers can maintain a single codebase for both iOS and Android, reducing the complexity and effort required for maintenance. Changes and updates can be implemented once and applied to both platforms simultaneously.</p>
</li>
<li class="">
<p>Community Support: Kotlin Multiplatform is backed by JetBrains, the creators of Kotlin, and has a vibrant and growing community of developers. This ensures that developers have access to resources, libraries, and support when building apps with KMP.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="comparison-with-other-cross-platform-frameworks">Comparison with other cross-platform frameworks<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#comparison-with-other-cross-platform-frameworks" class="hash-link" aria-label="Direct link to Comparison with other cross-platform frameworks" title="Direct link to Comparison with other cross-platform frameworks" translate="no">​</a></h3>
<p>Kotlin Multiplatform offers several advantages over other cross-platform frameworks like React Native, Flutter, and .NET MAUI:</p>
<ul>
<li class="">
<p><strong>React Native</strong>: While React Native also allows code sharing between iOS and Android, it uses JavaScript, which can lead to performance and integration issues. KMP, on the other hand, uses Kotlin, a statically-typed language that seamlessly integrates with native platform-specific code.</p>
</li>
<li class="">
<p><strong>Flutter</strong>: Flutter uses its own UI framework, which requires learning a new set of widgets and UI concepts. KMP, on the other hand, allows developers to build the UI using the native platform-specific UI frameworks, such as SwiftUI for iOS and Jetpack Compose for Android.</p>
</li>
<li class="">
<p><strong>.NET MAUI</strong>: .NET MAUI fits teams invested in C# and the Microsoft ecosystem, while Kotlin Multiplatform fits teams that want Kotlin-based shared logic and direct access to native platform APIs.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="setting-up-kmp">Setting Up KMP<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#setting-up-kmp" class="hash-link" aria-label="Direct link to Setting Up KMP" title="Direct link to Setting Up KMP" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="installing-kotlin-and-kmp-plugin">Installing Kotlin and KMP plugin<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#installing-kotlin-and-kmp-plugin" class="hash-link" aria-label="Direct link to Installing Kotlin and KMP plugin" title="Direct link to Installing Kotlin and KMP plugin" translate="no">​</a></h3>
<p>Before getting started with KMP, you will need to install Kotlin and the KMP plugin in your development environment. Follow the steps below to set up your environment:</p>
<ol>
<li class="">
<p>Install Kotlin: Kotlin can be installed using the Kotlin command-line compiler (kotlinc) or by installing the Kotlin plugin for your IDE. Visit the official Kotlin website for detailed installation instructions.</p>
</li>
<li class="">
<p>Install KMP Plugin: Install the KMP plugin for your IDE. The plugin provides support for creating and managing KMP projects. Consult the documentation of your IDE for instructions on installing plugins.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-a-new-kmp-project">Creating a new KMP project<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#creating-a-new-kmp-project" class="hash-link" aria-label="Direct link to Creating a new KMP project" title="Direct link to Creating a new KMP project" translate="no">​</a></h3>
<p>Once you have installed Kotlin and the KMP plugin, you can create a new KMP project. Follow the steps below to create a new KMP project:</p>
<ol>
<li class="">
<p>Open your IDE and select the option to create a new project.</p>
</li>
<li class="">
<p>Choose the Kotlin Multiplatform template and provide a name for your project.</p>
</li>
<li class="">
<p>Configure the project settings, such as the project location and platform-specific configurations.</p>
</li>
<li class="">
<p>Click "Finish" to create the project.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="configuring-shared-and-platform-specific-code">Configuring shared and platform-specific code<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#configuring-shared-and-platform-specific-code" class="hash-link" aria-label="Direct link to Configuring shared and platform-specific code" title="Direct link to Configuring shared and platform-specific code" translate="no">​</a></h3>
<p>After creating the project, you will have a shared module that contains the shared code and platform-specific modules for iOS and Android. The shared module is where you will write the shared business logic, while the platform-specific modules are where you will write code specific to each platform.</p>
<p>To configure the shared and platform-specific code, follow these steps:</p>
<ol>
<li class="">
<p>Open the project structure or settings in your IDE.</p>
</li>
<li class="">
<p>Navigate to the module settings and select the shared module.</p>
</li>
<li class="">
<p>Add the desired platform-specific modules as dependencies to the shared module.</p>
</li>
<li class="">
<p>Configure the build settings for each module to include the shared code.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="developing-for-ios">Developing for iOS<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#developing-for-ios" class="hash-link" aria-label="Direct link to Developing for iOS" title="Direct link to Developing for iOS" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-ios-specific-ui">Creating iOS-specific UI<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#creating-ios-specific-ui" class="hash-link" aria-label="Direct link to Creating iOS-specific UI" title="Direct link to Creating iOS-specific UI" translate="no">​</a></h3>
<p>To create iOS-specific UI in your KMP project, you can use SwiftUI, Apple's declarative UI framework. SwiftUI allows you to define the UI using a concise and expressive syntax. Here's an example of creating a simple SwiftUI view in your KMP project:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> SwiftUI</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> ContentView</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> View </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> some View </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">Text</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"Hello, iOS!"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">font</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">largeTitle</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">foregroundColor</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">blue</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">struct ContentView_Previews</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> PreviewProvider </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    static </span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> previews</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> some View </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">ContentView</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we define a <code>ContentView</code> class that conforms to the <code>View</code> protocol. The <code>body</code> property defines the UI of the view, which consists of a <code>Text</code> element displaying the text "Hello, iOS!". We also set the font size to <code>.largeTitle</code> and the text color to <code>.blue</code>.</p>
<p>The <code>ContentView_Previews</code> struct provides a preview of the view, allowing you to see how it will look in different environments.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="accessing-ios-frameworks-and-apis">Accessing iOS frameworks and APIs<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#accessing-ios-frameworks-and-apis" class="hash-link" aria-label="Direct link to Accessing iOS frameworks and APIs" title="Direct link to Accessing iOS frameworks and APIs" translate="no">​</a></h3>
<p>KMP provides seamless integration with iOS frameworks and APIs, allowing you to access platform-specific functionality in your shared code. To access iOS frameworks and APIs, you can use the <code>expect</code> and <code>actual</code> declarations.</p>
<p>Here's an example of accessing the <code>UIKit</code> framework in your shared code:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">expect</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> UIApplication </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">openURL</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> NSURL</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> UIApplication </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">openURL</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> NSURL</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Call the iOS-specific implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        UIApplication</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">shared</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">openURL</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we declare an <code>UIApplication</code> class with an <code>openURL</code> function using the <code>expect</code> keyword. This declares the function signature in the shared code.</p>
<p>In the <code>actual</code> implementation, we provide the platform-specific implementation for iOS using the <code>actual</code> keyword. In this case, we call the <code>openURL</code> function of the <code>UIApplication</code> singleton.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-and-debugging-on-ios-devices">Testing and debugging on iOS devices<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#testing-and-debugging-on-ios-devices" class="hash-link" aria-label="Direct link to Testing and debugging on iOS devices" title="Direct link to Testing and debugging on iOS devices" translate="no">​</a></h3>
<p>To test and debug your KMP app on iOS devices, you can use the Xcode IDE. Follow these steps to test and debug your app on an iOS device:</p>
<ol>
<li class="">
<p>Connect your iOS device to your computer using a USB cable.</p>
</li>
<li class="">
<p>Open the Xcode project for the iOS module of your KMP project.</p>
</li>
<li class="">
<p>Select your iOS device as the target device in Xcode.</p>
</li>
<li class="">
<p>Build and run the app on your iOS device.</p>
</li>
</ol>
<p>You can use the Xcode debugger to set breakpoints, inspect variables, and step through your code for debugging purposes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="developing-for-android">Developing for Android<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#developing-for-android" class="hash-link" aria-label="Direct link to Developing for Android" title="Direct link to Developing for Android" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="creating-android-specific-ui">Creating Android-specific UI<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#creating-android-specific-ui" class="hash-link" aria-label="Direct link to Creating Android-specific UI" title="Direct link to Creating Android-specific UI" translate="no">​</a></h3>
<p>To create Android-specific UI in your KMP project, you can use Jetpack Compose, Google's modern UI toolkit for building native Android apps. Jetpack Compose allows you to define the UI using a declarative syntax. Here's an example of creating a simple Jetpack Compose UI in your KMP project:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">compose</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">foundation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Text</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">compose</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">foundation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">layout</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Column</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">compose</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">material</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">MaterialTheme</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">compose</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">runtime</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Composable</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">compose</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ui</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">platform</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">setContent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">compose</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ui</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">tooling</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">preview</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Preview</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token annotation builtin">@Composable</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">ContentView</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    MaterialTheme </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        Column </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token function" style="color:#d73a49">Text</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">text </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string-literal singleline string" style="color:#e3116c">"Hello, Android!"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> style </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> MaterialTheme</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">typography</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">h1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token annotation builtin">@Preview</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token annotation builtin">@Composable</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">ContentViewPreview</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">ContentView</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we define a <code>ContentView</code> function using the <code>@Composable</code> annotation. The function defines the UI of the view using Jetpack Compose components. In this case, we have a <code>Text</code> component displaying the text "Hello, Android!" with a heading style.</p>
<p>The <code>ContentViewPreview</code> function provides a preview of the view using the <code>@Preview</code> annotation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="accessing-android-frameworks-and-apis">Accessing Android frameworks and APIs<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#accessing-android-frameworks-and-apis" class="hash-link" aria-label="Direct link to Accessing Android frameworks and APIs" title="Direct link to Accessing Android frameworks and APIs" translate="no">​</a></h3>
<p>KMP allows you to access Android frameworks and APIs in your shared code using the <code>expect</code> and <code>actual</code> declarations. Here's an example of accessing the <code>SharedPreferences</code> API in your shared code:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">expect</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> SharedPreferences </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> defaultValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token operator" style="color:#393A34">?</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">putString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> SharedPreferences </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">getString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> defaultValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Call the Android-specific implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> PreferenceManager</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getDefaultSharedPreferences</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> defaultValue</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">putString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Call the Android-specific implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        PreferenceManager</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getDefaultSharedPreferences</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">edit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">putString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">apply</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we declare a <code>SharedPreferences</code> class with <code>getString</code> and <code>putString</code> functions using the <code>expect</code> keyword. This declares the function signatures in the shared code.</p>
<p>In the <code>actual</code> implementation, we provide the platform-specific implementation for Android using the <code>actual</code> keyword. In this case, we call the corresponding <code>SharedPreferences</code> methods using the <code>PreferenceManager</code> class.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="testing-and-debugging-on-android-devices">Testing and debugging on Android devices<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#testing-and-debugging-on-android-devices" class="hash-link" aria-label="Direct link to Testing and debugging on Android devices" title="Direct link to Testing and debugging on Android devices" translate="no">​</a></h3>
<p>To test and debug your KMP app on Android devices, you can use Android Studio. Follow these steps to test and debug your app on an Android device:</p>
<ol>
<li class="">
<p>Connect your Android device to your computer using a USB cable.</p>
</li>
<li class="">
<p>Open the Android module of your KMP project in Android Studio.</p>
</li>
<li class="">
<p>Select your Android device as the target device in the device selector.</p>
</li>
<li class="">
<p>Build and run the app on your Android device.</p>
</li>
</ol>
<p>You can use the Android Studio debugger to set breakpoints, inspect variables, and step through your code for debugging purposes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="sharing-code">Sharing Code<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#sharing-code" class="hash-link" aria-label="Direct link to Sharing Code" title="Direct link to Sharing Code" translate="no">​</a></h2>
<p>One of the key benefits of Kotlin Multiplatform is the ability to share code between different platforms. In this section, we will explore how to write shared business logic, share data models and networking code, and handle platform-specific dependencies.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="writing-shared-business-logic">Writing shared business logic<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#writing-shared-business-logic" class="hash-link" aria-label="Direct link to Writing shared business logic" title="Direct link to Writing shared business logic" translate="no">​</a></h3>
<p>To write shared business logic in your KMP project, you can create shared Kotlin classes and functions that can be used by both iOS and Android. Here's an example of a shared <code>Calculator</code> class that performs basic arithmetic operations:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Calculator </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">a</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> a </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">subtract</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">a</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Int </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> a </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we define a <code>Calculator</code> class with <code>add</code> and <code>subtract</code> functions that perform addition and subtraction operations. This class can be used by both iOS and Android code.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="sharing-data-models-and-networking-code">Sharing data models and networking code<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#sharing-data-models-and-networking-code" class="hash-link" aria-label="Direct link to Sharing data models and networking code" title="Direct link to Sharing data models and networking code" translate="no">​</a></h3>
<p>KMP allows you to share data models and networking code between iOS and Android. Here's an example of a shared <code>User</code> data class and a shared networking function that fetches user data:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">data</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">User</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">expect</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> User</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">suspend</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetchUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> User </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Perform the networking request and parse the response</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> httpClient</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-literal singleline string" style="color:#e3116c">"https://api.example.com/users/</span><span class="token string-literal singleline interpolation interpolation-punctuation punctuation" style="color:#393A34">$</span><span class="token string-literal singleline interpolation expression">id</span><span class="token string-literal singleline string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toUser</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we declare a <code>User</code> data class using the <code>data class</code> keyword. This class represents a user object with <code>id</code>, <code>name</code>, and <code>email</code> properties.</p>
<p>We also declare a <code>fetchUser</code> function with the <code>expect</code> keyword. This function fetches user data from a remote API and returns a <code>User</code> object.</p>
<p>In the <code>actual</code> implementation, we provide the platform-specific implementation for iOS and Android. In this case, we use the <code>httpClient</code> library to make the network request and parse the response.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="handling-platform-specific-dependencies">Handling platform-specific dependencies<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#handling-platform-specific-dependencies" class="hash-link" aria-label="Direct link to Handling platform-specific dependencies" title="Direct link to Handling platform-specific dependencies" translate="no">​</a></h3>
<p>KMP allows you to handle platform-specific dependencies by using the <code>expect</code> and <code>actual</code> declarations. Here's an example of handling a platform-specific database dependency:</p>
<div class="language-kotlin codeBlockContainer_RFY4 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_MLxb"><pre tabindex="0" class="prism-code language-kotlin codeBlock_O8hZ thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AO9E"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">expect</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Database </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">saveData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">data</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> Database </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">actual</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">fun</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">saveData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">data</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> String</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Call the platform-specific database implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        iOSDatabase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">saveData</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>In this example, we declare a <code>Database</code> class with a <code>saveData</code> function using the <code>expect</code> keyword. This declares the function signature in the shared code.</p>
<p>In the <code>actual</code> implementation, we provide the platform-specific implementation for iOS and Android. In this case, we call the <code>saveData</code> function of the <code>iOSDatabase</code> singleton.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="building-and-deploying">Building and Deploying<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#building-and-deploying" class="hash-link" aria-label="Direct link to Building and Deploying" title="Direct link to Building and Deploying" translate="no">​</a></h2>
<p>Once you have developed your KMP app for iOS and Android, you can build and deploy it to the respective app stores. This section will cover the process of building the iOS and Android apps and publishing them to the App Store and Google Play.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="building-the-ios-and-android-apps">Building the iOS and Android apps<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#building-the-ios-and-android-apps" class="hash-link" aria-label="Direct link to Building the iOS and Android apps" title="Direct link to Building the iOS and Android apps" translate="no">​</a></h3>
<p>To build the iOS app, follow these steps:</p>
<ol>
<li class="">
<p>Open the Xcode project for the iOS module of your KMP project.</p>
</li>
<li class="">
<p>Select the target device and build configuration.</p>
</li>
<li class="">
<p>Click the "Build" button to build the app.</p>
</li>
</ol>
<p>To build the Android app, follow these steps:</p>
<ol>
<li class="">
<p>Open the Android module of your KMP project in Android Studio.</p>
</li>
<li class="">
<p>Select the target device and build configuration.</p>
</li>
<li class="">
<p>Click the "Build" button to build the app.</p>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="publishing-to-the-app-store-and-google-play">Publishing to the App Store and Google Play<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#publishing-to-the-app-store-and-google-play" class="hash-link" aria-label="Direct link to Publishing to the App Store and Google Play" title="Direct link to Publishing to the App Store and Google Play" translate="no">​</a></h3>
<p>To publish your KMP app to the App Store and Google Play, follow the respective guidelines and processes provided by Apple and Google. You will need to create developer accounts, prepare the app for release, and submit it for review.</p>
<p>Ensure that you follow the platform-specific guidelines and requirements for app submission, including providing appropriate app descriptions, icons, screenshots, and compliance with store policies.</p>
<h3 class="anchor anchorTargetStickyNavbar_Jy_3" id="continuous-integration-and-delivery">Continuous integration and delivery<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#continuous-integration-and-delivery" class="hash-link" aria-label="Direct link to Continuous integration and delivery" title="Direct link to Continuous integration and delivery" translate="no">​</a></h3>
<p>To automate the build and deployment process, you can set up continuous integration and delivery (CI/CD) pipelines using tools like Jenkins, Travis CI, or GitHub Actions. These tools allow you to automatically build, test, and deploy your KMP app whenever changes are pushed to the repository.</p>
<p>By setting up CI/CD pipelines, you can ensure that your app is continuously integrated, tested, and deployed, reducing the manual effort required for building and deploying the app.</p>
<h2 class="anchor anchorTargetStickyNavbar_Jy_3" id="conclusion">Conclusion<a href="https://dopebase.com/blog/kotlin-multiplatform-mobile-building-apps-ios-android#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this tutorial, we explored Kotlin Multiplatform (KMP) and its capabilities for building mobile apps for iOS and Android. We covered the advantages of using KMP, the setup process, developing for iOS and Android, sharing code, and building and deploying the apps.</p>
<p>With KMP, developers can leverage the power of Kotlin and native platform-specific code to build high-performance and maintainable mobile apps. The ability to share code and business logic between iOS and Android significantly reduces development time and effort, while the seamless integration with platform-specific frameworks and APIs ensures a native-like user experience.</p>
<p>Kotlin Multiplatform is a powerful tool for software developers looking to streamline the mobile app development process and maximize code reuse. By adopting KMP, developers can build cross-platform apps that are efficient, performant, and maintainable.</p>]]></content:encoded>
            <category>Android</category>
            <category>Cross-Platform</category>
            <category>iOS</category>
            <category>KMM</category>
            <category>Kotlin</category>
            <category>Kotlin Multiplatform</category>
            <category>Mobile Development</category>
        </item>
    </channel>
</rss>