<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://react-navigation-docs.netlify.app/blog</id>
    <title>React Navigation Blog</title>
    <updated>2026-03-10T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://react-navigation-docs.netlify.app/blog"/>
    <subtitle>React Navigation Blog</subtitle>
    <icon>https://react-navigation-docs.netlify.app/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[React Navigation 8.0 - March Progress Report]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress"/>
        <updated>2026-03-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've been busy since the first alpha release of React Navigation 8.0. Our main focuses have been improving the DX around deep linking and TypeScript, and using modern features and patterns such as React.Activity and other React features such as Suspense, React Native features as PlatformColor, validation with Standard Schema etc.]]></summary>
        <content type="html"><![CDATA[<p>We've been busy since the <a class="" href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha">first alpha release of React Navigation 8.0</a>. Our main focuses have been improving the DX around deep linking and TypeScript, and using modern features and patterns such as <a href="https://react.dev/reference/react/Activity" target="_blank" rel="noopener noreferrer" class=""><code>React.Activity</code></a> and other React features such as <a href="https://react.dev/reference/react/Suspense" target="_blank" rel="noopener noreferrer" class=""><code>Suspense</code></a>, React Native features as <a href="https://reactnative.dev/docs/platformcolor" target="_blank" rel="noopener noreferrer" class=""><code>PlatformColor</code></a>, validation with <a href="https://standardschema.dev/" target="_blank" rel="noopener noreferrer" class="">Standard Schema</a> etc.</p>
<p>This post covers the features and improvements that landed since the first alpha release back in December 2025.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="minimum-requirements">Minimum requirements<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#minimum-requirements" class="hash-link" aria-label="Direct link to Minimum requirements" title="Direct link to Minimum requirements" translate="no">​</a></h2>
<p>In order to use the latest React features such as <a href="https://react.dev/reference/react/Activity" target="_blank" rel="noopener noreferrer" class=""><code>Activity</code></a>, <a href="https://react.dev/reference/react/use" target="_blank" rel="noopener noreferrer" class=""><code>use</code></a> etc., React Navigation 8 requires React 19 or later. This means:</p>
<ul>
<li class=""><a href="https://reactnative.dev/blog/2025/12/10/react-native-0.83" target="_blank" rel="noopener noreferrer" class="">React Native 0.83</a> or later</li>
<li class=""><a href="https://expo.dev/changelog/sdk-55" target="_blank" rel="noopener noreferrer" class="">Expo SDK 55</a> or later</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-inactivebehavior-option-for-all-navigators">New <code>inactiveBehavior</code> option for all navigators<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#new-inactivebehavior-option-for-all-navigators" class="hash-link" aria-label="Direct link to new-inactivebehavior-option-for-all-navigators" title="Direct link to new-inactivebehavior-option-for-all-navigators" translate="no">​</a></h3>
<p>Unlike Web routing libraries, React Navigation keeps unfocused screens mounted to preserve local state and enable smooth transitions - matching native app behavior. The downside is higher memory usage.</p>
<p>Previously, <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a> helped by detaching inactive screens (<code>detachInactiveScreens</code> in supported navigators) from the native view hierarchy. However, the integration was complex and added maintenance burden. So we're working on alternative approaches.</p>
<p>We have added a new <code>inactiveBehavior</code> option to all navigators that gives you control over how inactive screens are handled. Currently it supports the following values:</p>
<ul>
<li class=""><code>pause</code> - inactive screens are rendered, but effects are cleaned up using <a href="https://react.dev/reference/react/Activity" target="_blank" rel="noopener noreferrer" class=""><code>React.Activity</code></a> (default)</li>
<li class=""><code>unmount</code> - inactive screens are unmounted and remounted when they become active again (only available in <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/native-stack-navigator">Native Stack</a> and <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/stack-navigator">JS Stack</a>)</li>
<li class=""><code>none</code> - inactive screens are kept mounted as normal</li>
</ul>
<p>Any subscriptions, timers etc. are cleaned up for paused screens, which would avoid re-rendering paused inactive screens unnecessarily.</p>
<p>Example:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screenOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">inactiveBehavior</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'pause'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/navigation-lifecycle#inactive-screens">navigation lifecycle documentation</a> for more details.</p>
<p>If you have specific use cases or feedback on this API, please let us know on <a href="https://github.com/react-navigation/react-navigation/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub Discussions</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="deep-links-enabled-by-default">Deep links enabled by default<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#deep-links-enabled-by-default" class="hash-link" aria-label="Direct link to Deep links enabled by default" title="Direct link to Deep links enabled by default" translate="no">​</a></h3>
<p>Previously, deep links were needed to be explicitly enabled by setting <code>linking.enabled</code> to <code>true</code> or <code>auto</code>, or by passing a <code>linking</code> prop. This was because users needed to specify at least the <code>prefixes</code> array, which was necessary to support environments such as <a href="https://expo.dev/" target="_blank" rel="noopener noreferrer" class="">Expo</a> which had a special URL prefix. However, this is no longer the case.</p>
<p>So deep linking is now enabled by default when using static configuration without needing to pass any <code>linking</code> related options. Paths are automatically generated based on screen names (converting <code>PascalCase</code> to <code>kebab-case</code>), and custom patterns and parsing logic can be added on a per-screen basis as needed.</p>
<p>If you don't want to enable deep linking, you can still opt out:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Navigation</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">enabled</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><br></span></code></pre></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/configuring-links">configuring links documentation</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="support-for-standard-schema-for-linking">Support for Standard Schema for <code>linking</code><a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#support-for-standard-schema-for-linking" class="hash-link" aria-label="Direct link to support-for-standard-schema-for-linking" title="Direct link to support-for-standard-schema-for-linking" translate="no">​</a></h3>
<p>As part of our effort to improve type safety, we have added support for using schemas from a <a href="https://standardschema.dev/" target="_blank" rel="noopener noreferrer" class="">Standard Schema</a> compatible library such as <a href="https://zod.dev/" target="_blank" rel="noopener noreferrer" class="">Zod</a>, <a href="https://valibot.dev/" target="_blank" rel="noopener noreferrer" class="">Valibot</a> or <a href="https://arktype.io/" target="_blank" rel="noopener noreferrer" class="">ArkType</a> in the <code>parse</code> property of linking config.</p>
<p>Example with Zod:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> z </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'zod'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">RootStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">path</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'user/:id'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">parse</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">id</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> z</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">coerce</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">number</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Compared to the parse functions, schemas provide a few advantages:</p>
<ul>
<li class=""><strong>Support for validation and fallback</strong>: A parse function only parses the param. A schema can also validate the param. If the validation fails, the URL won't match the current screen and React Navigation will try the next matching config. Schemas are also called with <code>undefined</code> when a query param is missing, which lets them provide a fallback, while parse functions are not called when a query param is missing.</li>
<li class=""><strong>Better Query Param handling with TypeScript</strong>: When using <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/static-configuration">Static Configuration</a>, query params (e.g. <code>?foo=bar</code>) are always inferred as optional with <code>parse</code> functions. With schemas, you can specify whether a query param is required (e.g. <code>z.string()</code>) or optional (e.g. <code>z.string().optional()</code>).</li>
</ul>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/configuring-links#using-standard-schema">configuring links guide</a> and <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/typescript#parse-function-vs-standard-schema">typescript guide</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sf-symbols-and-material-symbols">SF Symbols and Material Symbols<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#sf-symbols-and-material-symbols" class="hash-link" aria-label="Direct link to SF Symbols and Material Symbols" title="Direct link to SF Symbols and Material Symbols" translate="no">​</a></h3>
<p>We've added first-class support for <a href="https://developer.apple.com/sf-symbols/" target="_blank" rel="noopener noreferrer" class="">SF Symbols</a> on iOS and <a href="https://fonts.google.com/icons" target="_blank" rel="noopener noreferrer" class="">Material Symbols</a> on Android throughout the library.</p>
<p>A new <code>SFSymbol</code> component renders a native SF Symbol on iOS:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SFSymbol</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">HeartIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">SFSymbol</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"heart.fill"</span><span class="token plain"> color</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"tomato"</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<video playsinline="" autoplay="" muted="" loop="" style="width:400px;aspect-ratio:0.8"><source src="/assets/icons/sf-symbol.mp4"></video>
<p>And a <code>MaterialSymbol</code> component renders a native Material Symbol on Android:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">MaterialSymbol</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">HeartIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">MaterialSymbol</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"favorite"</span><span class="token plain"> color</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"tomato"</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<video playsinline="" autoplay="" muted="" loop="" style="width:400px;aspect-ratio:0.8"><source src="/assets/icons/material-symbol.mp4"></video>
<p>These icons are used across various navigators for tab bar icons, header icons, and more.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/icons">icons documentation</a> for more details and examples.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="material-themes">Material themes<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#material-themes" class="hash-link" aria-label="Direct link to Material themes" title="Direct link to Material themes" translate="no">​</a></h3>
<p>In React Navigation 8, we added support for React Native's <a href="https://reactnative.dev/docs/platformcolor" target="_blank" rel="noopener noreferrer" class=""><code>PlatformColor</code></a> and <a href="https://reactnative.dev/docs/dynamiccolorios" target="_blank" rel="noopener noreferrer" class=""><code>DynamicColorIOS</code></a> APIs across our components and theming system.</p>
<p>Based on this, we now export 2 new themes based on Material Design 3 on Android:</p>
<ul>
<li class=""><code>MaterialLightTheme</code></li>
<li class=""><code>MaterialDarkTheme</code></li>
</ul>
<p>These themes support Android 14+ and use dynamic color scheme based on user's preferences or wallpaper. Under the hood, they use <code>PlatformColor</code> to reference system colors such as <code>@android:color/system_primary_light</code>, <code>@android:color/system_on_surface_light</code> etc.</p>
<p>When Material themes are used, some navigators such as <code>@react-navigation/bottom-tabs</code> will also adjust their colors to match the Material Design 3 guidelines.</p>
<div class="image-grid" style="--img-width:360px"><p><img decoding="async" loading="lazy" alt="Material light theme screenshot 1" src="https://react-navigation-docs.netlify.app/assets/images/material-light-1-86fbe846b6a94b3a5b287f9f9803b48a.png" width="1080" height="1695" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Material light theme screenshot 2" src="https://react-navigation-docs.netlify.app/assets/images/material-light-2-49ff26bf50c04d17410fc8c8e18b4d51.png" width="1080" height="1695" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Material dark theme screenshot 1" src="https://react-navigation-docs.netlify.app/assets/images/material-dark-1-ebda2adf49f0d4b475880fac54725f6a.png" width="1080" height="1695" class="img_ev3q">
<img decoding="async" loading="lazy" alt="Material dark theme screenshot 2" src="https://react-navigation-docs.netlify.app/assets/images/material-dark-2-0dc65a9582051d5beafd99148c35baa6.png" width="1080" height="1695" class="img_ev3q"></p></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/themes">theming documentation</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="unstable_cornerinset-for-better-ipados-windowed-mode-support"><code>UNSTABLE_CornerInset</code> for better iPadOS windowed mode support<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#unstable_cornerinset-for-better-ipados-windowed-mode-support" class="hash-link" aria-label="Direct link to unstable_cornerinset-for-better-ipados-windowed-mode-support" title="Direct link to unstable_cornerinset-for-better-ipados-windowed-mode-support" translate="no">​</a></h3>
<p>We have refactored a lot of our components in React Navigation 8 to minimize the reliance on window dimensions in order to support responsive layouts such as iPadOS windowed mode. Continuing with this effort, we have added a new <code>UNSTABLE_CornerInset</code> component.</p>
<p>Previously content such as custom header's back button would get overlapped by the traffic light buttons (close, minimize, maximize) when using the app in iPadOS windowed mode. The <code>UNSTABLE_CornerInset</code> component is intended to solve this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">UNSTABLE_CornerInset</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">MyHeader</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">View</span><span class="token plain"> style</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">flexDirection</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'row'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">alignItems</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">UNSTABLE_CornerInset</span><span class="token plain"> direction</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"horizontal"</span><span class="token plain"> edge</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"left"</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* rest of your content */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">View</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>The component takes the width or height of the traffic light area based on the content direction and the edge of the screen where you want to apply the inset on iPadOS. It renders a plain <code>View</code> on other platforms.</p>
<video playsinline="" autoplay="" muted="" loop="" style="width:500px;aspect-ratio:1.25"><source src="/assets/blog/8.x/corner-inset.mp4"></video>
<p>We internally use this in headers, drawer content etc., but you can also use it in your own components if it makes sense for your layout.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="updated-behavior-for-getid-in-stack-navigators">Updated behavior for <code>getId</code> in stack navigators<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#updated-behavior-for-getid-in-stack-navigators" class="hash-link" aria-label="Direct link to updated-behavior-for-getid-in-stack-navigators" title="Direct link to updated-behavior-for-getid-in-stack-navigators" translate="no">​</a></h3>
<p>Previously, the ID returned by <code>getId</code> was treated as a unique identifier. When using <code>navigate</code> or <code>push</code> to go to a route with an ID that already existed in the stack, the stack would rearrange to bring the existing route to the front. However, this resulted in broken behavior with Native Stack Navigator and hard to debug issues.</p>
<p>We have changed the behavior of <code>getId</code> to treat it more like the route name - it will match routes by ID without rearranging the stack:</p>
<ul>
<li class="">If you're already on a screen with the same ID, it will update its params without pushing a new screen.</li>
<li class="">If you're on a different screen, it will push the new screen onto the stack.</li>
<li class="">If you navigate to a route with an existing ID and <code>pop: true</code>, it will pop back to the matching route instead of moving it to the top.</li>
</ul>
<p>While this is a breaking change, the previous behavior resulted in broken behavior with Native Stack Navigator. So we need to change it to avoid confusion and hard to debug issues.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/upgrading-from-7.x">upgrade guide</a> for migration details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="accessibility-improvements-on-the-web">Accessibility improvements on the Web<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#accessibility-improvements-on-the-web" class="hash-link" aria-label="Direct link to Accessibility improvements on the Web" title="Direct link to Accessibility improvements on the Web" translate="no">​</a></h3>
<p>Previously, unfocused screens on the Web were hidden from assistive technologies using <code>aria-hidden</code>, but they could still receive focus and interaction unless hidden with <code>display: none</code>, which wasn't possible in all cases.</p>
<p>Now we have a <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert" target="_blank" rel="noopener noreferrer" class=""><code>inert</code></a> attribute available on the Web that can be used to make content non-interactive and hidden from assistive technologies without affecting its visibility. We now use it across all navigators on the Web to improve accessibility.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigation-events-and-deep-links-in-devtools">Navigation events and deep links in Devtools<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#navigation-events-and-deep-links-in-devtools" class="hash-link" aria-label="Direct link to Navigation events and deep links in Devtools" title="Direct link to Navigation events and deep links in Devtools" translate="no">​</a></h3>
<p>The <code>useLogger</code> hook from <code>@react-navigation/devtools</code> previously only showed navigation actions. It now shows the following additional information:</p>
<ul>
<li class="">Deep links received by React Navigation</li>
<li class="">Events emitted by navigators (e.g. <code>tabPress</code>)</li>
</ul>
<img src="https://react-navigation-docs.netlify.app/assets/blog/8.x/devtools-logger.png" style="width:425px">
<p>This should help with debugging navigation issues and understanding when deep links are being handled.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/devtools#uselogger">Devtools documentation</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="llm-friendly-documentation">LLM friendly documentation<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#llm-friendly-documentation" class="hash-link" aria-label="Direct link to LLM friendly documentation" title="Direct link to LLM friendly documentation" translate="no">​</a></h3>
<p>We have made many improvements to our documentation site to make it more LLM friendly:</p>
<ul>
<li class="">Documentation pages now have a markdown version by appending <code>.md</code> to the path (e.g. <a href="https://reactnavigation.org/docs/8.x/getting-started.md" target="_blank" rel="noopener noreferrer" class="">https://reactnavigation.org/docs/8.x/getting-started.md</a>)</li>
<li class="">If a client sends an <code>Accept: text/markdown</code> header, the markdown version of the page will be returned instead of HTML</li>
<li class="">Documentation pages now have a "Copy page" button to copy the content of the current page as markdown, or open in ChatGPT and Claude</li>
<li class="">A list of all documentation pages and full documentation content is available at <a href="https://react-navigation-docs.netlify.app/llms.txt" target="_blank" rel="noopener noreferrer" class=""><code>llms.txt</code></a> and <a href="https://react-navigation-docs.netlify.app/llms-full.txt" target="_blank" rel="noopener noreferrer" class=""><code>llms-full.txt</code></a> respectively</li>
</ul>
<p>Hopefully these will make it easier to use React Navigation with LLMs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="plans-for-the-future">Plans for the future<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#plans-for-the-future" class="hash-link" aria-label="Direct link to Plans for the future" title="Direct link to Plans for the future" translate="no">​</a></h2>
<p>The <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a> library is being rewritten with a new implementation for Native Stack. We plan to use it for <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/native-stack-navigator"><code>@react-navigation/native-stack</code></a> and will try our best to keep the same API as much as possible.</p>
<p>We aim to release a beta version once we have the new <code>react-native-screens</code> integration ready, which is a major piece of work that will take some time. Follow us on <a href="https://x.com/reactnavigation" target="_blank" rel="noopener noreferrer" class="">X</a> to stay updated on the progress.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out">Try it out<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#try-it-out" class="hash-link" aria-label="Direct link to Try it out" title="Direct link to Try it out" translate="no">​</a></h2>
<p>If you'd like to try the latest changes, install from the <code>next</code> tag:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/npm.svg" alt="">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/yarn.svg" alt="">yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/pnpm.svg" alt="">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/bun.svg" alt="">bun</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">bun </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div></div></div>
<p>If you encounter any issues or have feedback, please let us know on <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">GitHub Issues</a> or <a href="https://github.com/react-navigation/react-navigation/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub Discussions</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsor-us">Sponsor us<a href="https://react-navigation-docs.netlify.app/blog/2026/03/10/react-navigation-8.0-march-progress#sponsor-us" class="hash-link" aria-label="Direct link to Sponsor us" title="Direct link to Sponsor us" translate="no">​</a></h2>
<p>If React Navigation helps you deliver value to your customers, it'd mean a lot if you could sponsor us. Sponsorships help us move faster toward building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<p>👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 8.0 Alpha]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha"/>
        <updated>2025-12-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're excited to announce the first alpha release of React Navigation 8.0.]]></summary>
        <content type="html"><![CDATA[<p>We're excited to announce the first alpha release of React Navigation 8.0.</p>
<p>For this release, we tried to minimize large breaking changes when possible, and focused on improvements such as better TypeScript types, native bottom tabs as the default, and various other new features. There are many more improvements planned for the final release.</p>
<p>You can read the full list of changes in the <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/upgrading-from-7.x">upgrade guide</a>. Here are some highlights:</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-bottom-tabs-by-default">Native Bottom Tabs by default<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#native-bottom-tabs-by-default" class="hash-link" aria-label="Direct link to Native Bottom Tabs by default" title="Direct link to Native Bottom Tabs by default" translate="no">​</a></h3>
<p>The Bottom Tab Navigator now uses native primitives by default on iOS and Android based on <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a>.</p>
<p>This lets us provide a native look by default, such as the new liquid glass effect on iOS 26.</p>
<video playsinline="" autoplay="" muted="" loop="" style="width:500px;aspect-ratio:3"><source src="/assets/blog/8.x/native-bottom-tabs-ios.mp4"></video>
<video playsinline="" autoplay="" muted="" loop="" style="width:500px;aspect-ratio:3"><source src="/assets/blog/8.x/native-bottom-tabs-android.mp4"></video>
<p>We made the native implementation the default because we believe that the default experience should be as close to platform conventions as possible.</p>
<p>However, we still include a custom JS-based implementation to avoid breaking existing apps and support other platforms such as Web. You can switch to the JS implementation by passing the <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/bottom-tab-navigator#implementation"><code>implementation</code></a> prop as <code>custom</code> to the navigator.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/bottom-tab-navigator">Bottom Tab Navigator docs</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="access-to-route-navigation-and-state-for-any-parent-screen">Access to <code>route</code>, <code>navigation</code>, and state for any parent screen<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#access-to-route-navigation-and-state-for-any-parent-screen" class="hash-link" aria-label="Direct link to access-to-route-navigation-and-state-for-any-parent-screen" title="Direct link to access-to-route-navigation-and-state-for-any-parent-screen" translate="no">​</a></h3>
<p>One of the commonly requested features has been for screens to be able to access the params for parent screens, but this had a few problems:</p>
<ul>
<li class="">Passing down params to child screens may lead to unnecessary re-renders when the parent params change, even when they are not needed by the child screen.</li>
<li class="">Since the param types are defined by the screen itself, having additional parent params would not be compatible with the existing type system.</li>
</ul>
<p>It was necessary to manually set up React Context to pass down parent params, which was cumbersome.</p>
<p>The new screen name parameter in <code>useRoute</code> solves these problems. Now, you can access the parent route and its params directly by specifying the screen name:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> route </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Params for the 'Profile' screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token console class-name" style="color:hsl(26, 100%, 29%)">console</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">log</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">params</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Similarly, you can get the <code>navigation</code> object for any parent screen by specifying the screen name in <code>useNavigation</code>:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> navigation </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useNavigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Navigation object for the 'Profile' screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token console class-name" style="color:hsl(26, 100%, 29%)">console</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">log</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>And you can get the navigation state for any parent screen by specifying the screen name in <code>useNavigationState</code>:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> focusedRoute </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useNavigationState</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Focused route for the navigator that contains the 'Profile' screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token console class-name" style="color:hsl(26, 100%, 29%)">console</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">log</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">focusedRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/use-route"><code>useRoute</code></a>, <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/use-navigation"><code>useNavigation</code></a>, and <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/use-navigation-state"><code>useNavigationState</code></a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="better-typescript-types-for-static-configuration">Better TypeScript types for static configuration<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#better-typescript-types-for-static-configuration" class="hash-link" aria-label="Direct link to Better TypeScript types for static configuration" title="Direct link to Better TypeScript types for static configuration" translate="no">​</a></h3>
<p>One of the goals of React Navigation has always been to work well with TypeScript. React Navigation 5 was built from the ground up with TypeScript support, even though it required a lot of boilerplate, the basic blocks were there. In React Navigation 7, we introduced a static API to reduce boilerplate with automatic type inference. However, it still required manual type annotations in some cases and didn't express React Navigation's full capabilities. So we had more work to do to get to a point that we're happy with.</p>
<p>In this release, we've built upon the static API and reworked the type inference to solve many of these issues.</p>
<p>Hooks like <code>useNavigation</code>, <code>useRoute</code>, and <code>useNavigationState</code> now automatically infer types based on the provided screen name:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> navigation </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useNavigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// navigation is correctly typed as StackNavigationProp&lt;RootStackParamList, 'Profile'&gt;</span><br></span></code></pre></div></div>
<p>The <code>navigation</code> object will now have proper types based on navigator nesting, and will include navigator-specific methods such as <code>openDrawer</code> for drawer navigators or <code>push</code> for stack navigators without requiring manual type annotations.</p>
<video playsinline="" autoplay="" muted="" loop="" data-landscape="true"><source src="/assets/blog/8.x/use-navigation.mp4"></video>
<p>The <code>useRoute</code> hook now returns a union of all route types in the project when no screen name is provided, so it can be used in reusable components while still providing type safety.</p>
<p>It will return the appropriate route type when a screen name is specified:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> route </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// route is correctly typed as RouteProp&lt;RootStackParamList, 'Profile'&gt;</span><br></span></code></pre></div></div>
<video playsinline="" autoplay="" muted="" loop="" data-landscape="true"><source src="/assets/blog/8.x/use-route.mp4"></video>
<p>Similarly, the <code>useNavigationState</code> hook will infer the correct state type for the navigator that contains the specified screen:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> focusedRoute </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useNavigationState</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// state is correctly typed as StackNavigationState&lt;RootStackParamList&gt;</span><br></span></code></pre></div></div>
<p>In addition, previously, the type of the <code>route</code> object couldn't be inferred in screen callbacks, listener callbacks, etc. This made it difficult to use route params in these callbacks.</p>
<p>The new <code>createXScreen</code> helper functions address this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token function-variable function" style="color:hsl(256, 54%, 50%)">options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter"> route </span><span class="token parameter punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> userId </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">params</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">userId</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(139, 66%, 32%)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(212, 13%, 16%)">${</span><span class="token template-string interpolation" style="color:hsl(139, 66%, 32%)">userId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token template-string string" style="color:hsl(139, 66%, 32%)">'s profile</span><span class="token template-string template-punctuation string" style="color:hsl(139, 66%, 32%)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Here, the type of <code>route.params</code> is correctly inferred based on the type annotation of <code>ProfileScreen</code>.</p>
<p>Not only that, but it also infers types based on the path pattern in the <code>linking</code> configuration specified for the screen:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">path</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'profile/:userId'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">parse</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token function-variable function" style="color:hsl(256, 54%, 50%)">userId</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">userId</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:hsl(26, 100%, 29%)">Number</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">userId</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>In this case, React Navigation can automatically infer that <code>userId</code> is a param of type <code>number</code> based on <code>:userId</code> in the path pattern and the return type of <code>userId</code> in the <code>parse</code> config. This is inspired by how <a href="https://tanstack.com/router/latest/docs/framework/solid/decisions-on-dx#declaring-the-router-instance-for-type-inference" target="_blank" rel="noopener noreferrer" class="">TanStack Router infers types based on the URL pattern</a>.</p>
<video playsinline="" autoplay="" muted="" loop="" data-landscape="true"><source src="/assets/blog/8.x/params-types.mp4"></video>
<p>Each navigator exports its own helper function, e.g. <code>createNativeStackScreen</code> for Native Stack Navigator, <code>createBottomTabScreen</code> for Bottom Tab Navigator, <code>createDrawerScreen</code> for Drawer Navigator etc.</p>
<p>With all of these improvements, it's technically possible to write an app without any manual type annotations for React Navigation, since we can infer the route type from path pattern and param parsing logic, and return the correct type for <code>navigation</code> object, <code>route</code> object, and navigation state based on the screen name and navigation structure automatically.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/typescript">TypeScript docs</a> and <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/static-configuration">Static configuration docs</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="push-history-entries-without-pushing-new-screens">Push history entries without pushing new screens<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#push-history-entries-without-pushing-new-screens" class="hash-link" aria-label="Direct link to Push history entries without pushing new screens" title="Direct link to Push history entries without pushing new screens" translate="no">​</a></h3>
<p>Traditionally, the only way to add a new entry to the history stack was by pushing a new screen. But it's not always desirable, as it adds an entirely new instance of the screen component and shows transition animations.</p>
<p>For many scenarios, we may want to add a new history entry without pushing a new screen. Such as:</p>
<ul>
<li class="">A product listing page with filters, where changing filters should create a new history entry so that users can go back to previous filter states.</li>
<li class="">A screen with a custom modal component, where the modal is not a separate screen in the navigator, but its state should be reflected in the URL and history.</li>
</ul>
<p>The new <code>pushParams</code> API makes this possible. You can now push an entry to the history stack by adding new params without needing to push a new screen. Then the back button will update the screen to the previous params instead of going back a screen.</p>
<video playsinline="" autoplay="" muted="" loop="" data-landscape="true" style="--ifm-global-radius:10px"><source src="/assets/actions/push-params.mp4"></video>
<p>This is especially important on the Web, where users expect that changing certain UI states should create a new history entry, so that they can use the browser back and forward buttons to navigate through these states.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/navigation-object#pushparams"><code>pushParams</code> docs</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="platformcolor-dynamiccolorios-and-css-custom-properties-in-theme"><code>PlatformColor</code>, <code>DynamicColorIOS</code> and CSS custom properties in theme<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#platformcolor-dynamiccolorios-and-css-custom-properties-in-theme" class="hash-link" aria-label="Direct link to platformcolor-dynamiccolorios-and-css-custom-properties-in-theme" title="Direct link to platformcolor-dynamiccolorios-and-css-custom-properties-in-theme" translate="no">​</a></h3>
<p>Previously, React Navigation's theming system only supported string color values. In this release, we've added support for platform-specific dynamic colors such as <code>PlatformColor</code> and <code>DynamicColorIOS</code> on native, as well as CSS custom properties on the Web.</p>
<p>This makes it easier to use system colors as well as share colors across native components and React Navigation components.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">MyTheme</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">DefaultTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">colors</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Platform</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">select</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token function-variable function" style="color:hsl(256, 54%, 50%)">ios</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">primary</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">PlatformColor</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'systemRed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">background</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">PlatformColor</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'systemGroupedBackground'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token function-variable function" style="color:hsl(256, 54%, 50%)">android</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">primary</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">PlatformColor</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'@android:color/system_primary_light'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token function-variable function" style="color:hsl(256, 54%, 50%)">default</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token maybe-class-name">DefaultTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">colors</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>However, there's one limitation: with string colors, React Navigation can automatically adjust colors in some scenarios (e.g. adjust the text color based on background color), which is not possible with dynamic colors. So it will fallback to pre-defined colors according to the theme in these cases.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/themes">Themes docs</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="deep-link-to-screens-behind-conditional-rendering">Deep link to screens behind conditional rendering<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#deep-link-to-screens-behind-conditional-rendering" class="hash-link" aria-label="Direct link to Deep link to screens behind conditional rendering" title="Direct link to Deep link to screens behind conditional rendering" translate="no">​</a></h3>
<p>Conditionally defining screens is a common pattern for <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/auth-flow">handling authentication flows</a>. But if a user opened a deep link to a screen that's behind a condition like auth, previously it would just get ignored.</p>
<p>It wasn't ideal, and <a href="https://www.callstack.com/blog/deep-links-with-authentication-in-react-navigation" target="_blank" rel="noopener noreferrer" class="">working around this limitation</a> was not straightforward either. We tried to solve this in React Navigation 7, but the approach we had in mind was problematic, so we decided to revisit it later.</p>
<p>Now we have a better approach in React Navigation 8 which is also straightforward to use:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Static</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Dynamic</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">MyStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">routeNamesChangeBehavior</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'lastUnhandled'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">MyStack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      routeNamesChangeBehavior</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"lastUnhandled"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* ... */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div></div></div></div>
<video playsinline="" autoplay="" muted="" loop="" style="width:500px;aspect-ratio:1"><source src="/assets/deep-linking/deep-link-auth.mp4"></video>
<p>The navigator will remember the last unhandled action (such as an unhandled deep link) if <code>routeNamesChangeBehavior: 'lastUnhandled'</code> is specified. When the list of route names changes (e.g. new screens become available), it will try to handle the action again. See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/navigator#route-names-change-behavior"><code>routeNamesChangeBehavior</code> docs</a> for more details.</p>
<p>We also backported this feature to React Navigation 7 with an <code>UNSTABLE_</code> prefix as <a class="" href="https://react-navigation-docs.netlify.app/docs/auth-flow#handling-deep-links-after-auth"><code>UNSTABLE_routeNamesChangeBehavior</code></a>, so you can try it out in your existing apps without needing to upgrade.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="persistor-for-state-persistence">Persistor for state persistence<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#persistor-for-state-persistence" class="hash-link" aria-label="Direct link to Persistor for state persistence" title="Direct link to Persistor for state persistence" translate="no">​</a></h3>
<p>One of the very nice features is persisting navigation state across app restarts. It can be used to improve UX by making sure the user doesn't lose their place in the app.</p>
<p>What I really like is to use it during development. Fast Refresh is great, but full reload's can't always be avoided. Being put back to where I was before is really nice to continue working - even more so if my work involved multiple screens in a flow.</p>
<p>While it was possible to implement this using <code>onStateChange</code> and <code>initialState</code>, it required some boilerplate code and handling additional cases, e.g. don't restore state if there is a deep link.</p>
<p>To make this simpler, we've added a <code>persistor</code> prop which takes care of these details:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Static</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Dynamic</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Navigation</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      persistor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">async</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">persist</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">await</span><span class="token plain"> </span><span class="token maybe-class-name">AsyncStorage</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">setItem</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">            </span><span class="token string" style="color:hsl(139, 66%, 32%)">'NAVIGATION_STATE_V1'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">            </span><span class="token known-class-name class-name" style="color:hsl(26, 100%, 29%)">JSON</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">stringify</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">async</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">restore</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> state </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">await</span><span class="token plain"> </span><span class="token maybe-class-name">AsyncStorage</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">getItem</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'NAVIGATION_STATE_V1'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> state </span><span class="token operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:hsl(26, 100%, 29%)">JSON</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">parse</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      persistor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">async</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">persist</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">await</span><span class="token plain"> </span><span class="token maybe-class-name">AsyncStorage</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">setItem</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">            </span><span class="token string" style="color:hsl(139, 66%, 32%)">'NAVIGATION_STATE_V1'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">            </span><span class="token known-class-name class-name" style="color:hsl(26, 100%, 29%)">JSON</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">stringify</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">async</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">restore</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> state </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">await</span><span class="token plain"> </span><span class="token maybe-class-name">AsyncStorage</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">getItem</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'NAVIGATION_STATE_V1'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> state </span><span class="token operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token plain"> </span><span class="token known-class-name class-name" style="color:hsl(26, 100%, 29%)">JSON</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">parse</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* ... */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div></div></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/8.x/state-persistence">State persistence docs</a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="plans-for-the-final-release">Plans for the final release<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#plans-for-the-final-release" class="hash-link" aria-label="Direct link to Plans for the final release" title="Direct link to Plans for the final release" translate="no">​</a></h2>
<p>This is just the first alpha release of React Navigation 8.0. Some of the plans for the final release include:</p>
<ul>
<li class="">API to handle insets for navigation elements such as headers and tab bars</li>
<li class="">Show Navigation events in React Navigation Devtools</li>
<li class="">Improve accessibility on Web by utilizing <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert" target="_blank" rel="noopener noreferrer" class=""><code>inert</code></a></li>
<li class="">Integrate <a href="https://react.dev/reference/react/Activity" target="_blank" rel="noopener noreferrer" class=""><code>Activity</code></a> for inactive screens</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out">Try it out<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#try-it-out" class="hash-link" aria-label="Direct link to Try it out" title="Direct link to Try it out" translate="no">​</a></h2>
<p>If you'd like to try it out, add <code>@next</code> to the package you're installing. For example:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/npm.svg" alt="">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/yarn.svg" alt="">yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/pnpm.svg" alt="">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/bun.svg" alt="">bun</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">bun </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div></div></div>
<p>Your feedback is very important to us to ensure a smooth final release. If you encounter any issues or have any feedback or suggestions, please let us know on <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">GitHub issues</a> or our <a href="https://github.com/react-navigation/react-navigation/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub Discussions forum</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="special-thanks">Special thanks<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#special-thanks" class="hash-link" aria-label="Direct link to Special thanks" title="Direct link to Special thanks" translate="no">​</a></h2>
<p>React Navigation 8 would not have been possible without our amazing contributors.</p>
<p>Thanks a lot to <a href="https://x.com/kafara_kacper" target="_blank" rel="noopener noreferrer" class="">Kacper Kafara</a>, <a href="https://github.com/kligarski" target="_blank" rel="noopener noreferrer" class="">Krzysztof Ligarski</a>, <a href="https://github.com/t0maboro" target="_blank" rel="noopener noreferrer" class="">Tomasz Boroń</a>, <a href="https://github.com/kmichalikk" target="_blank" rel="noopener noreferrer" class="">Konrad Michalik</a> from the <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class="">React Native Screens</a> team at <a href="https://swmansion.com/" target="_blank" rel="noopener noreferrer" class="">Software Mansion</a>, as well as <a href="https://x.com/mosdnk" target="_blank" rel="noopener noreferrer" class="">Michał Osadnik</a>, <a href="https://github.com/okwasniewski" target="_blank" rel="noopener noreferrer" class="">Oskar Kwaśniewski</a> and many others for their contributions to this release.</p>
<p>And a big thanks to <a href="https://callstack.com/" target="_blank" rel="noopener noreferrer" class="">Callstack</a> for funding the development of many of these features!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsor-us">Sponsor us<a href="https://react-navigation-docs.netlify.app/blog/2025/12/19/react-navigation-8.0-alpha#sponsor-us" class="hash-link" aria-label="Direct link to Sponsor us" title="Direct link to Sponsor us" translate="no">​</a></h2>
<p>If React Navigation helps you to deliver value to your customers, it'd mean a lot if you could sponsor us. Sponsorships will help us to move more quickly towards our goal of building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<p>👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bottom Tabs meet Native]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs"/>
        <updated>2025-01-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a guest post by Oskar Kwaśniewski, creator of react-native-bottom-tabs, a library exposing native tab primitives that integrates with React Navigation. If you like this guide, check out the react-native-bottom-tabs documentation for more!]]></summary>
        <content type="html"><![CDATA[<p>This is a guest post by Oskar Kwaśniewski, creator of <code>react-native-bottom-tabs</code>, a library exposing native tab primitives that integrates with React Navigation. If you like this guide, check out the <code>react-native-bottom-tabs</code> <a href="https://callstackincubator.github.io/react-native-bottom-tabs/" target="_blank" rel="noopener noreferrer" class="">documentation</a> for more!</p>
<p>This blog post will explain the differences between the JavaScript Bottom Tabs navigator and provide a step-by-step guide for integrating React Navigation with the Native Bottom Tabs Navigator.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>React Navigation comes with many navigators out of the box. We've got Stack, Native Stack, Drawer, and Bottom Tabs, but there were no Native Bottom Tabs until today!</p>
<p>Both Android and iOS have predefined native components for handling bottom navigation. For iOS it's SwiftUI's <code>TabView</code> component and for Android it's <code>BottomNavigationView</code>. The native approach gives us an appropriate appearance no matter the platform we are running on. Native Bottom Tabs is a navigator that wraps the native <code>TabView</code> and <code>BottomNavigationView</code> - so you can use them with React Navigation.</p>
<p>Let's dive into the details of this navigator.</p>
<p>Note: Native Bottom Tabs navigator is a standalone package, not released as part of React Navigation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview">Overview<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview" translate="no">​</a></h2>
<p>You still might be wondering the difference between <code>@react-navigation/bottom-tabs</code> and <code>react-native-bottom-tabs</code>.</p>
<p>Let's go over the main differences:</p>
<ul>
<li class="">JS Bottom Tabs recreate the UI as closely as possible while <strong>Native Bottom Tabs use native platform primitives</strong> to create the tabs. This makes your tab navigation indistinguishable from Native Apps as they use the same components under the hood.</li>
<li class="">Native Bottom Tabs <strong>adapt to interfaces of a given platform</strong> for example: tvOS and visionOS show tabs as a sidebar on iPadOS they appear at the top, while JS Bottom Tabs are always at the bottom.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="distinctive-features-of-native-bottom-tabs">Distinctive features of Native Bottom Tabs<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#distinctive-features-of-native-bottom-tabs" class="hash-link" aria-label="Direct link to Distinctive features of Native Bottom Tabs" title="Direct link to Distinctive features of Native Bottom Tabs" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="multi-platform-support">Multi-platform support<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#multi-platform-support" class="hash-link" aria-label="Direct link to Multi-platform support" title="Direct link to Multi-platform support" translate="no">​</a></h4>
<p>Native Bottom tabs adapt to the appearance of multiple platforms. You always get natively-looking tabs!</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/ios.png" alt="Native Tabs on iOS">
<p>Bottom Navigation on iOS, with native blur.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/android.png" alt="Native Tabs on Android">
<p>Bottom Navigation on Android, following Material Design 3 styling.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/ipados.png" alt="Native Tabs on iPadOS">
<p>On iPadOS tabs appear at the top with a button allowing you to go into the sidebar mode.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/visionos.png" alt="Native Tabs on visionOS">
<p>On visionOS, the tabs appear on the left side, attached outside of the window.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/tvos.png" alt="Native Tabs on tvOS">
<p>On tvOS tabs appear on the top, making navigation with the TV remote a breeze.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/macos.png" alt="Native Tabs on macOS">
<p>On macOS, tabs appear on the left side, following the design of the Finder app.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatic-scroll-to-the-top">Automatic scroll to the top<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#automatic-scroll-to-the-top" class="hash-link" aria-label="Direct link to Automatic scroll to the top" title="Direct link to Automatic scroll to the top" translate="no">​</a></h4>
<p>iOS TabView automatically scrolls to the top when ScrollView is embedded inside of it.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="automatic-pip-avoidance">Automatic PiP avoidance<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#automatic-pip-avoidance" class="hash-link" aria-label="Direct link to Automatic PiP avoidance" title="Direct link to Automatic PiP avoidance" translate="no">​</a></h4>
<p>The operating system recognizes navigation in your app making the Picture in Picture window automatically avoid bottom navigation.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="platform-specific-styling">Platform-specific styling<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#platform-specific-styling" class="hash-link" aria-label="Direct link to Platform-specific styling" title="Direct link to Platform-specific styling" translate="no">​</a></h4>
<p>For iOS bottom navigation has a built-in blur making your app stand out. For Android, you can choose between Material 2 and Material 3 and leverage Material You system styling.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="sidebar">Sidebar<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#sidebar" class="hash-link" aria-label="Direct link to Sidebar" title="Direct link to Sidebar" translate="no">​</a></h4>
<p>TabView can turn in to a side bar on tvOS, iPadOS and macOS. The <code>sidebarAdaptable</code> prop controls this.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting started<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<p>To get started follow the installation instructions in the <code>react-native-bottom-tabs</code> <a href="https://oss.callstack.com/react-native-bottom-tabs/docs/getting-started/quick-start" target="_blank" rel="noopener noreferrer" class="">documentation</a>.</p>
<p>Native Bottom Tabs Navigation resembles JavaScript Tabs API as closely as possible. Making your migration straightforward.</p>
<p>As mentioned before, Native Bottom Tabs use native primitives to create the tabs. This approach also has some downsides: Native components enforce certain constraints that we need to follow.</p>
<p>There are a few differences between the APIs worth noting. One of the biggest is how native tabs handle images. In JavaScript tabs, you can render React components as icons, in native tabs unfortunately it’s not possible. Instead, you have to provide one of the following options:</p>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">  </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Albums</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">  </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Albums</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">  </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript keyword" style="color:hsl(356, 75%, 47%)">require</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'person.png'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript comment" style="color:hsl(212, 9%, 47%);font-style:italic">// SVG is also supported</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript keyword" style="color:hsl(356, 75%, 47%)">require</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'person.svg'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript comment" style="color:hsl(212, 9%, 47%);font-style:italic">// or</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> sfSymbol</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'person'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript comment" style="color:hsl(212, 9%, 47%);font-style:italic">// You can also pass a URL</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> uri</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'https://example.com/icon.png'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">  </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><br></span></code></pre></div></div>
<p>So if you need full customizability like providing custom tab bar icons, and advanced styling that goes beyond what’s possible with native components you should use JavaScript bottom tabs.</p>
<p>On top of that, the scope of this library doesn’t include the web so for that platform, you should use JavaScript Tabs.</p>
<p>To get started you can import <code>createNativeBottomTabNavigator</code> from <code>@bottom-tabs/react-navigation</code> and use it the same way as JavaScript Bottom Tabs.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-usage">Example usage<a href="https://react-navigation-docs.netlify.app/blog/2025/01/29/using-react-navigation-with-native-bottom-tabs#example-usage" class="hash-link" aria-label="Direct link to Example usage" title="Direct link to Example usage" translate="no">​</a></h3>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createNativeBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@bottom-tabs/react-navigation'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Tabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createNativeBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">NativeBottomTabs</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tabs.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tabs.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">index</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          title</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'Home'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> uri</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'https://example.com/icon.png'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tabs.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">explore</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          title</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'Explore'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> uri</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'https://example.com/icon.png'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tabs.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<img src="https://react-navigation-docs.netlify.app/assets/blog/native-bottom-tabs/result.png" alt="Native Tabs">
<p>You can check out the project <a href="https://github.com/callstackincubator/react-native-bottom-tabs" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<p>Thanks for reading!</p>]]></content>
        <author>
            <name>Oskar Kwaśniewski</name>
        </author>
        <category label="tutorial" term="tutorial"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 7.0]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2024/11/06/react-navigation-7.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2024/11/06/react-navigation-7.0"/>
        <updated>2024-11-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The documentation is now live at reactnavigation.org, and v6 lives here.]]></summary>
        <content type="html"><![CDATA[<p>The documentation is now live at <a class="" href="https://react-navigation-docs.netlify.app/docs/getting-started">reactnavigation.org</a>, and v6 lives <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/getting-started">here</a>.</p>
<p>React Navigation 7 aims to improve the developer experience with a new static API as well as bring many new features and improvements.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2024/11/06/react-navigation-7.0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/hello-react-navigation?config=static"><strong>Static API</strong></a>: The new static API is an optional API that simplifies the configuration of navigators and makes it easier to work with TypeScript and deep linking.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/navigation-object/#preload"><strong>Preloading screens</strong></a>: Many navigators now support preloading screens prior to navigating to them. This can be useful to improve the perceived performance of the app by preloading the screens that the user is likely to navigate to next.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/navigator#layout"><strong>Layout props</strong></a>: Navigators and screens now support <code>layout</code> props to augment the navigators with additional UI and behavior.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/web-support"><strong>Improved Web integration</strong></a>: The built in navigators now have better web-support such rendering anchor tags for more elements. The <code>Link</code> and <code>useLinkProps</code> APIs have also been revamped to use screen names instead of paths.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/elements#headersearchbaroptions"><strong>Searchbar support in all navigators with header</strong></a>: All navigators with header now support a searchbar in the header. You can customize the searchbar using the <code>headerSearchBarOptions</code> option.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/devtools#uselogger"><strong>New <code>useLogger</code> devtool to replace flipper plugin</strong></a>: The <code>use logger</code> hook can show navigation actions and state in the console for debugging.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/bottom-tab-navigator#tabbarposition"><strong>Sidebar support in Bottom Tab Navigator</strong></a>: The Bottom Tab Navigator now supports showing tabs on the side by specifying <code>tabBarPosition</code> option as <code>'left'</code> or <code>'right'</code>.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/bottom-tab-navigator#animations"><strong>Animation support in Bottom Tab Navigator</strong></a>: The Bottom Tab Navigator now supports animations when switching between tabs. You can customize the animation using the <code>animation</code> option.</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/drawer-layout"><strong><code>react-native-drawer-layout</code> package</strong></a>: The drawer implementation used in <code>@react-navigation/drawer</code> is now available as a standalone package called <code>react-native-drawer-layout</code>.</li>
<li class="">Many other improvements and bug fixes.</li>
</ul>
<p>See our <a class="" href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc">blog post for the release candidate</a> for a more detailed list of highlights.</p>
<p>To see the full list of changes, check out the <a class="" href="https://react-navigation-docs.netlify.app/docs/upgrading-from-6.x">upgrade guide</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrading">Upgrading<a href="https://react-navigation-docs.netlify.app/blog/2024/11/06/react-navigation-7.0#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>In addition to the new features and improvements, React Navigation 7 also includes a number of breaking changes. We've put together a <a class="" href="https://react-navigation-docs.netlify.app/docs/upgrading-from-6.x">detailed upgrade guide</a> to help you migrate your app to the latest version.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="special-thanks">Special thanks<a href="https://react-navigation-docs.netlify.app/blog/2024/11/06/react-navigation-7.0#special-thanks" class="hash-link" aria-label="Direct link to Special thanks" title="Direct link to Special thanks" translate="no">​</a></h2>
<p>I'd like to extend a big thank you to all the contributors who helped with this release. Your contributions are what make React Navigation great.</p>
<p>I want to give a special shoutout to <a href="https://x.com/mosdnk" target="_blank" rel="noopener noreferrer" class="">Michał Osadnik</a> for working through many of the features and improvements in this release as well as providing much-needed motivation.</p>
<p>Many thanks to <a href="https://x.com/patkalinska" target="_blank" rel="noopener noreferrer" class="">Patrycja Kalińska</a> and <a href="https://github.com/AnCichocka" target="_blank" rel="noopener noreferrer" class="">Ania Cichocka</a> from <a href="https://swmansion.com/" target="_blank" rel="noopener noreferrer" class="">Software Mansion</a> for helping with the documentation.</p>
<p>I'd also like to thank <a href="https://x.com/tboba_" target="_blank" rel="noopener noreferrer" class="">Tymoteusz Boba</a>, <a href="https://x.com/maciekstosio" target="_blank" rel="noopener noreferrer" class="">Maciej Stosio</a> and <a href="https://x.com/kafara_kacper" target="_blank" rel="noopener noreferrer" class="">Kacper Kafara</a> from the <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class="">React Native Screens</a>. React Navigation wouldn't be where it is today without React Native Screens.</p>
<p>Last but not least, without dedicated time from <a href="https://callstack.com/" target="_blank" rel="noopener noreferrer" class="">Callstack</a>, it would be impossible to maintain and improve React Navigation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsor-us">Sponsor us<a href="https://react-navigation-docs.netlify.app/blog/2024/11/06/react-navigation-7.0#sponsor-us" class="hash-link" aria-label="Direct link to Sponsor us" title="Direct link to Sponsor us" translate="no">​</a></h2>
<p>If React Navigation helps you to deliver value to your customers, it'd mean a lot if you could sponsor us. Sponsorships will help us to move more quickly towards our goal of building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<p>👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 7.0 Release Candidate]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc"/>
        <updated>2024-06-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're excited to announce the release candidate of React Navigation 7.0.]]></summary>
        <content type="html"><![CDATA[<p>We're excited to announce the release candidate of React Navigation 7.0.</p>
<p>This release includes a new static API that simplifies the configuration of navigators and improves TypeScript and deep linking support. As well as various other improvements and new features.</p>
<p>You can read the full list of changes in the <a class="" href="https://react-navigation-docs.netlify.app/docs/upgrading-from-6.x">upgrade guide</a>. Here are some highlights:</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="static-api">Static API<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#static-api" class="hash-link" aria-label="Direct link to Static API" title="Direct link to Static API" translate="no">​</a></h3>
<p>The new static API is an optional API that simplifies the configuration of navigators and makes it easier to work with TypeScript and deep linking.</p>
<p>It follows the same principles as the dynamic API, but instead of defining screens using functions, you define them using a configuration object, similar to React Navigation 4:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Home</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Settings</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Settings</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>For more details and examples, check out the <a class="" href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api">introduction to the static API</a> blog post.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="preloading-screens">Preloading screens<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#preloading-screens" class="hash-link" aria-label="Direct link to Preloading screens" title="Direct link to Preloading screens" translate="no">​</a></h3>
<p>Many navigators now support preloading screens prior to navigating to them. This can be useful to improve the perceived performance of the app by preloading the screens that the user is likely to navigate to next. Preloading a screen will render it off-screen and execute its side-effects such as data fetching.</p>
<p>To preload a screen, you can use the <code>preload</code> method on the navigation object:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">preload</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Details'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">id</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">42</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sidebar-support-in-bottom-tab-navigator">Sidebar support in Bottom Tab Navigator<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#sidebar-support-in-bottom-tab-navigator" class="hash-link" aria-label="Direct link to Sidebar support in Bottom Tab Navigator" title="Direct link to Sidebar support in Bottom Tab Navigator" translate="no">​</a></h3>
<p>The Bottom Tab Navigator now supports showing tabs on the side by specifying <code>tabBarPosition</code> option as <code>'left'</code> or <code>'right'</code>. This will make it easier to build responsive UIs for where you want to show tabs on the bottom on smaller screens and switch to a sidebar on larger screens.</p>
<p><img decoding="async" loading="lazy" alt="Sidebar support in Bottom Tab Navigator" src="https://react-navigation-docs.netlify.app/assets/images/bottom-tabs-sidebar-d2e59277dcaccd8ecf82f9a2794eb863.png" width="2048" height="1536" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="animation-support-in-bottom-tab-navigator">Animation support in Bottom Tab Navigator<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#animation-support-in-bottom-tab-navigator" class="hash-link" aria-label="Direct link to Animation support in Bottom Tab Navigator" title="Direct link to Animation support in Bottom Tab Navigator" translate="no">​</a></h3>
<p>The Bottom Tab Navigator now supports animations when switching between tabs. You can customize the animation using the <code>animation</code> option.</p>
<video playsinline="" autoplay="" muted="" loop=""><source src="/assets/navigators/bottom-tabs/bottom-tabs-shift.mp4"></video>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="react-native-drawer-layout-package"><code>react-native-drawer-layout</code> package<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#react-native-drawer-layout-package" class="hash-link" aria-label="Direct link to react-native-drawer-layout-package" title="Direct link to react-native-drawer-layout-package" translate="no">​</a></h3>
<p>The drawer implementation used in <code>@react-navigation/drawer</code> is now available as a standalone package called <code>react-native-drawer-layout</code>. This makes it easier to use the drawer implementation even if you're not using React Navigation, or if you want to use it without a navigator.</p>
<p>You can install it with:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/npm.svg" alt="">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/yarn.svg" alt="">yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/pnpm.svg" alt="">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/bun.svg" alt="">bun</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> react-native-drawer-layout@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> react-native-drawer-layout@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> react-native-drawer-layout@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">bun </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> react-native-drawer-layout@next</span><br></span></code></pre></div></div></div></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/drawer-layout"><code>react-native-drawer-layout</code></a> for usage.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out">Try it out<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#try-it-out" class="hash-link" aria-label="Direct link to Try it out" title="Direct link to Try it out" translate="no">​</a></h2>
<p>If you'd like to try it out, add <code>@next</code> to the package, you're installing. For example:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/npm.svg" alt="">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/yarn.svg" alt="">yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/pnpm.svg" alt="">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/bun.svg" alt="">bun</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">bun </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/bottom-tabs@next</span><br></span></code></pre></div></div></div></div></div>
<p>This is the best time to try it out and provide feedback before the final release. If you encounter any issues or have any feedback or suggestions, please let us know on <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">GitHub issues</a> or our <a href="https://github.com/react-navigation/react-navigation/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub Discussions forum</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="special-thanks">Special thanks<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#special-thanks" class="hash-link" aria-label="Direct link to Special thanks" title="Direct link to Special thanks" translate="no">​</a></h2>
<p>I'd like to extend a big thank you to all the contributors who helped with this release. Your contributions are what make React Navigation great.</p>
<p>I want to give a special shoutout to <a href="https://x.com/mosdnk" target="_blank" rel="noopener noreferrer" class="">Michał Osadnik</a> for working through many of the features and improvements in this release as well as providing much-needed motivation.</p>
<p>Many thanks to <a href="https://x.com/patkalinska" target="_blank" rel="noopener noreferrer" class="">Patrycja Kalińska</a> from <a href="https://swmansion.com/" target="_blank" rel="noopener noreferrer" class="">Software Mansion</a> for helping with the documentation.</p>
<p>I'd also like to thank <a href="https://x.com/tboba_" target="_blank" rel="noopener noreferrer" class="">Tymoteusz Boba</a> and <a href="https://x.com/kafara_kacper" target="_blank" rel="noopener noreferrer" class="">Kacper Kafara</a> from the <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class="">React Native Screens</a>. React Navigation wouldn't be where it is today without React Native Screens.</p>
<p>Last but not least, without dedicated time from <a href="https://callstack.com/" target="_blank" rel="noopener noreferrer" class="">Callstack</a>, it would be impossible to maintain and improve React Navigation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsor-us">Sponsor us<a href="https://react-navigation-docs.netlify.app/blog/2024/06/27/react-navigation-7.0-rc#sponsor-us" class="hash-link" aria-label="Direct link to Sponsor us" title="Direct link to Sponsor us" translate="no">​</a></h2>
<p>If React Navigation helps you to deliver value to your customers, it'd mean a lot if you could sponsor us. Sponsorships will help us to move more quickly towards our goal of building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<p>👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing Static API]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api"/>
        <updated>2024-03-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Two of the major pain points of using React Navigation have been TypeScript and deep linking configuration. Due to the dynamic nature of the navigators, it is necessary to manually maintain the TypeScript and deep linking configuration to match the navigation structure. This can be error-prone and time-consuming.]]></summary>
        <content type="html"><![CDATA[<p>Two of the major pain points of using React Navigation have been TypeScript and deep linking configuration. Due to the dynamic nature of the navigators, it is necessary to manually maintain the TypeScript and deep linking configuration to match the navigation structure. This can be error-prone and time-consuming.</p>
<p>To solve this, we’re adding a new static API to React Navigation 7. It’s not the same API as React Navigation 4, but it’s similar. Many apps don’t need the features that the dynamic API provides, and they can use the simpler static API instead to simplify their codebase.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16" fill="currentColor"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The static API it’s an additional optional API. The dynamic API isn’t going away and will remain a first-class API of React Navigation. In fact, the static API is written entirely on top of the dynamic API.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview">Overview<a href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview" translate="no">​</a></h2>
<p>With the dynamic API, first, we import a function such as <code>createStackNavigator</code>, and then we use it to define screens - each screen has a <code>name</code> and a <code>component</code>:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">RootStack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Profile"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Settings"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Settings</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>The static API follows the same principles. Here we are specifying screens in a property called <code>screens</code>, the name of the screen is a key in the configuration object and the value contains the component to render:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">RootStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Home</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Settings</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Settings</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Then after writing our navigation config, we call <code>createStaticNavigation</code> and render the returned component:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Navigation</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStaticNavigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token maybe-class-name">RootStack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Navigation</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>This component is similar to <code>NavigationContainer</code> and accepts most of the props accepted by <code>NavigationContainer</code>. So this is the place where you can do things like track for screen changes, persist navigation state etc.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/static-configuration?config=static">Static API reference</a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript">TypeScript<a href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api#typescript" class="hash-link" aria-label="Direct link to TypeScript" title="Direct link to TypeScript" translate="no">​</a></h2>
<p>The typescript types can be inferred from the root navigator with the <code>StaticParamList</code> type and then they will be available anywhere you use <code>useNavigation</code>.</p>
<p>The only additional code we need to add is the code for the <code>RootParamList</code> interface:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">declare global </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  namespace </span><span class="token maybe-class-name">ReactNavigation</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">RootParamList</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">StaticParamList</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token keyword" style="color:hsl(356, 75%, 47%)">typeof</span><span class="token plain"> </span><span class="token maybe-class-name">RootStack</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/typescript?config=static">Type checking with TypeScript</a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deep-linking">Deep Linking<a href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api#deep-linking" class="hash-link" aria-label="Direct link to Deep Linking" title="Direct link to Deep Linking" translate="no">​</a></h2>
<p>There are 2 improvements to deep linking API:</p>
<ol>
<li class="">
<p>The linking configuration is now a part of the navigation configuration and can be specified next to the screen. This makes it easier to keep the linking configuration in sync with the navigation structure:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">RootStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">path</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'user/:id'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Settings</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">SettingsScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">path</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'settings'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>Paths can be generated automatically from the screen names by specifying <code>enabled: 'auto'</code>. This avoids the need to specify a path for every screen manually:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">RootStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Generated path: ''</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Home</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Generated path: 'profile'</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Generated path: 'news-feed'</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">NewsFeed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">NewsFeedScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Navigation</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStaticNavigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token maybe-class-name">RootStack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Navigation</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">prefixes</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token string" style="color:hsl(139, 66%, 32%)">'https://example.com'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'example://'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">enabled</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'auto'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Navigation</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Navigation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
</li>
</ol>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/configuring-links?config=static">Configuring links</a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authentication-flow">Authentication Flow<a href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api#authentication-flow" class="hash-link" aria-label="Direct link to Authentication Flow" title="Direct link to Authentication Flow" translate="no">​</a></h2>
<p>One of the nice things about the dynamic APIs is the declarative authentication flow. You declaratively define which screens are available for logged-in and guest users, and React Navigation would handle showing the appropriate screens automatically. To keep a similar experience, we added some dynamism to the new static API with the if property:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">RootStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createNativeStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Home</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">if</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> useIsSignedIn</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">SignIn</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">if</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> useIsSignedOut</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">SignInScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>The if property takes a hook that returns a boolean. When the hook returns true, the screen will be included in the navigation tree, and when it returns false, it won’t be included.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/auth-flow?config=static">Authentication flows</a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="interoperability">Interoperability<a href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api#interoperability" class="hash-link" aria-label="Direct link to Interoperability" title="Direct link to Interoperability" translate="no">​</a></h2>
<p>Since we have 2 different APIs in the same library, it's important that they both work together. This way you could start an app with the static API, but if you need flexibility for a specific navigator, you could use the dynamic API for that part. Or you may want to migrate to the static API to reduce the complexity, and with the interoperability, you can do that incrementally.</p>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/combine-static-with-dynamic">Combining static and dynamic APIs</a> for more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="help-us-test">Help us test<a href="https://react-navigation-docs.netlify.app/blog/2024/03/25/introducing-static-api#help-us-test" class="hash-link" aria-label="Direct link to Help us test" title="Direct link to Help us test" translate="no">​</a></h2>
<p>The Static API is currently available in React Navigation 7 alpha. You can try it out by installing the <code>next</code> tag of the React Navigation packages:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@next @react-navigation/native-stack@next</span><br></span></code></pre></div></div>
<p>In addition to the static API, React Navigation 7 also includes a lot of other improvements and new features. Make sure to go through the <a class="" href="https://react-navigation-docs.netlify.app/docs/upgrading-from-6.x">upgrade guide</a> to see all the changes.</p>
<p>We would love to get feedback from the community on how it works for you and catch any issues before the stable release. If you have any feedback or suggestions, please let us know on our <a href="https://github.com/react-navigation/react-navigation/discussions" target="_blank" rel="noopener noreferrer" class="">GitHub Discussions forum</a>. If you find any issues, please report them on our <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">GitHub issues</a>.</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 6.0]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0"/>
        <updated>2021-08-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The documentation is now live at reactnavigation.org, and v5 lives here.]]></summary>
        <content type="html"><![CDATA[<p>The documentation is now live at <a href="https://reactnavigation.org/6.x/getting-started" target="_blank" rel="noopener noreferrer" class="">reactnavigation.org</a>, and v5 lives <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/getting-started">here</a>.</p>
<p>React Navigation 6 keeps mostly the same core API as React Navigation 5, and you can think of it as further polishing what was in React Navigation 5. Let's talk about the highlights of this release in this blog post.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-flexible-navigators">More flexible navigators<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#more-flexible-navigators" class="hash-link" aria-label="Direct link to More flexible navigators" title="Direct link to More flexible navigators" translate="no">​</a></h3>
<p>Navigators accept many of their customization options as props, which means we can’t customize them based on the active screen. To make this level of control possible, we needed to move these props to options that you can configure per screen.</p>
<p>In React Navigation 6, many of these props are now screen options. The most significant changes are <code>tabBarOptions</code> and <code>drawerContentOptions</code>, which now all live on <code>options</code> instead. For example:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Before (v5)</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  tabBarOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">inactiveTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgba(255, 255, 255, 0.5)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">activeTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">style</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">position</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'absolute'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">borderTopColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgba(0, 0, 0, .2)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><br></span></code></pre></div></div>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// After (v6)</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  screenOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarInactiveTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgba(255, 255, 255, 0.5)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarActiveTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">position</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'absolute'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">borderTopColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgba(0, 0, 0, .2)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><br></span></code></pre></div></div>
<p>See <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/upgrading-from-5.x#deprecations">deprecations</a> for more details.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="elements-library">Elements library<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#elements-library" class="hash-link" aria-label="Direct link to Elements library" title="Direct link to Elements library" translate="no">​</a></h3>
<p>We extracted some of the components and helpers used across various navigators in React Navigation and published them under a new package called <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/elements"><code>@react-navigation/elements</code></a>. It can be useful if you're building your own navigator, or just want to reuse some of the components in your app.</p>
<p>Currently only a small set of components are exported, but there are more to come.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="simplified-apis-for-existing-functionality">Simplified APIs for existing functionality<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#simplified-apis-for-existing-functionality" class="hash-link" aria-label="Direct link to Simplified APIs for existing functionality" title="Direct link to Simplified APIs for existing functionality" translate="no">​</a></h3>
<p>We simplified many APIs with React Navigation 6 to address common use cases. For example:</p>
<ul>
<li class="">Single option to use a modal presentation style and transparent modal with <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/stack-navigator#presentation"><code>presentation</code></a></li>
<li class="">Custom header doesn't require setting <code>headerMode="screen"</code> manually anymore</li>
<li class="">The <code>useHeaderHeight</code> hook now ignores hidden headers and returns the height of the closest visible header in parent</li>
<li class="">New option to set a <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/bottom-tab-navigator#tabbarbackground">custom background</a> (such as <code>BlurView</code>) for tab bar without having to use a custom tab bar</li>
<li class="">New API to manage ref on the container <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/navigating-without-navigation-prop">(<code>createNavigationContainerRef</code> and <code>useNavigationContainerRef</code>)</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-group-component-for-organization">New <code>Group</code> component for organization<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#new-group-component-for-organization" class="hash-link" aria-label="Direct link to new-group-component-for-organization" title="Direct link to new-group-component-for-organization" translate="no">​</a></h3>
<p>The <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/group"><code>Group</code></a> component helps you organize screens inside your navigators and share common <code>screenOptions</code> between the <code>Group</code>s. Passing <code>screenOptions</code> to a group configures all the screens inside that group to use these options. You can override <code>Group</code> options by passing <code>options</code> to each Screen component, similar to how you can with <code>screenOptions</code> on Navigator. You can also nest <code>Group</code> components inside other <code>Group</code> components. They are lightweight and don’t render anything - like fragments, so they won’t affect performance.</p>
<p>In this code snippet, you can see that we group regular screens under one group and modal screens under another group:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Group</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">HomeScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Details"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">DetailsScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Group</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Group</span><span class="token plain"> screenOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">presentation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'modal'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"CreatePost"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">CreatePostScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Group</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="headers-by-default-in-bottom-tabs--drawer">Headers by default in Bottom Tabs &amp; Drawer<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#headers-by-default-in-bottom-tabs--drawer" class="hash-link" aria-label="Direct link to Headers by default in Bottom Tabs &amp; Drawer" title="Direct link to Headers by default in Bottom Tabs &amp; Drawer" translate="no">​</a></h3>
<p>Developers often want to show a header for screens inside of drawers and bottom tabs. To do this, we had to nest a stack navigator which provides a header, even if it was a navigator with just one screen. So we now show headers by default in screens of drawer and bottom tabs. No nesting necessary.</p>
<p>We also export a <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/elements#header"><code>Header</code></a> component in the new elements library to use anywhere in your components.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-navigation-by-default">Native navigation by default<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#native-navigation-by-default" class="hash-link" aria-label="Direct link to Native navigation by default" title="Direct link to Native navigation by default" translate="no">​</a></h3>
<p>Historically, React Navigation has been mostly JS based, with animations and gestures written in JavaScript on top of <code>react-native-gesture-handler</code>, and <code>react-native-reanimated</code> or <code>Animated</code>. While this works for a lot of apps, apps with heavy screens can suffer from poor performance, and some native features are difficult to re-create exactly (such as the large header on iOS). So, we wanted to address this by using native primitives for navigation.</p>
<p>With React Navigation 5, we introduced <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/native-stack-navigator"><code>@react-navigation/native-stack</code></a> package powered by <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a>, as well as a native backend for <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/material-top-tab-navigator"><code>@react-navigation/material-top-tabs</code></a> powered by <a href="https://github.com/callstack/react-native-pager-view" target="_blank" rel="noopener noreferrer" class=""><code>react-native-pager-view</code></a>.</p>
<p>In React Navigation 6, we made <code>@react-navigation/native-stack</code> the default choice for setting up Stack navigation. It uses <code>UINavigationController</code> on iOS and Fragments on Android to implement navigation natively. We also focused a lot on aligning the API of <code>@react-navigation/native-stack</code> with <code>@react-navigation/stack</code> so that it’ll be easier to switch between them.</p>
<blockquote>
<p>While <code>@react-navigation/native-stack</code> is now used as the default choice in the documentation, it doesn't replace <code>@react-navigation/stack</code>. Both packages are maintained and are valid options for your projects. If you're currently using <code>@react-navigation/stack</code>, you can keep using it. You don't need to move to <code>@react-navigation/native-stack</code> unless you really want to.</p>
</blockquote>
<p>Similarly, we switched <code>@react-navigation/material-top-tabs</code> to use <code>react-native-pager-view</code> by default.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="better-type-safety">Better type-safety<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#better-type-safety" class="hash-link" aria-label="Direct link to Better type-safety" title="Direct link to Better type-safety" translate="no">​</a></h3>
<p>React Navigation 5’s TypeScript support was much better than React Navigation 4; but, some things such as <code>useNavigation</code> were still untyped by default.</p>
<p>In React Navigation 6, you don’t need to annotate <code>useNavigation</code> to get autocompletion and type checking. This is possible by defining a type for the screens globally using declaration merging:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">declare global </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  namespace </span><span class="token maybe-class-name">ReactNavigation</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">RootParamList</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Home</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">userId</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> string </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">NotFound</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>You can read <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/typescript#specifying-default-types-for-usenavigation-link-ref-etc">more about it in our TypeScript docs</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="flipper-plugin">Flipper plugin<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#flipper-plugin" class="hash-link" aria-label="Direct link to Flipper plugin" title="Direct link to Flipper plugin" translate="no">​</a></h3>
<p>Our new <a href="https://fbflipper.com/" target="_blank" rel="noopener noreferrer" class="">Flipper</a> plugin includes similar functionality to the currently available Redux Devtools Extensions integration. You can see all navigation actions, and jump back and forth between earlier and new navigation states. In addition, it also includes a tab to test your linking configuration.</p>
<p>Since the dev tools is built from scratch, we’re now free to add new features to make debugging easier in future.</p>
<p>One advantage of the Flipper plugin over Redux Devtools Extension is that it doesn’t need Chrome Debugger to work. Since Chrome Debugger can sometimes affect performance and even potentially change behavior, we think this is a more reliable solution.</p>
<p><img decoding="async" loading="lazy" alt="React Navigation Logs" src="https://react-navigation-docs.netlify.app/assets/images/flipper-plugin-logs-220cf869c9f44eceb1e62f9eefbf0c7c.png" width="2188" height="1424" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="React Navigation Linking" src="https://react-navigation-docs.netlify.app/assets/images/flipper-plugin-linking-5f9ec9cba7913ada028e6314f1bef395.png" width="2188" height="1424" class="img_ev3q"></p>
<p>See the <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/devtools#useflipper">guide for setting it up</a> for more details. Note that Flipper support in Expo managed apps requires a <a href="https://docs.expo.dev/clients/introduction/" target="_blank" rel="noopener noreferrer" class="">Custom Development Client</a> and it does not work in Expo Go at the time of writing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrading">Upgrading<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>While React Navigation 6 doesn't introduce changes of the same magnitude as React Navigation 5, there are still some breaking changes. It is possible, however, to mix packages from React Navigation 5 and React Navigation 6 (with a few caveats) so that you can gradually upgrade packages.</p>
<p>See the <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/upgrading-from-5.x">upgrade guide</a> for a full list of changes and more details.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsor-us">Sponsor us<a href="https://react-navigation-docs.netlify.app/blog/2021/08/14/react-navigation-6.0#sponsor-us" class="hash-link" aria-label="Direct link to Sponsor us" title="Direct link to Sponsor us" translate="no">​</a></h2>
<p>If React Navigation helps you to deliver value to your customers, it'd awesome a lot if you could sponsor us. Sponsorships will help us to move more quickly towards our goal of building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<p>👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[On the way to React Navigation 6.0]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2021/03/12/react-navigation-6.0-next</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2021/03/12/react-navigation-6.0-next"/>
        <updated>2021-03-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're excited to announce that we finally have a prerelease version of React Navigation 6. We released React Navigation 5 more than half a year ago, and it brought a lot of new possibilities with the new dynamic API, and was met with overwhelmingly positive reaction. Since then, we've been working on incremental improvements and refinements to the library and thinking about how to make it even better. This brings us to the next major version of React Navigation.]]></summary>
        <content type="html"><![CDATA[<p>We're excited to announce that we finally have a prerelease version of React Navigation 6. We released React Navigation 5 more than half a year ago, and it brought a lot of new possibilities with the new dynamic API, and was met with overwhelmingly positive reaction. Since then, we've been working on incremental improvements and refinements to the library and thinking about how to make it even better. This brings us to the next major version of React Navigation.</p>
<p>While React Navigation 5 was complete overhaul to the API of React Navigation, React Navigation 6 keeps the same API, with some breaking changes to make things more consistent and provide more flexibility. We also tried to address some common pain points and confusions that users had.</p>
<p>We'll share few highlights of the release in this blog post. If you're looking for a detailed upgrade guide, you can find it <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/upgrading-from-5.x">here</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2021/03/12/react-navigation-6.0-next#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<ul>
<li class="">Params are now overwritten on navigation instead of merging (with option to merge them)</li>
<li class="">Modals in <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/stack-navigator">stack</a> now use the presentation style on iOS by default, and there's a new slide animation for modals on Android</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/drawer-navigator">Drawer</a> now uses a slide animation by default on iOS</li>
<li class="">Headers are now shown by default in <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/drawer-navigator">drawer</a> and <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/bottom-tab-navigator">bottom tab</a> screens, so you don't need extra stack navigators</li>
<li class="">We got rid of <code>tabBarOptions</code>, <code>drawerContentOptions</code> etc. and moved those to <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/screen-options"><code>options</code> prop on screen</a> to make it possible to configure them per screen</li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/material-top-tab-navigator">Material Top Tabs</a> now use a <code>ViewPager</code> based implementation, which means it'll provide a native experience</li>
<li class="">We now have a <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/elements">UI elements library</a> which contains various components we use in React Navigation</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out">Try it out<a href="https://react-navigation-docs.netlify.app/blog/2021/03/12/react-navigation-6.0-next#try-it-out" class="hash-link" aria-label="Direct link to Try it out" title="Direct link to Try it out" translate="no">​</a></h2>
<p>If you'd like to try it out, add <code>@^6.x</code> to the package, you're installing. For example:</p>
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/npm.svg" alt="">npm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/yarn.svg" alt="">yarn</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/pnpm.svg" alt="">pnpm</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP"><img decoding="async" loading="lazy" class="pm-icon img_ev3q" src="https://react-navigation-docs.netlify.app/assets/pm/bun.svg" alt="">bun</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> @react-navigation/native@^6.x @react-navigation/stack@^6.x</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@^6.x @react-navigation/stack@^6.x</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">pnpm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@^6.x @react-navigation/stack@^6.x</span><br></span></code></pre></div></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">bun </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> @react-navigation/native@^6.x @react-navigation/stack@^6.x</span><br></span></code></pre></div></div></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-next">What's next?<a href="https://react-navigation-docs.netlify.app/blog/2021/03/12/react-navigation-6.0-next#whats-next" class="hash-link" aria-label="Direct link to What's next?" title="Direct link to What's next?" translate="no">​</a></h2>
<p>We're planning to update our documentation to recommend <a class="" href="https://react-navigation-docs.netlify.app/docs/6.x/native-stack-navigator">native-stack</a> as the default. This will provide the best performance for people who don't need a lot of customization, while still having the option to use the JavaScript based implementation if they need it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsor-us">Sponsor us<a href="https://react-navigation-docs.netlify.app/blog/2021/03/12/react-navigation-6.0-next#sponsor-us" class="hash-link" aria-label="Direct link to Sponsor us" title="Direct link to Sponsor us" translate="no">​</a></h2>
<p>If React Navigation helps you to deliver value to your customers, it'd mean a lot if you could sponsor us. Sponsorships will help us to move more quickly towards our goal of building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<p>👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈</p>
<hr>
<p>We hope you find this release useful. Make sure to try the release out and provide feedback on what we can improve. You can open an issue in the <a href="https://github.com/react-navigation/react-navigation" target="_blank" rel="noopener noreferrer" class="">GitHub rep</a> or tweet to us <a href="https://twitter.com/reactnavigation" target="_blank" rel="noopener noreferrer" class="">@reactnavigation</a>.</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation joins GitHub Sponsors]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2020/05/19/joining-github-sponsors</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2020/05/19/joining-github-sponsors"/>
        <updated>2020-05-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We joined GitHub Sponsors - https://github.com/sponsors/react-navigation!]]></summary>
        <content type="html"><![CDATA[<p>tl;dr: We joined GitHub Sponsors, <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">click here to see our sponsors page and become a sponsor</a>!</p>
<hr>
<p>React Navigation is depended on by some of the most respected engineering organizations, well-known brands, and talented startups. It's used by financial services apps like <a href="https://brex.com/mobile/" target="_blank" rel="noopener noreferrer" class="">Brex</a> and <a href="https://pro.coinbase.com/" target="_blank" rel="noopener noreferrer" class="">Coinbase Pro</a>; educational apps like <a href="https://www.codecademy.com/mobile-app-download" target="_blank" rel="noopener noreferrer" class="">Codecademy Go</a> and <a href="https://www.datacamp.com/mobile/" target="_blank" rel="noopener noreferrer" class="">DataCamp</a>; consumer apps like <a href="https://www.shopify.com/shop" target="_blank" rel="noopener noreferrer" class="">Shop from Shopify</a>, <a href="https://www.bloombergapps.com/app/bloomberg/" target="_blank" rel="noopener noreferrer" class="">Bloomberg</a>, <a href="https://apps.apple.com/ca/app/taskrabbit-handyman-more/id374165361" target="_blank" rel="noopener noreferrer" class="">TaskRabbit</a>, and <a href="https://www.th3rdwave.coffee/" target="_blank" rel="noopener noreferrer" class="">Th3rdwave</a>; entertainment apps like the <a href="https://itunes.apple.com/app/nfl/id389781154" target="_blank" rel="noopener noreferrer" class="">National Football League (NFL)</a> (in their main app and several others), <a href="https://apps.apple.com/us/app/cameo-personal-celeb-videos/id1258311581" target="_blank" rel="noopener noreferrer" class="">Cameo</a>, <a href="https://apps.apple.com/us/app/tracker-network-for-fortnite/id1287696482" target="_blank" rel="noopener noreferrer" class="">Tracker Network for Fortnite</a>, and the <a href="https://www.callofduty.com/app" target="_blank" rel="noopener noreferrer" class="">Call of Duty companion app</a> from Activision Blizzard. One of my personal favourite apps using React Navigation is <a href="https://readwise.io/" target="_blank" rel="noopener noreferrer" class="">Readwise</a>, I love making my coffee with <a href="https://singleoriginapp.com/" target="_blank" rel="noopener noreferrer" class="">Single Origin 2</a>, and managing household chores with <a href="https://sweepy.app/" target="_blank" rel="noopener noreferrer" class="">Sweepy</a>.</p>
<p>We've also seen React Navigation used in apps that help in the fight against COVID-19. Our favourites are <a href="https://howwefeel.org/" target="_blank" rel="noopener noreferrer" class="">How We Feel</a> by Pinterest co-founder and CEO Ben Silbermann and a team from Pinterest in collaboration with leading scientists (<a href="https://news.harvard.edu/gazette/story/2020/04/how-we-feel-app-helps-track-spread-of-covid-19/" target="_blank" rel="noopener noreferrer" class="">article</a>) and <a href="https://covid.joinzoe.com/" target="_blank" rel="noopener noreferrer" class="">COVID Symptom Study</a> by ZOE Global in association with King's College London (<a href="https://www.nytimes.com/2020/05/11/health/coronavirus-symptoms-app.html" target="_blank" rel="noopener noreferrer" class="">article</a>).</p>
<p>There are so many more apps that we could mention here, but let's move on. If you've been following along with React Navigation, you already know what a huge improvement v5 has been for the library and for navigation in React Native in general. We haven't slowed down since shipping v5, some other substantial improvements we've shipped recently include:</p>
<ul>
<li class=""><a href="https://reactnavigation.org/blog/2020/05/16/web-support" target="_blank" rel="noopener noreferrer" class="">First-class support for web</a> 🎉</li>
<li class="">The improvements to URL integration that made web support possible also drastically improves the experience of building deep linking in your iOS and Android apps! You can play around with route configuration directly in the browser with the <a class="" href="https://react-navigation-docs.netlify.app/docs/configuring-links#playground">linking playground</a>.</li>
<li class="">An alternative stack navigator implementation that uses <code>UINavigationController</code> on iOS and <code>Fragment</code> on Android. There is no beating the performance of the native stack navigator equivalents (at least for now), and so we made them available through <a href="https://github.com/software-mansion/react-native-screens/tree/master/native-stack" target="_blank" rel="noopener noreferrer" class="">createNativeStackNavigator</a> on <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class="">react-native-screens</a>. You don't get the same degree of customization with the native stacks, and there is no equivalent on web, so there are plenty of cases where you will still want to use <a class="" href="https://react-navigation-docs.netlify.app/docs/stack-navigator/">createStackNavigator</a>. Your app, your choice. Mix and match if you want.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="react-navigation-team">React Navigation Team<a href="https://react-navigation-docs.netlify.app/blog/2020/05/19/joining-github-sponsors#react-navigation-team" class="hash-link" aria-label="Direct link to React Navigation Team" title="Direct link to React Navigation Team" translate="no">​</a></h2>
<p>This project has only been possible because of the time and money invested by <a href="https://expo.io/" target="_blank" rel="noopener noreferrer" class="">Expo</a> and <a href="https://swmansion.com/" target="_blank" rel="noopener noreferrer" class="">Software Mansion</a> to support contributors like the current lead maintainer <a href="https://github.com/satya164" target="_blank" rel="noopener noreferrer" class="">Satyajit Sahoo</a> and others such as <a href="https://github.com/brentvatne" target="_blank" rel="noopener noreferrer" class="">Brent</a>, <a href="https://github.com/ericvicenti" target="_blank" rel="noopener noreferrer" class="">Eric</a>, <a href="https://github.com/EvanBacon" target="_blank" rel="noopener noreferrer" class="">Evan</a>, <a href="https://github.com/kmagiera" target="_blank" rel="noopener noreferrer" class="">Krzysztof</a>, and <a href="https://github.com/WoLewicki" target="_blank" rel="noopener noreferrer" class="">Wojciech</a>.</p>
<p>Many folks from the community have also volunteered their valuable time to the project: <a href="https://github.com/osdnk" target="_blank" rel="noopener noreferrer" class="">Michal Osadnik</a> was instrumental in designing and building React Navigation v5, <a href="https://github.com/eriveltonelias" target="_blank" rel="noopener noreferrer" class="">Erivelton</a> has provided support and improved the documentation, <a href="https://github.com/vonovak" target="_blank" rel="noopener noreferrer" class="">Vojtech</a> maintains popular React Navigation utility libraries and chips in on the library and documentation when he has time, and <a href="https://github.com/janicduplessis" target="_blank" rel="noopener noreferrer" class="">Janic</a> regularly lives on the bleeding edge, testing new features and helping us improve them before they are included in stable releases and maintaining <a href="https://github.com/th3rdwave/react-native-safe-area-context" target="_blank" rel="noopener noreferrer" class="">react-native-safe-area-context</a>, one of the building blocks for React Navigation.</p>
<p><code>@react-navigation/core</code> has reached over 300,000 downloads per week on npm, compared to 380,000+ for <code>react-native</code>. It's not possible to draw any meaningful conclusions from npm download stats alone, but it is humbling to see React Navigation at nearly 80% of the weekly download count of React Native. We've managed this with an incredibly small team of, at most, one and a half full time engineers at any given time, and volunteers that chip in when they can.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sponsorship">Sponsorship<a href="https://react-navigation-docs.netlify.app/blog/2020/05/19/joining-github-sponsors#sponsorship" class="hash-link" aria-label="Direct link to Sponsorship" title="Direct link to Sponsorship" translate="no">​</a></h2>
<p>To be blunt: <strong>if React Navigation helps you to deliver value to your customers, we would be thrilled if you could show us some love through a sponsorship.</strong></p>
<p>Sponsorships will help us to move more quickly towards our goal of building the best cross-platform navigation library and continue to provide timely support for bug reports in our GitHub issues.</p>
<div style="margin-top:-30px"></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="-visit-our-github-sponsors-page-">👉 <a href="https://github.com/sponsors/react-navigation" target="_blank" rel="noopener noreferrer" class="">Visit our GitHub Sponsors page</a> 👈<a href="https://react-navigation-docs.netlify.app/blog/2020/05/19/joining-github-sponsors#-visit-our-github-sponsors-page-" class="hash-link" aria-label="Direct link to -visit-our-github-sponsors-page-" title="Direct link to -visit-our-github-sponsors-page-" translate="no">​</a></h3>
<p>We appreciate any support you can provide, but please only donate if you have the financial means to do so comfortably!</p>]]></content>
        <author>
            <name>Brent Vatne</name>
            <uri>https://bsky.app/profile/notbrent.bsky.social</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="web" term="web"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation on the Web]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support"/>
        <updated>2020-05-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[React Native has made cross-platform development much easier than before, and with React Native for Web, you can reuse code across Android, iOS and Web too!]]></summary>
        <content type="html"><![CDATA[<p>React Native has made cross-platform development much easier than before, and with React Native for Web, you can reuse code across Android, iOS and Web too!</p>
<p>One major pain point of reusing code for the web app has been navigation. React Navigation is one of the most widely used navigation libraries for React Native, but it didn’t support web. While you could run apps using React Navigation on the Web, a lot of things were missing, such as proper integration with URLs on the browser.</p>
<p>We have finally added preliminary web support to React Navigation. Let's take a look at the changes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="integration-with-urls-in-browsers">Integration with URLs in browsers<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#integration-with-urls-in-browsers" class="hash-link" aria-label="Direct link to Integration with URLs in browsers" title="Direct link to Integration with URLs in browsers" translate="no">​</a></h2>
<p>The first step for web support is to have proper URL integration. This means:</p>
<ul>
<li class="">Users should be able to navigate to a screen in the app using a URL</li>
<li class="">URL in the browser's address bar should update as users navigate in the app</li>
<li class="">Users should be able to go backwards and forwards using browser's back/forward buttons</li>
<li class="">Buttons that navigate to other screens in the app should be links, and users should be able use standard shortcuts with them</li>
</ul>
<video playsinline="" autoplay="" muted="" loop="" style="max-width:100%;margin-bottom:32px"><source src="/assets/blog/web-support/url-integration.mp4" type="video/mp4"></video>
<p>In native apps, it's already possible to navigate to a screen in the app using a URL via deep links. React Navigation can handle deep links if you provide a configuration in the <code>linking</code> prop of <code>NavigationContainer</code>. We now reuse the same configuration for URL integration in browsers. It also works for updating the URL in the browser when users navigates in the app. So if you have configured deep links in your app already, it'll work with URL integration on the web without any changes 🥳</p>
<p>By default, we'll reuse the route names as paths if you've provided <code>linking={{ enabled: true }}</code> without any extra configuration. However, you can also customize how the paths and params are parsed by providing mappings under the <code>config</code> property.</p>
<p>Example:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> linking </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">prefixes</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token string" style="color:hsl(139, 66%, 32%)">'https://example.com'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'example://'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">config</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screens</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Home</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">''</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">':id/profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Settings</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">':id/blog'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">NavigationContainer</span><span class="token plain"> linking</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">linking</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> fallback</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">SplashScreen</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Home"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Profile"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Settings"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Settings</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">NavigationContainer</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>We have a <a class="" href="https://react-navigation-docs.netlify.app/docs/configuring-links/#playground">playground</a> where you can try custom configurations and see how it's parsed. Give it a try, and we hope it'll make it easier for you to configure links in your apps.</p>
<p>There's a new <a class="" href="https://react-navigation-docs.netlify.app/docs/link"><code>&lt;Link /&gt;</code> component</a> which lets you use URLs for navigation in the app.</p>
<p>Example:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Link</span><span class="token plain"> to</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"/profile/jane"</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token maybe-class-name">Go</span><span class="token plain"> to </span><span class="token maybe-class-name">Jane</span><span class="token plain">'s profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Link</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><br></span></code></pre></div></div>
<p>When you use this component, it renders anchor tags on the web. This means that users can use the same patterns that they are used to on the web, such as "Open in new tab", "Copy link address" etc.</p>
<p>Special thanks to <a href="https://github.com/osdnk" target="_blank" rel="noopener noreferrer" class="">Michał</a> and <a href="https://github.com/WoLewicki" target="_blank" rel="noopener noreferrer" class="">Wojciech</a> for their extensive work on URL integration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="improvements-to-the-navigators">Improvements to the navigators<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#improvements-to-the-navigators" class="hash-link" aria-label="Direct link to Improvements to the navigators" title="Direct link to Improvements to the navigators" translate="no">​</a></h2>
<p>URL integration isn't enough to have proper web support. The navigators also need to feel at home on the web. We have made several improvements to the built-in navigators so that they behave as you expect on the web.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="anchor-tags-in-tabs-and-drawer">Anchor tags in tabs and drawer<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#anchor-tags-in-tabs-and-drawer" class="hash-link" aria-label="Direct link to Anchor tags in tabs and drawer" title="Direct link to Anchor tags in tabs and drawer" translate="no">​</a></h3>
<p>The first change is using anchor tags. When you use built-in navigators such as drawer navigator and tab navigator, they render anchor tags for the drawer and tab items respectively when you have linking configured. This means that they behave the same as normal links on the web.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/web-support/link-right-click.png" height="427" alt="Demo for Right Click on links">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="no-gestures-and-animations">No gestures and animations<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#no-gestures-and-animations" class="hash-link" aria-label="Direct link to No gestures and animations" title="Direct link to No gestures and animations" translate="no">​</a></h3>
<p>Another change is the removal of gestures on the web. Gestures are not commonly used on the web because they conflict with a lot of browser functionality and system gestures. For example, in Safari, you can swipe to go back to the previous page. Android has a system gesture to go back to previous pages too. Because of this, we've removed gestures on the web.</p>
<p>We've also disabled animations on the web by default since they are not commonly used and can be jarring, especially on larger screens. The animations in React Native Web also run entirely in JS, and tend not to be very performant on the web. So we've decided to disable them by default to better overall experience.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="hide-address-bar-on-scroll">Hide address bar on scroll<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#hide-address-bar-on-scroll" class="hash-link" aria-label="Direct link to Hide address bar on scroll" title="Direct link to Hide address bar on scroll" translate="no">​</a></h3>
<p>Phones have small screens, so it's important to maximize the use of available screen size. One of the ways mobile browsers achieve it is by hiding and showing the address bar when scrolling to give more vertical space to the content.</p>
<p>It's especially important in case of the <a class="" href="https://react-navigation-docs.netlify.app/docs/stack-navigator">stack navigator</a> because not only we have the browser's address bar, but also the header at the top which is taking vertical space. Now we'll automatically adjust the styles of the stack navigator to get this behavior without you having to write any special code.</p>
<video playsinline="" autoplay="" muted="" loop="" style="max-width:100%"><source src="/assets/blog/web-support/hide-addressbar.mp4" type="video/mp4"></video>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="permanent-drawer">Permanent drawer<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#permanent-drawer" class="hash-link" aria-label="Direct link to Permanent drawer" title="Direct link to Permanent drawer" translate="no">​</a></h3>
<p>Another way we can make maximum use of the available screen size is by making our UIs adapt to different screen sizes. For example, we may want to show a sidebar for navigation on large screens while switching to a drawer on smaller screens. You can now specify <code>drawerType</code> as <code>permanent</code> to show an always visible sidebar. See the <a class="" href="https://react-navigation-docs.netlify.app/docs/drawer-navigator#drawertype">documentation for <code>drawerType</code></a> for example code on how to achieve it.</p>
<video playsinline="" autoplay="" muted="" loop="" style="max-width:100%"><source src="/assets/blog/web-support/permanent-drawer.mp4" type="video/mp4"></video>
<p>Special thanks to <a href="https://twitter.com/noemi_rozpara" target="_blank" rel="noopener noreferrer" class="">Noemi</a> for implementing this feature.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="whats-next">What's next?<a href="https://react-navigation-docs.netlify.app/blog/2020/05/16/web-support#whats-next" class="hash-link" aria-label="Direct link to What's next?" title="Direct link to What's next?" translate="no">​</a></h2>
<p>This is just a start. We still need to figure out many things, such as SSR, handling of 404 etc. There is still a lot to do, but we’re excited to announce it and looking forward to feedback and bug reports.</p>
<p>Take a look at the <a class="" href="https://react-navigation-docs.netlify.app/docs/web-support">documentation</a> to give it a try and let us know what you think. You can also <a href="https://react-navigation-example.netlify.app/" target="_blank" rel="noopener noreferrer" class="">check the example app</a> to see a live demo of web support.</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="announcement" term="announcement"/>
        <category label="web" term="web"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 5.0 - A new way to navigate]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0"/>
        <updated>2020-02-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Exactly two years ago, we published the first stable version of React Navigation. Throughout this time, the library has been actively developed by adding many new features and bug fixes. The essence of React Navigation was that it was a project that was to become not only a project of individual programmers adapting it to their requirements, but a community as a whole, hence the emphasis on versatility, extensibility, and the tendency to reconsider the assumptions if there were such needs. Thanks to this, the Library has been undergoing metamorphosis of both incremental and completely reorganized shape.]]></summary>
        <content type="html"><![CDATA[<p>Exactly two years ago, we published the first stable version of React Navigation. Throughout this time, the library has been actively developed by adding many new features and bug fixes. The essence of React Navigation was that it was a project that was to become not only a project of individual programmers adapting it to their requirements, but a community as a whole, hence the emphasis on versatility, extensibility, and the tendency to reconsider the assumptions if there were such needs. Thanks to this, the Library has been undergoing metamorphosis of both incremental and completely reorganized shape.</p>
<p>This led us to the moment when React Navigation became one of the most popular navigation solutions in React Native and we are incredibly proud of it.</p>
<p>Today is the day, when we want to mark this vision and major refactoring of the project, that has taken place over the last six months, as stable. One could say that this significant change concerned the core library, and therefore the API, which has been developed and made more dynamic.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="highlights">Highlights<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="component-based-configuration">Component based configuration<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#component-based-configuration" class="hash-link" aria-label="Direct link to Component based configuration" title="Direct link to Component based configuration" translate="no">​</a></h3>
<p>In previous versions of React Navigation, we used to configure the navigator statically using <code>createXNavigator</code> functions and <code>static navigationOptions</code>. In React Navigation 5, all of the configuration happens inside a component and is dynamic.</p>
<p>Example:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> initialRouteName</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"home"</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"settings"</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Settings</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"profile"</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'John Doe'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>This means we have access to props, state and context, and can dynamically change the configuration for the navigator!</p>
<p>We want to stress that this is the most important change. This seems to be just a difference in the API. It actually required reconsidering many of the assumptions made in React Navigation during the development of previous versions. The static API, known from previous versions may seem an easier and more obvious choice. In the current version, the navigation configuration is consistent with all patterns in the React community.
This made it necessary to rewrite the core of the library, which allowed us to make a number of improvements not only in this respect.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-hooks">New hooks<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#new-hooks" class="hash-link" aria-label="Direct link to New hooks" title="Direct link to New hooks" translate="no">​</a></h3>
<p>Hooks are great for stateful logic and code organization. Now we have several hooks for common use cases:</p>
<ul>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/use-navigation"><code>useNavigation</code></a></li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/use-route"><code>useRoute</code></a></li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/use-navigation-state"><code>useNavigationState</code></a></li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/use-focus-effect"><code>useFocusEffect</code></a></li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/use-is-focused"><code>useIsFocused</code></a></li>
<li class=""><a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/use-scroll-to-top"><code>useScrollToTop</code></a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="update-options-from-component">Update options from component<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#update-options-from-component" class="hash-link" aria-label="Direct link to Update options from component" title="Direct link to Update options from component" translate="no">​</a></h3>
<p>We’ve added a new <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/navigation-prop#setoptions"><code>setOptions</code></a> method on the <code>navigation</code> prop to make configuring screen navigation options more intuitive than its <code>static navigationOptions</code> predecessor. It lets us <strong>easily set screen options based on props, state or context without messing with params</strong>. Instead of using static options, we can call it anytime to configure the screen.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">setOptions</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token function-variable function" style="color:hsl(256, 54%, 50%)">headerRight</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">DoneButton</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      onPress</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token keyword" style="color:hsl(356, 75%, 47%)">async</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">await</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">saveNote</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">replace</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Notes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>It can be used for things like adding a button in the header which needs to interact with the screen state.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-theming-api">New theming API<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#new-theming-api" class="hash-link" aria-label="Direct link to New theming API" title="Direct link to New theming API" translate="no">​</a></h3>
<p>In React Navigation, we had basic theming support where you could specify whether to use a light or dark theme. It wasn't easy to customize the colors used by the built-in components such as header, tab bar etc. without extra code or repetition.</p>
<p>Now, we have revamped the <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/themes">theme system</a> for easier customization. It is possible to provide a theme object with your desired colors for background, accent color etc. and it will automatically change the colors of all navigators without any extra code.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">MyTheme</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">dark</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">colors</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">primary</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgb(255, 45, 85)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">background</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgb(242, 242, 242)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">card</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgb(255, 255, 255)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">text</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgb(28, 28, 30)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">border</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'rgb(199, 199, 204)'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="first-class-types-with-typescript">First-class types with TypeScript<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#first-class-types-with-typescript" class="hash-link" aria-label="Direct link to First-class types with TypeScript" title="Direct link to First-class types with TypeScript" translate="no">​</a></h3>
<p>The new version has been written from the ground-up with TypeScript. We now get first class autocompletion and type-checking.</p>
<p><img decoding="async" loading="lazy" alt="TypeScript in action" src="https://react-navigation-docs.netlify.app/assets/images/typescript-8588d772a0acbc2538c0dae0c0cd743a.gif" width="2438" height="1552" class="img_ev3q"></p>
<p>We also have JSDoc for the built-in methods and options, so you get their description directly in your editor. See <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/typescript">our typescript documentation</a> for more details on how to use it.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="redux-devtools-integration">Redux DevTools integration<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#redux-devtools-integration" class="hash-link" aria-label="Direct link to Redux DevTools integration" title="Direct link to Redux DevTools integration" translate="no">​</a></h3>
<p>If you use <a href="https://github.com/jhen0409/react-native-debugger" target="_blank" rel="noopener noreferrer" class="">React Native Debugger</a> or <a href="https://github.com/reduxjs/redux-devtools" target="_blank" rel="noopener noreferrer" class="">Redux Devtools Extension</a>, you can see navigation actions in the devtools along with the current navigation state. It also supports time-travel debugging!</p>
<p><img decoding="async" loading="lazy" alt="Redux Devtools in action" src="https://react-navigation-docs.netlify.app/assets/images/redux-devtools-7e762bc4cf204aabad6d27ec7a43ed7a.gif" width="1440" height="900" class="img_ev3q"></p>
<p>You don't need to use Redux in your apps for this to work and it works without any extra setup!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-stack-navigator">Native Stack Navigator<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#native-stack-navigator" class="hash-link" aria-label="Direct link to Native Stack Navigator" title="Direct link to Native Stack Navigator" translate="no">​</a></h3>
<p>Traditionally, we have written our navigators in JavaScript for greater customizability. It fits a lot of use cases, but sometimes you want the exact native feel and the performance of native navigation. Now, we have added a new native stack navigator that uses native navigation primitives for navigation using the <a href="https://github.com/kmagiera/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a> library. Under the hood, it just uses native components which might be obvious choice for native development and might be a good pick in the most cases.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/5.x/android-native-stack.gif" height="530" alt="Native Stack on Android">
<img src="https://react-navigation-docs.netlify.app/assets/blog/5.x/ios-native-stack.gif" height="530" alt="Native Stack on iOS">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-backends-for-material-top-tab-navigator">Native backends for Material top tab navigator<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#native-backends-for-material-top-tab-navigator" class="hash-link" aria-label="Direct link to Native backends for Material top tab navigator" title="Direct link to Native backends for Material top tab navigator" translate="no">​</a></h3>
<p>Similar to native stack, we also have <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/material-top-tab-navigator#pager">new backends</a> for Material top tab navigator based on <a href="https://github.com/react-native-community/react-native-viewpager" target="_blank" rel="noopener noreferrer" class=""><code>react-native-viewpager</code></a> and <a href="https://reactnative.dev/docs/5.x/scrollview" target="_blank" rel="noopener noreferrer" class=""><code>ScrollView</code></a>.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">ViewPagerAdapter</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-tab-view-viewpager-adapter'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> pager</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter">props</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">ViewPagerAdapter</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><br></span></code></pre></div></div>
<p>or</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ScrollPager</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-tab-view'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> pager</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter">props</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">ScrollPager</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Tab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-improvements">Other improvements<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#other-improvements" class="hash-link" aria-label="Direct link to Other improvements" title="Direct link to Other improvements" translate="no">​</a></h3>
<p>In addition to these larger improvements, there are several smaller improvements to fit more use cases and make it easier to do certain tasks:</p>
<ul>
<li class="">Revamped drawer navigator to make customizing the drawer sidebar content easier and more flexible.</li>
<li class="">Simpler API for <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/navigation-prop#reset"><code>reset</code> action</a> where you can pass the new state directly instead of a chain of actions.</li>
<li class="">More reliable <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/navigation-lifecycle"><code>focus</code> and <code>blur</code> events</a> to know when a screen's focus state changes.</li>
<li class="">Integration with <a href="https://reactnative.dev/docs/5.x/interactionmanager" target="_blank" rel="noopener noreferrer" class=""><code>InteractionManager</code></a> to delay tasks until animation is complete.</li>
<li class="">Better safe area handling with <a href="https://github.com/th3rdwave/react-native-safe-area-context" target="_blank" rel="noopener noreferrer" class=""><code>react-native-safe-area-context</code></a>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrading">Upgrading<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<p>This is a big release and, while the basic concepts such as nesting are the same, the new API is mostly incompatible with the previous API. We know it can be a challenge to upgrade your code base. So we're going to keep supporting React Navigation 4 with bug fixes. We'll accept contributions and keep it compatible with the latest React Native version. The old code will now live in the <a href="https://github.com/react-navigation/react-navigation/tree/4.x" target="_blank" rel="noopener noreferrer" class="">4.x branch</a> on GitHub.</p>
<p>We recommend starting your new projects with the new version so you can take advantage of the new APIs and the new features.</p>
<p>We have written an <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/upgrading-from-4.x">upgrade guide</a> which will give you an overview of what's changed and how to adapt the old API and concepts to the new API.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-note-for-alpha-users">A note for alpha users<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#a-note-for-alpha-users" class="hash-link" aria-label="Direct link to A note for alpha users" title="Direct link to A note for alpha users" translate="no">​</a></h2>
<p>If you were using React Navigation 5 when it was alpha, you might need to check the following changes when upgrading:</p>
<ul>
<li class="">If you have added <code>@react-navigation/core</code> to your dependencies, remove it, and replace all imports from <code>@react-navigation/core</code> with <code>@react-navigation/native</code></li>
<li class="">If you were importing <code>NavigationNativeContainer</code>, change it to <code>NavigationContainer</code>, if you were using <code>NavigationContainer</code>, change it to <code>BaseNavigationContainer</code></li>
<li class="">If you had deep linking configured, the config format has changed for nesting. Check the <a class="" href="https://react-navigation-docs.netlify.app/docs/5.x/deep-linking">deep linking docs</a> for details.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="thanks-to-these-wonderful-people">Thanks to these wonderful people<a href="https://react-navigation-docs.netlify.app/blog/2020/02/06/react-navigation-5.0#thanks-to-these-wonderful-people" class="hash-link" aria-label="Direct link to Thanks to these wonderful people" title="Direct link to Thanks to these wonderful people" translate="no">​</a></h2>
<p>React Navigation 5 wouldn't have been possible without these wonderful people. A lot of thanks to <a href="https://github.com/osdnk" target="_blank" rel="noopener noreferrer" class="">Michał Osadnik</a> for working in this project with me from idea to fruition, <a href="https://github.com/brentvatne" target="_blank" rel="noopener noreferrer" class="">Brent Vatne</a> for his ideas, encouragement and funding from <a href="https://expo.io/" target="_blank" rel="noopener noreferrer" class="">Expo</a>, <a href="https://github.com/WoLewicki" target="_blank" rel="noopener noreferrer" class="">Wojciech Lewicki</a> and <a href="https://github.com/jakub-gonet" target="_blank" rel="noopener noreferrer" class="">Jakub Gonet</a> for improving the documentation, and working on deep link support, <a href="https://github.com/kmagiera" target="_blank" rel="noopener noreferrer" class="">Krzysztof Magiera</a> and <a href="https://github.com/software-mansion" target="_blank" rel="noopener noreferrer" class="">Software Mansion</a> for their awesome libraries that the core functionality depends on and contributions, <a href="https://github.com/janicduplessis" target="_blank" rel="noopener noreferrer" class="">Janic Duplessis</a> for <a href="https://github.com/th3rdwave/react-native-safe-area-context" target="_blank" rel="noopener noreferrer" class=""><code>react-native-safe-area-context</code></a>.</p>
<p>Additionally, I would like to mention how important is the community's influence on building this project. Without you, your support, your readiness to test and apply the next versions of the libraries, it wouldn't be possible at all, and despite mentioning a few people by name, at no stage do we forget that this is a community activity and will respond to its needs. We are incredibly grateful for the opportunity to work on such an unusual project, which facilitates the work of a large number of users.</p>
<p>Thanks again and hope you will find this release useful.</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <author>
            <name>Michał Osadnik</name>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation v5 + React Native Paper = ❤️]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper"/>
        <updated>2020-01-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a guest post by the React Native Paper team. If you like this guide, check out React Native Paper for more!]]></summary>
        <content type="html"><![CDATA[<p>This is a guest post by the <a href="https://reactnativepaper.com/" target="_blank" rel="noopener noreferrer" class="">React Native Paper</a> team. If you like this guide, check out React Native Paper for more!</p>
<p>In this blog post, we'll show you how to build a Twitter clone app using React Navigation v5 and Paper.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>The React Navigation v5 comes with many great improvements compared to previous version. It not only provides a cross-platform native Stack, but also the API was redesigned from the ground up to allow things that were never possible before. Thanks to the component-based API, all of the configuration is happening inside the <strong>render method</strong>. This means we can access <strong>props</strong>, <strong>state</strong> and <strong>context</strong> and can <strong>dynamically change configuration</strong> for the navigator.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-react-native-paper">What is React Native Paper?<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#what-is-react-native-paper" class="hash-link" aria-label="Direct link to What is React Native Paper?" title="Direct link to What is React Native Paper?" translate="no">​</a></h3>
<p><a href="https://reactnativepaper.com/" target="_blank" rel="noopener noreferrer" class="">React Native Paper</a> is a UI component library that implements <a href="https://material.io/design/" target="_blank" rel="noopener noreferrer" class="">MD Guidelines</a>.
It allows building beautiful interfaces on Mobile and Web with high-quality cross-platform components.
Furthermore, Paper provides you with a full <strong>theming support</strong>, <strong>accessibility</strong>, <strong>RTL</strong> and it will take care of <strong>platform adaptation</strong>. This means you can focus on building apps with ready to use components instead of reimplementing the boring stuff.</p>
<p>In this guide, we would like to show you how to integrate React Navigation with Paper's components. To show all the details of the integration we've decided to build a clone of Twitter. Of course, the functionalities will be very limited but the navigation part and main screens should look and feel similar.</p>
<p>In the following gif, you can see what is the final version of the app gonna looks like:</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/final-app.gif" height="480" alt="Final Result">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview-of-the-app">Overview of the App<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#overview-of-the-app" class="hash-link" aria-label="Direct link to Overview of the App" title="Direct link to Overview of the App" translate="no">​</a></h2>
<p>Since original Twitter is a very complex app, we will build only a part of it. This means we will implement:</p>
<ul>
<li class="">Drawer</li>
<li class="">Stack Navigator with two screens: Screen showing bottom navigation and Details of a tweet</li>
<li class="">Bottom navigation with 3 tabs: Feed, Notifications, and Messages</li>
</ul>
<p>I will focus this guide on a React Navigation and React Native Paper integration. It means I won't show you how to build all of the components necessary to create such an app, but you can always check the full implementation in the <a href="https://github.com/Trancever/twitterClone" target="_blank" rel="noopener noreferrer" class="">github repo</a>.</p>
<p>Let's get started!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting started<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<p>I assume you already have an <a href="https://expo.io/" target="_blank" rel="noopener noreferrer" class="">Expo</a> project running locally. If not, make sure to create one. I chose Expo over plain React-Native because it includes most of the dependencies that we need so there is less work to do for us.</p>
<p>Let's install React Native Paper, React Navigation v5 and other required dependencies.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">npm</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> @react-navigation/native @react-navigation/stack @react-native-community/masked-view @react-navigation/drawer @react-navigation/material-bottom-tabs react-native-paper</span><br></span></code></pre></div></div>
<p>In the next step we will make sure versions of these libraries are compatible.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">expo </span><span class="token function" style="color:hsl(256, 54%, 50%)">install</span><span class="token plain"> react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context</span><br></span></code></pre></div></div>
<p>After you run these two commands you should be ready to go. Let's start implementing the app!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="react-navigation-and-react-native-paper-initial-setup">React Navigation and React Native Paper initial setup<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#react-navigation-and-react-native-paper-initial-setup" class="hash-link" aria-label="Direct link to React Navigation and React Native Paper initial setup" title="Direct link to React Navigation and React Native Paper initial setup" translate="no">​</a></h2>
<p>Both these libraries require minimal setup.</p>
<p>In case of React Native Paper, we need to wrap the component tree with a <strong>Provider</strong>. You can do this inside the exported component in the <strong>App.js</strong> file.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Provider</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Main</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./src/Main'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Main</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>The <strong>PaperProvider</strong> provides the theme to all the components in the framework. It also acts as a portal to components that need to be rendered at the top level. Check the full <a href="https://callstack.github.io/react-native-paper/getting-started.html" target="_blank" rel="noopener noreferrer" class="">Getting-Started</a> page for more information.</p>
<p>React Navigation setup looks similar. There is a component called <strong>NavigationContainer</strong> which manages our navigation tree and contains the navigation state. It must wrap all navigator structure. We will render this component in <strong>App.tsx</strong> inside a <strong>PaperProvider</strong>. More information can be found in the official <a class="" href="https://react-navigation-docs.netlify.app/docs/hello-react-navigation">documentation</a>.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Provider</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperProvider</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</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:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports maybe-class-name">Main</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./src/Main'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Main</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawer">Drawer<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#drawer" class="hash-link" aria-label="Direct link to Drawer" title="Direct link to Drawer" translate="no">​</a></h2>
<p>In our Twitter clone, we want to implement a Drawer that is available from any screen in the app. This means it has to be a topmost navigator.</p>
<p>In React Navigation v5 there is a common pattern for creating navigators. After importing <strong>createXNavigator</strong> function from the navigator package of your choice you can use <strong>Navigator</strong> and <strong>Screen</strong> components from the value it returns.</p>
<p>So let's create a basic version of a Drawer:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</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:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createDrawerNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/drawer'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Drawer</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createDrawerNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">DrawerContent</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">flex</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">1</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">alignItems</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">justifyContent</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Drawer content</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">HomeScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">flex</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">1</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">alignItems</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">justifyContent</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Home Screen</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">RootNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">drawerContent</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:hsl(26, 100%, 29%)">DrawerContent</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Home</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">HomeScreen</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>That's what we see on a screen:</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/simple-drawer.gif" height="480" alt="Simple Drawer">
<p>We can open a drawer with a swipe gesture, it looks very smooth. However, the UI doesn't look very impressive so let's add more content to the drawer to make it look just like in the final version.</p>
<p>We will use:</p>
<ul>
<li class=""><strong><em>DrawerContentScrollView</em></strong> and <strong><em>DrawerItem</em></strong> from <strong><em>@react-navigation/drawer</em></strong></li>
<li class=""><strong><em>Avatar</em></strong>, <strong><em>Text</em></strong> and <strong><em>Switch</em></strong> from <strong><em>react-native-paper</em></strong></li>
</ul>
<p><strong>DrawerContentScrollView</strong> component makes the drawer vertically scrollable and provides support for devices with notches, so it's highly recommended to use it even for custom drawers.</p>
<p><strong>Components from React Native Paper</strong> make a clean, material UI.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">View</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</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:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DrawerItem</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DrawerContentScrollView</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/drawer'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  useTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Avatar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Title</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Caption</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Paragraph</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Drawer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">TouchableRipple</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Switch</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">MaterialCommunityIcons</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@expo/vector-icons'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">DrawerContent</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerContentScrollView</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag spread punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token tag spread" style="color:hsl(212, 92%, 35%)">props</span><span class="token tag spread punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">drawerContent</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">userInfoSection</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Avatar.Image</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">source</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">uri</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'https://pbs.twimg.com/profile_images/952545910990495744/b59hSXUd_400x400.jpg'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">50</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Title</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">title</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Dawid Urbaniak</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Title</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Caption</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">caption</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">@trensik</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Caption</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">row</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">section</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Paragraph</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">paragraph</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">caption</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">                202</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Paragraph</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Caption</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">caption</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Following</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Caption</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">section</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Paragraph</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">paragraph</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">caption</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">                159</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Paragraph</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Caption</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">caption</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Followers</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Caption</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Section</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">drawerSection</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerItem</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> color</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> size </span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:hsl(26, 100%, 29%)">MaterialCommunityIcons</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag script language-javascript tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag attr-value" style="color:hsl(356, 75%, 47%)">account-outline</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">label</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Profile</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerItem</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> color</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> size </span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:hsl(26, 100%, 29%)">MaterialCommunityIcons</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag script language-javascript tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag attr-value" style="color:hsl(356, 75%, 47%)">tune</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">label</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Preferences</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerItem</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> color</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> size </span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:hsl(26, 100%, 29%)">MaterialCommunityIcons</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag script language-javascript tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag attr-value" style="color:hsl(356, 75%, 47%)">bookmark-outline</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">                </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">label</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Bookmarks</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Section</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Section</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">title</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Preferences</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableRipple</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">preference</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Dark Theme</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">pointerEvents</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">none</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Switch</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableRipple</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableRipple</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">preference</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">RTL</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">pointerEvents</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">none</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Switch</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableRipple</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Section</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerContentScrollView</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> styles </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token maybe-class-name">StyleSheet</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">create</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">drawerContent</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">flex</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">1</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">userInfoSection</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">paddingLeft</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">20</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">marginTop</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">20</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">fontWeight</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'bold'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">caption</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">fontSize</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">14</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">lineHeight</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">14</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">row</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">marginTop</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">20</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">flexDirection</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'row'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">alignItems</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">section</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">flexDirection</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'row'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">alignItems</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'center'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">marginRight</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">15</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">paragraph</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">fontWeight</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'bold'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">marginRight</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">3</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">drawerSection</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">marginTop</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">15</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">preference</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">flexDirection</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'row'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">justifyContent</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'space-between'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">paddingVertical</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">12</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">paddingHorizontal</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(212, 92%, 35%)">16</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>The final version of a drawer looks like this:</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/final-drawer.gif" height="480" alt="Drawer with components from React Native Paper">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="stack-navigator--papers-appbar">Stack Navigator + Paper's Appbar<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#stack-navigator--papers-appbar" class="hash-link" aria-label="Direct link to Stack Navigator + Paper's Appbar" title="Direct link to Stack Navigator + Paper's Appbar" translate="no">​</a></h2>
<p>Stack Navigator provides a way for an app to transition between screens when each new screen is placed on top of a stack. In case of this Twitter clone, we will use it to transition from a screen displaying a feed of tweets to the screen showing details of a tweet.</p>
<p>React Navigation v5 provides two implementations of a Stack Navigator</p>
<ul>
<li class="">Native Stack</li>
<li class="">JS-based Stack</li>
</ul>
<p>The main difference between them is that JS-based stack re-implements animations and gestures while the native stack navigator relies on the platform primitives for animations and gestures.</p>
<p>In this section, we will integrate React Native Paper <a href="https://callstack.github.io/react-native-paper/appbar-header.html" target="_blank" rel="noopener noreferrer" class="">Appbar</a> and JS-based Stack Navigator.</p>
<p>As a first step, we will create a minimal version of a Stack:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Feed</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Details</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./details'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">FeedStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">initialRouteName</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Feed</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">headerTitle</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'Twitter'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Details</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Details</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">headerTitle</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'Tweet'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>By default, the stack navigator is configured to have the familiar iOS and Android header. That doesn't suit our needs, because we want to use Paper's Appbar instead.
We can achieve that by passing an <code>Appbar.Header</code> component as a <code>header</code> in Stack's <code>screenOptions</code>. We will also pass a <code>headerMode</code> prop with a value of <code>screen</code> to have a nice looking fade in/out animation.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TouchableOpacity</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Appbar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Avatar</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">MaterialCommunityIcons</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@expo/vector-icons'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Feed</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Details</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./details'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">Header</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter"> scene</span><span class="token parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token parameter"> previous</span><span class="token parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token parameter"> navigation </span><span class="token parameter punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> options </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> scene</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">descriptor</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> title </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">headerTitle</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">!==</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token plain"> options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">headerTitle</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">title</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">!==</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token plain"> options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">title</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> scene</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">name</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Appbar.Header</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">colors</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">primary</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> theme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">colors</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">surface</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">previous </span><span class="token operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Appbar.BackAction</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">navigation</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">pop</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">colors</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">primary</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableOpacity</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            navigation</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript method function property-access" style="color:hsl(256, 54%, 50%)">openDrawer</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Avatar.Image</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">40</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">source</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">              </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">uri</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'https://pbs.twimg.com/profile_images/952545910990495744/b59hSXUd_400x400.jpg'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableOpacity</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Appbar.Content</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">title</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          previous </span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> title </span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:hsl(26, 100%, 29%)">MaterialCommunityIcons</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag script language-javascript tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag attr-value" style="color:hsl(356, 75%, 47%)">twitter</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">size</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript number" style="color:hsl(212, 92%, 35%)">40</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Appbar.Header</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">FeedStack</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">initialRouteName</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">FeedList</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">headerMode</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">screen</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">screenOptions</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript function-variable function" style="color:hsl(256, 54%, 50%)">header</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> scene</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> previous</span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript parameter" style="color:hsl(212, 92%, 35%)"> navigation </span><span class="token tag script language-javascript parameter punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:hsl(26, 100%, 29%)">Header</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">scene</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">scene</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">previous</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">previous</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag attr-name" style="color:hsl(212, 92%, 35%)">navigation</span><span class="token tag script language-javascript tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript tag script language-javascript" style="color:hsl(212, 92%, 35%)">navigation</span><span class="token tag script language-javascript tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Feed</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">headerTitle</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'Twitter'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Details</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Details</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">headerTitle</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'Tweet'</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Stack.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>The Function that we pass to <code>header</code> prop has access to 3 properties:</p>
<ul>
<li class="">scene</li>
<li class="">previous</li>
<li class="">navigation</li>
</ul>
<p>Thanks to the <strong>scene</strong> property we can access the title of topmost screen on the stack and display it in the header.
<strong>Previous</strong> property tells us if there are any other screens lower on the Stack.</p>
<br>
<p>Finally, <strong>navigation</strong> property allows navigating to different screens e.g. opening a Drawer.</p>
<p>The thing that we haven't covered yet and it is very important is how to actually navigate between Stack Navigator screens.
In case of Tab or Drawer Navigator, we get it out of the box. We can swipe to open/close the Drawer or press a tab to change the scene. In Stack, we have to implement it by ourselves.</p>
<p>React Navigation gives us many different ways to navigate, but we will mostly focus on <code>push</code> and <code>pop</code>. You can access these two methods in <strong>navigation</strong> prop.</p>
<p>As the name suggests <code>push</code> method pushes the new screen on the stack and <code>pop</code> removes current screen from the stack.</p>
<p>As you can see on a snippet above, we invoke a <code>navigation.pop</code> function whenever user presses the back button in header. This means user will be allowed to come back from <strong>Details</strong> to the <strong>Feed</strong> screen.</p>
<p>We still need to implement an option to go from <strong>Feed</strong> to the <strong>Details</strong>. We can do it by invoking <code>navigation.push('Details')</code> whenever user presses a Tweet.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">onTweetPress</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">push</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Details'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>The implementation of <code>Feed</code> and <code>Details</code> components is quite big and complex, that's why I am not gonna post it here. Please make sure to check it out on <a href="https://github.com/Trancever/twitterClone" target="_blank" rel="noopener noreferrer" class="">github repo</a></p>
<p>We have covered only the basics of navigating between screens. If you want to learn more details check the official <a class="" href="https://react-navigation-docs.netlify.app/docs/navigating">documentation</a>.</p>
<p>Now, let's see what does the app looks like with Stack Navigator and Paper's Appbar.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/stack.gif" height="480" alt="Stack Navigator with React Native Paper's Appbar">
<p>We still miss the last piece of our navigation flow - <strong>Tab Navigator</strong>. Let's move to the next section where we will take care of it.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bottom-navigation">Bottom Navigation<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#bottom-navigation" class="hash-link" aria-label="Direct link to Bottom Navigation" title="Direct link to Bottom Navigation" translate="no">​</a></h2>
<p>In this section, we will implement a Tab Navigator with 3 tabs and we will make sure this component is now a one of Stack's screen.</p>
<p>We will use a <a href="https://callstack.github.io/react-native-paper/bottom-navigation.html" target="_blank" rel="noopener noreferrer" class="">Bottom Navigation</a> component from React Native Paper that is exposed via <strong>@react-navigation/material-bottom-tabs</strong> package.</p>
<p>Let's import the <strong>createMaterialBottomTabNavigator</strong> function first.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createMaterialBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/material-bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Then we can get a reference to the Tab.Navigator and Tab.Screen components.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createMaterialBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Now, we are ready to build the actual Bottom Navigation. We will render a <code>Tab.navigator</code> and 3 <code>Tab.Screen</code> components as children. Each <code>Tab.Screen</code> representing a tab.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createMaterialBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/material-bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Feed</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Messages</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./messages'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Notifications</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./notifications'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createMaterialBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">BottomTabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">initialRouteName</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">shifting</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">true</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">sceneAnimationEnabled</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Feed</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'home-account'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Notifications</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Notifications</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'bell-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Messages</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Messages</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'message-text-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>When we check the screen of the phone now, we will see a nice looking, material bottom navigation. What's more, Stack Navigator integrates nicely with Tab.Navigator and we can still navigate to the tweet <code>Details</code> screen.</p>
<br>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/bottom-navigation.gif" height="480" alt="Stack Navigator with Material Bottom Tabs">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fab-and-portal">FAB and Portal<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#fab-and-portal" class="hash-link" aria-label="Direct link to FAB and Portal" title="Direct link to FAB and Portal" translate="no">​</a></h2>
<p>As it is stated in <a href="https://material.io/components/buttons-floating-action-button/" target="_blank" rel="noopener noreferrer" class="">Material Design Guidelines</a>, the purpose of the FAB button is to give easy access to the main action of the application. Of course, the official Twitter app follows this pattern. Based on the type of screen, it allows creating new tweets or sending direct messages via FAB. It also smoothly animates the icon of the FAB when the user changes the tab and hides the FAB completely on specific screens.</p>
<p>In this section, we are going to implement the very same behaviour in our app. We are going to use a <a href="https://callstack.github.io/react-native-paper/fab.html" target="_blank" rel="noopener noreferrer" class="">FAB</a> and <a href="https://callstack.github.io/react-native-paper/portal.html" target="_blank" rel="noopener noreferrer" class="">Portal</a> components from React Native Paper.</p>
<p><code>Portal</code> allows rendering a component at a different place in the parent tree. It means you can use it to render content that should appear above other elements, similar to Modal.</p>
<p>As an initial step, we will render a FAB on all tabs and then we will add additional functionalities.</p>
<p>Let's render a <code>FAB</code> and <code>Portal</code> in the same component where we render Tabs:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createMaterialBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/material-bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> useTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Portal</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token constant" style="color:hsl(212, 92%, 35%)">FAB</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Feed</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Message</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./message'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Notifications</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./notifications'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createMaterialBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">BottomTabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">React.Fragment</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">initialRouteName</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">backBehavior</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">initialRoute</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">shifting</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">true</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">sceneAnimationEnabled</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Feed</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'home-account'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Notifications</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Notifications</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'bell-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Messages</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Message</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'message-text-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Portal</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">FAB</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">feather</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">position</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'absolute'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">bottom</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">100</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">right</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">16</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Portal</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">React.Fragment</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>With just a few lines of JSX we have a nice looking FAB displayed on all tabs. Let's implement hiding it whenever the user goes to the tweet details screen.</p>
<p>Our current navigation structure should be:</p>
<ul>
<li class="">StackNavigator that has two screens</li>
<li class="">The First screen of StackNavigator renders a TabNavigator with 3 tabs</li>
<li class="">The Second screen of StckNavigator renders a Tweet details</li>
</ul>
<p>This means a component that renders TabNavigator is a Stack's screen. Thanks to that, we can use <code>useIsFocused</code> hook provided by <code>@react-navigation/native</code> and conditionally hide <code>FAB</code>.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createMaterialBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/material-bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> useTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">Portal</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token constant" style="color:hsl(212, 92%, 35%)">FAB</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> useIsFocused </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Feed</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Message</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./message'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Notifications</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./notifications'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createMaterialBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">BottomTabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> isFocused </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useIsFocused</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">React.Fragment</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">initialRouteName</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">backBehavior</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">initialRoute</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">shifting</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">true</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Feed</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'home-account'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Notifications</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Notifications</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'bell-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Messages</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Message</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'message-text-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Portal</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">FAB</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">visible</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">isFocused</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag comment" style="color:hsl(212, 9%, 47%);font-style:italic">// show FAB only when this screen is focused</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">feather</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">position</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'absolute'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">bottom</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> safeArea</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">bottom</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">+</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">65</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">right</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">16</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Portal</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">React.Fragment</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>In the last step we will add ability to show different icon depending on the active tab.</p>
<p>We will take an advantage of our <code>BottomTabs</code> component being one of a Stack's screen. It means it has an access to the <code>route</code> object that is passed to each screen as a prop. This object contains an information about current screen which means we can access it and conditionally render proper icon. This is not a very common pattern and it can be confusing at first, so make sure to read the whole <a class="" href="https://react-navigation-docs.netlify.app/docs/screen-options-resolution">guide</a> on how to use it and what can be achieved by using it.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports">color</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'color'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createMaterialBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/material-bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token maybe-class-name">Portal</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token constant" style="color:hsl(212, 92%, 35%)">FAB</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> useIsFocused </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Feed</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Message</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./message'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Notifications</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./notifications'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createMaterialBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token function-variable function maybe-class-name" style="color:hsl(256, 54%, 50%)">BottomTabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Get a name of current screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> routeName </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">getFocusedRouteNameFromRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">??</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Feed'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> isFocused </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useIsFocused</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">let</span><span class="token plain"> icon </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'feather'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">switch</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">routeName</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">case</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Messages'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      icon </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'email-plus-outline'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">break</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      icon </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'feather'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">break</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">React.Fragment</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">initialRouteName</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">shifting</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript boolean" style="color:hsl(356, 75%, 47%)">true</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Feed</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Feed</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'home-account'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            tabBarColor</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Notifications</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Notifications</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'bell-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            tabBarColor</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Screen</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Messages</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">component</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">Message</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">options</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'message-text-outline'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            tabBarColor</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Tab.Navigator</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Portal</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">FAB</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">visible</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">isFocused</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">icon</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">position</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">'absolute'</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">bottom</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">100</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">            </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">right</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript number" style="color:hsl(212, 92%, 35%)">16</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">          </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">color</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">white</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token tag" style="color:hsl(212, 92%, 35%)">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Portal</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">React.Fragment</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/fab.gif" height="480" alt="React Native Paper's FAB with Bottom Tabs">
<p>As you can see on the gif, the FAB button works in the same way as in a Twitter app.
What's more, it even animates icon change properly even though we haven't implemented it. That's the behavior we get from React Native Paper's FAB out of the box.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="theming">Theming<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#theming" class="hash-link" aria-label="Direct link to Theming" title="Direct link to Theming" translate="no">​</a></h2>
<p>Nowadays, supporting the Light/Dark theme is no longer a fancy way to stand out from other apps, but it has become a standard. Happily, both React Navigation v5 and React Native Paper supports theming and in this section I'll guide you through setting it up.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="react-navigation">React Navigation<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#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 exports two themes:</p>
<ul>
<li class="">DefaultTheme</li>
<li class="">DarkTheme</li>
</ul>
<p>We can import them from <code>@react-navigation/native</code> package and pass to <code>NavigationContainer</code> to apply the theme:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">DarkTheme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* content */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="react-native-paper">React Native Paper<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#react-native-paper" class="hash-link" aria-label="Direct link to React Native Paper" title="Direct link to React Native Paper" translate="no">​</a></h3>
<p>React Native Paper similarly to React Navigation also exports two themes:</p>
<ul>
<li class="">DefaultTheme</li>
<li class="">DarkTheme</li>
</ul>
<p>Once we import a theme we can pass it to the Paper's <code>Provider</code> component:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports operator" style="color:hsl(212, 92%, 35%)">*</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperDarkTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Provider</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperProvider</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">Main</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">PaperDarkTheme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">DarkTheme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* content */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="combining-themes">Combining themes<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#combining-themes" class="hash-link" aria-label="Direct link to Combining themes" title="Direct link to Combining themes" translate="no">​</a></h3>
<p>Since both React Navigation and React Native Paper follows the same pattern for theming and structure of the theme object is very similar, we can combine them into one object:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports operator" style="color:hsl(212, 92%, 35%)">*</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationDarkTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperDarkTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Provider</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperProvider</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">CombinedDarkTheme</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">PaperDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">NavigationDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">colors</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">PaperDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">colors</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">NavigationDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">colors</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">Main</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">CombinedDarkTheme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript maybe-class-name" style="color:hsl(212, 92%, 35%)">CombinedDarkTheme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* content */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>If code for themes merging looks complex, you can use a <a href="https://www.npmjs.com/package/deepmerge" target="_blank" rel="noopener noreferrer" class="">deepmerge</a> package. It will simplify the implementation significantly.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-themes">Custom themes<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#custom-themes" class="hash-link" aria-label="Direct link to Custom themes" title="Direct link to Custom themes" translate="no">​</a></h4>
<p>Of course, the built-in themes are not the only themes we can apply. Both libraries allow full customization and you can learn about it in the official documentation (<a class="" href="https://react-navigation-docs.netlify.app/docs/themes">React Navigation</a>, <a href="https://callstack.github.io/react-native-paper/theming.html" target="_blank" rel="noopener noreferrer" class="">React Native Paper</a>)</p>
<p>In the last step, I want to show you how to change the theme dynamically. We will implement a switch in a drawer that will allow users choosing light or dark theme.</p>
<p>We need to store information about the currently selected theme somewhere. The local state of the root component sounds reasonable. Also, we will conditionally pass different themes based on the state.</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports operator" style="color:hsl(212, 92%, 35%)">*</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">React</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">NavigationContainer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DefaultTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationDefaultTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">NavigationDarkTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DarkTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperDarkTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">DefaultTheme</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperDefaultTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Provider</span><span class="token imports"> </span><span class="token imports keyword module" style="color:hsl(356, 75%, 47%)">as</span><span class="token imports"> </span><span class="token imports maybe-class-name">PaperProvider</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">CombinedDefaultTheme</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">PaperDefaultTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">NavigationDefaultTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">CombinedDarkTheme</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">PaperDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token maybe-class-name">NavigationDarkTheme</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">Main</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">isDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> setIsDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">useState</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token boolean" style="color:hsl(356, 75%, 47%)">false</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> theme </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> isDarkTheme </span><span class="token operator" style="color:hsl(212, 92%, 35%)">?</span><span class="token plain"> </span><span class="token maybe-class-name">CombinedDarkTheme</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">CombinedDefaultTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"> </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// Use Light/Dark theme based on a state</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">toggleTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">// We will pass this function to Drawer and invoke it on theme switch press</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token function" style="color:hsl(256, 54%, 50%)">setIsDarkTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">isDark</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">!</span><span class="token plain">isDark</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token comment" style="color:hsl(212, 9%, 47%);font-style:italic">/* content */</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">NavigationContainer</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">PaperProvider</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>As you remember, we already render a Switch in a Drawer, but we haven't implemented any logic when it is pressed. Let's take care of it now:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</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:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">DrawerContentScrollView</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/drawer'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  useTheme</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Avatar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Drawer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Text</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">TouchableRipple</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  </span><span class="token imports maybe-class-name">Switch</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-native-paper'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:hsl(256, 54%, 50%)">DrawerContent</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> paperTheme </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">useTheme</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerContentScrollView</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag spread punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token tag spread" style="color:hsl(212, 92%, 35%)">props</span><span class="token tag spread punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      /* {...other - content} */</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Section</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">title</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Preferences</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableRipple</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">onPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">props</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">toggleTheme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">style</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">styles</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">preference</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Dark Theme</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Text</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">pointerEvents</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">none</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Switch</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)">theme</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token tag script language-javascript property-access" style="color:hsl(212, 92%, 35%)">dark</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">/&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">View</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">TouchableRipple</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Drawer.Section</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">DrawerContentScrollView</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>Firstly, we get a current theme using <code>useTheme</code> hook from Paper. This means we can check <code>dark</code> property on it and pass the correct value to <code>Switch</code>.
<br>Secondly, we pass a <code>toggleTheme</code> function to <code>TouchableRipple</code> to toggle theme whenever user presses a Switch.</p>
<p>You should be able to toggle a switch now and both <code>Provider</code> from Paper and <code>NativeNavigationContainer</code> from React Navigation will automatically apply correct colors to the components.</p>
<br>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-paper/theming.gif" height="480" alt="Theming with React Navigation and React Native Paper">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://react-navigation-docs.netlify.app/blog/2020/01/29/using-react-navigation-5-with-react-native-paper#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>We all know that UI Component library like Paper can speed up the development, but integrating it with a navigation can be sometimes not very straighforward. I hope I showed you the most important aspects of this process in this guide. After reading this article, using Paper's BottomNavigation, Appbar, Drawer, FAB or Portal alongside with React Navigation shouldn't be a problem for you.</p>
<p>Do you have any questions? Tweet to me <a href="https://twitter.com/trensik" target="_blank" rel="noopener noreferrer" class="">@trensik</a>.</p>
<p>At the end I want to thank <a href="https://twitter.com/satya164" target="_blank" rel="noopener noreferrer" class="">@satya164</a> and the whole <a href="https://callstack.com/" target="_blank" rel="noopener noreferrer" class="">Callstack</a> team for their help with the article.</p>]]></content>
        <author>
            <name>Dawid Urbaniak</name>
        </author>
        <category label="tutorial" term="tutorial"/>
        <category label="react-native-paper" term="react-native-paper"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using React Navigation 5 with UI Kitten]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten"/>
        <updated>2019-11-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a guest post by the UI Kitten team. If you like this guide, checkout UI Kitten for more!]]></summary>
        <content type="html"><![CDATA[<p>This is a guest post by the <a href="http://akveo.github.io/react-native-ui-kitten" target="_blank" rel="noopener noreferrer" class="">UI Kitten</a> team. If you like this guide, checkout UI Kitten for more!
In this blog post, we'll show a step-by-step guide on using React Navigation 5 with UI Kitten.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>The new React Navigation comes with several significant improvements such as <a href="https://blog.expo.io/re-writing-react-navigation-stack-db6a376522b1" target="_blank" rel="noopener noreferrer" class="">improving animation performance</a> with <a href="https://github.com/software-mansion/react-native-gesture-handler" target="_blank" rel="noopener noreferrer" class="">gesture-handler</a> and <a href="https://github.com/software-mansion/react-native-reanimated" target="_blank" rel="noopener noreferrer" class="">reanimated</a> libraries. What's more, it was migrated to TypeScript for improving the quality of your code base with type checking and more. But the biggest update is migrating to component-based API.</p>
<p><a href="https://eva.design/" target="_blank" rel="noopener noreferrer" class="">Eva Design System</a> is a customizable Design System that is easy to adapt to your brand. It provides Mobile and Web component libraries and allows businesses to quickly create beautiful unique branding themes. The React Native realization of Eva Design System includes <a href="http://akveo.github.io/react-native-ui-kitten" target="_blank" rel="noopener noreferrer" class="">UI Kitten</a>, React Native framework for building modern cross-platform mobile applications.</p>
<p>The UI Kitten team started actively using React Navigation alpha and we're proud to announce the full compatibility to the new React Navigation API. In this guide, we won't consider how to implement all of the boilerplate stuff like auth screens. Instead, we will learn how to navigate between screens using Drawer, Bottom Tabs, Top Tabs, and Stack navigators to build a TODO-App. Furthermore, we'll demonstrate using React Navigation with UI Kitten components.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-ui-kitten/overview.gif" height="480" alt="React Navigation with UI Kitten Overview">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview">Overview<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview" translate="no">​</a></h2>
<p>React Navigation 5 is nothing else rather than simplifying navigation structure in your app.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AuthNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> headerMode</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'none'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Sign In'</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SignInScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'Sign Up'</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SignUpScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>To create a navigator, you import <code>createXNavigator</code> function from the navigator package of your choice and use <code>Navigator</code> and <code>Screen</code> components from the value it returns.</p>
<p>Unlike the previous React Navigation versions, all the screens used inside a navigator are passed as child elements with wrapping it to a <code>Screen</code> component. If you need to set up additional navigator configuration like configuration of the header, you can simply pass corresponding props directly to the <code>Navigator</code> component.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting started<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<p>Clone the project from GitHub. It contains all the required source code for the initial setup.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">git</span><span class="token plain"> clone https://github.com/artyorsh/react-navigation-ex-demo</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-authentication-flow">Step 1. Authentication flow<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#step-1-authentication-flow" class="hash-link" aria-label="Direct link to Step 1. Authentication flow" title="Direct link to Step 1. Authentication flow" translate="no">​</a></h3>
<p>Assuming that your app users will need to authorize before getting to the home screen, we will need to create both Authentication and Home navigators. Then we're going to combine it with simple stack navigation and pick the initial screen depending on the user authorization status.</p>
<p>Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/auth.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/auth.navigator.tsx`</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SignInScreen</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SignUpScreen</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">ResetPasswordScreen</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../scenes/auth'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AuthNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> headerMode</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'none'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_IN</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SignInScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_UP</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SignUpScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">RESET_PASSWORD</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">ResetPasswordScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>In this example, we're using a <code>createStackNavigator</code> function to create simple stack navigation between Sign In, Sign Up and Reset Password screens. Under <code>Stack Navigator</code> we mean the default navigation behavior between screens: with slide-from-right animation on iOS, and slide-in-top on Android.</p>
<p>In <a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/app.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/app.navigator.tsx</a> file and replace the placeholder screen with Auth Navigator. This will make authentication screens to be the starter point of your app.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AuthNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./auth.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AppNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> headerMode</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'none'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">AUTH</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AuthNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-ui-kitten/stack-navigator.gif" height="420" alt="UI Kitten with Stack Navigator">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-top-tabs">Step 2. Top tabs<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#step-2-top-tabs" class="hash-link" aria-label="Direct link to Step 2. Top tabs" title="Direct link to Step 2. Top tabs" translate="no">​</a></h3>
<p>Say, our app has both in-progress and finished tasks. So, you should separate them to avoid a mess. Here you can make it with two tabs on the home screen. To do this, we need to have three screens: two for tabs and one master screen for navigation management between tabs. Unlike the Stack Navigator component, the Top Tabs <code>Navigator</code> has a special prop for the component to control navigation between tabs - <code>tabBar</code>. We will use it to configure the tab bar with UI Kitten components.</p>
<p>Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/todo.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/todo.navigator.tsx`</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createMaterialTopTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/material-top-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoTabBar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoInProgressScreen</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoDoneScreen</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../scenes/todo'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">DoneAllIcon</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">GridIcon</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../assets/icons'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">TopTab</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createMaterialTopTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">TodoNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">TopTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> tabBar</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter">props</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">TodoTabBar</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">TopTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TODO_IN_PROGRESS</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">TodoInProgressScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'IN PROGRESS'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">GridIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">TopTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TODO_DONE</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">TodoDoneScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'DONE'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">DoneAllIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">TopTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>The code above will enable you to navigate with gestures between <code>In Progress</code> screen and <code>Done</code> screen, but not set up the Tab Bar. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/scenes/todo/todo-tab-bar.component.tsx" target="_blank" rel="noopener noreferrer" class="">./src/scenes/todo/todo-tab-bar.component.tsx</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TabBar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Tab</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Divider</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">TabElement</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@ui-kitten/components'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayout</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SaveAreaInset</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayoutElement</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../components/safe-area-layout.component'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Toolbar</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../components/toolbar.component'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">TodoTabBar</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">SafeAreaLayoutElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> onTabSelect </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">index</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter keyword" style="color:hsl(356, 75%, 47%)">void</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">selectedTabRoute</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> string </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routeNames</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">navigate</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">selectedTabRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> createNavigationTabForRoute </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">TabElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> options </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">descriptors</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        key</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        icon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">tabBarIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token plain"> insets</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SaveAreaInset</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TOP</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Toolbar</span><span class="token plain"> title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'React Navigation Ex 🐱'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">TabBar</span><span class="token plain"> selectedIndex</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> onSelect</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">onTabSelect</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">map</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">createNavigationTabForRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">TabBar</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Divider</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>With the code above we render <code>TabBar</code> component with two tabs inside: one per each screen inside <code>TodoNavigator</code>. Then, we use the React Navigation state to pass <code>selectedIndex</code> and <code>onSelect</code> props to navigate between screens. So, when the user taps one of the tabs, the <code>TabBar</code> component calls <code>onTabSelect</code> function and this is the place where we need to navigate to the corresponding route.</p>
<p>Finally, open <a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/app.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">app.navigator.tsx</a> file and add the <code>TodoNavigator</code> as a Home screen. Now you're able to navigate the home screen with todo tabs after sign in.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AuthNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./auth.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./todo.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AppNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> headerMode</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'none'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">AUTH</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AuthNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">HOME</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">TodoNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-ui-kitten/material-top-tab-navigator.gif" height="480" alt="UI Kitten with Material Top Tabs">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-bottom-tabs">Step 3. Bottom tabs<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#step-3-bottom-tabs" class="hash-link" aria-label="Direct link to Step 3. Bottom tabs" title="Direct link to Step 3. Bottom tabs" translate="no">​</a></h3>
<p>Sometimes you may want your app to contain tabs at the bottom. Here is the main semantic difference regarding the tabs at the top: while they should represent the content of the same type, the bottom tabs could be used to show any content of your application. This is where we're going to use <code>createBottomTabNavigator</code> and <code>BottomNavigation</code>.</p>
<p>Let's start by creating another navigator for the second tab. The first one will be used for Todo screens. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/profile.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/profile.navigator.tsx</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ProfileScreen</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../scenes/profile'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">ProfileNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> headerMode</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'none'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">PROFILE</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">ProfileScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>This will add a simple stack navigator, just like we did it for authentication flow.</p>
<p>Now we need to somehow connect <code>TodoNavigator</code> with <code>ProfileNavigator</code>&nbsp;. The implementation is as simple as creating a navigator for top tabs. Thanks to React Navigation, we have totally the same API for this. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/home.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/home.navigator.tsx</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./todo.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ProfileNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./profile.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HomeTabBar</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../scenes/home'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">LayoutIcon</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">PersonIcon</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../assets/icons'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">BottomTab</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">HomeNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> tabBar</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter">props</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">HomeTabBar</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TODO</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">TodoNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'TODO'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">LayoutIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">PROFILE</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">ProfileNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'PROFILE'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">PersonIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Just like in the case with tabs at the top, we also need to make a custom <code>tabBar</code>. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/scenes/home/home-tab-bar.component.tsx" target="_blank" rel="noopener noreferrer" class="">./src/scenes/home/home-tab-bar.component.tsx</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">BottomNavigation</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">BottomNavigationTab</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Divider</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">BottomNavigationTabElement</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@ui-kitten/components'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayout</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayoutElement</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SaveAreaInset</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../components/safe-area-layout.component'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">HomeTabBar</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">SafeAreaLayoutElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> onSelect </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">index</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter keyword" style="color:hsl(356, 75%, 47%)">void</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">selectedTabRoute</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> string </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routeNames</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">navigate</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">selectedTabRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> createNavigationTabForRoute </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">BottomNavigationTabElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> options </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">descriptors</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomNavigationTab</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        key</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        icon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">tabBarIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token plain"> insets</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SaveAreaInset</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">BOTTOM</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Divider</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomNavigation</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        appearance</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'noIndicator'</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        selectedIndex</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        onSelect</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">onSelect</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">map</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">createNavigationTabForRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">BottomNavigation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Using the code above we render <code>BottomNavigation</code> component with two tabs inside: one per each screen inside <code>HomeNavigator</code>. We use the React Navigation state to pass <code>selectedIndex</code> and <code>onSelect</code> props to navigate between screens. So, when the user taps one of the tabs, the <code>BottomNavigation</code> component calls <code>onSelect</code> function. Well, this is the place where we need to navigate to the corresponding route.</p>
<p>Then, open <a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/app.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">app.navigator.tsx</a> file and replace the <code>TodoNavigator</code> with <code>HomeNavigator</code>:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AuthNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./auth.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HomeNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./home.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">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:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AppNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> headerMode</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'none'</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">AUTH</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AuthNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"> name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">HOME</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">HomeNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Stack</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-ui-kitten/bottom-tab-navigator.gif" height="480" alt="UI Kitten with Bottom Tabs">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-drawer-menu">Step 4. Drawer menu<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#step-4-drawer-menu" class="hash-link" aria-label="Direct link to Step 4. Drawer menu" title="Direct link to Step 4. Drawer menu" translate="no">​</a></h3>
<p>At the final stage of this guide, we will describe how to create the drawer navigation. While the top and bottom tabs can be used to present the main product features, a drawer menu can be also used to direct a user to legal information about it, or simply contain quick actions like a logout.</p>
<p>Usually, the drawer menu is available in app on the home screen, so let's add it to <code>HomeNavigator</code>. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/home.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/home.navigator.tsx</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createDrawerNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/drawer'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createBottomTabNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/bottom-tabs'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TodoNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./todo.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ProfileNavigator</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./profile.navigator'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HomeTabBar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">HomeDrawer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">AboutScreen</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../scenes/home'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">HomeIcon</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">InfoIcon</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">LayoutIcon</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">PersonIcon</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../assets/icons'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Drawer</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createDrawerNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">BottomTab</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">HomeBottomNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> tabBar</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter">props</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">HomeTabBar</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TODO</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">TodoNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'TODO'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">LayoutIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">PROFILE</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">ProfileNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'PROFILE'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">PersonIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">BottomTab</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">HomeNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token parameter maybe-class-name">ReactElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Drawer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token plain"> drawerContent</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token parameter">props</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">HomeDrawer</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Drawer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">HOME</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">HomeBottomNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Home'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">drawerIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">HomeIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Drawer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Screen</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">ABOUT</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      component</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">AboutScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      options</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'About'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">drawerIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">InfoIcon</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Drawer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access maybe-class-name">Navigator</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>In this example, we've implemented a Drawer Navigator with <code>createDrawerNavigator</code> and used it to display on the Home screen. We have also added <code>AboutScreen</code> to demonstrate navigation directly from the Drawer menu.</p>
<p>Just like Top/Bottom tab navigators, the drawer navigator also has a special property for declaring custom drawer view. Use a <code>drawerContent</code> property to pass the custom view to the navigator. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/scenes/home/home-drawer.component.tsx" target="_blank" rel="noopener noreferrer" class="">./src/scenes/home/home-drawer.component.tsx</a> file and add the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Drawer</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">DrawerItem</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">DrawerElement</span><span class="token imports"> </span><span class="token imports maybe-class-name">DrawerItemElement</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@ui-kitten/components'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayout</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SaveAreaInset</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../components/safe-area-layout.component'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">HomeDrawer</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">DrawerElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> onItemSelect </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">index</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">IndexPath</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter keyword" style="color:hsl(356, 75%, 47%)">void</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">selectedTabRoute</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> string </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routeNames</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">row</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">navigate</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">selectedTabRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">closeDrawer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> createDrawerItemForRoute </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">index</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">DrawerItemElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> options </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">descriptors</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">DrawerItem</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        key</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">name</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        accessoryLeft</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">drawerIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token plain"> insets</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SaveAreaInset</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TOP</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Drawer</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        data</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">map</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">createNavigationItemForRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        onSelect</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">onMenuItemSelect</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Due to the use of this code, we render <code>Drawer</code> component with two actions inside: one for navigating to legal information screen and one for performing a user logout. Then, we pass <code>data</code> prop to display our actions and <code>onSelect</code> prop to handle it. So, when the user taps the action, the <code>Drawer</code> component calls <code>onMenuItemSelect</code> function and this is the place where we need to handle it.`</p>
<p>The next thing to do is to modify the Todo tab bar by adding a menu icon to open a drawer. Open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/scenes/todo/todo-tab-bar.component.tsx" target="_blank" rel="noopener noreferrer" class="">./src/scenes/todo/todo-tab-bar.component.tsx</a> file and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">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:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">TabBar</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Tab</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Divider</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">TabElement</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@ui-kitten/components'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayout</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SaveAreaInset</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">SafeAreaLayoutElement</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../components/safe-area-layout.component'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Toolbar</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../components/toolbar.component'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">MenuIcon</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'../../assets/icons'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">TodoTabBar</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">SafeAreaLayoutElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> onTabSelect </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">index</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter keyword" style="color:hsl(356, 75%, 47%)">void</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">selectedTabRoute</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> string </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routeNames</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">navigate</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">selectedTabRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> createNavigationTabForRoute </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token parameter maybe-class-name">TabElement</span><span class="token plain"> </span><span class="token arrow operator" style="color:hsl(212, 92%, 35%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> options </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">descriptors</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Tab</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        key</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">route</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">key</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">title</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        icon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">tabBarIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token plain"> insets</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">SaveAreaInset</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">TOP</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Toolbar</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">'React Navigation Ex 🐱'</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        backIcon</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token maybe-class-name">MenuIcon</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        onBackPress</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigation</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">toggleDrawer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">TabBar</span><span class="token plain"> selectedIndex</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">index</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> onSelect</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">onTabSelect</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain">props</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">state</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token method function property-access" style="color:hsl(256, 54%, 50%)">map</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">createNavigationTabForRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">TabBar</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Divider</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">SafeAreaLayout</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-ui-kitten/drawer-navigator.gif" height="420" alt="UI Kitten with Drawer">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript">TypeScript<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#typescript" class="hash-link" aria-label="Direct link to TypeScript" title="Direct link to TypeScript" translate="no">​</a></h3>
<p>The new React Navigation has great TypeScript support and exports type definitions for navigators and custom navigation components. Sometimes you may want to type-check the params you're passing when navigating between routes. You also may want to make autocomplete work when working with navigation props.</p>
<p>Let's add some type definitions for Auth screens. For this purpose, open&nbsp;<a href="https://github.com/artyorsh/react-navigation-ex-demo/blob/complete-exmaples/src/navigation/auth.navigator.tsx" target="_blank" rel="noopener noreferrer" class="">./src/navigation/auth.navigator.tsx</a> and paste the following code:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">RouteProp</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/core'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">StackNavigationProp</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'@react-navigation/stack'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">AppRoute</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'./app-routes'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">type </span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_IN</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_UP</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">[</span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">RESET_PASSWORD</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">]</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:hsl(356, 75%, 47%)">undefined</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">SignInScreenProps</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">StackNavigationProp</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_IN</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">route</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">RouteProp</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_IN</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">SignUpScreenProps</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">StackNavigationProp</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_UP</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">route</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">RouteProp</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">SIGN_UP</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">interface</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">ResetPasswordScreenProps</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">StackNavigationProp</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">RESET_PASSWORD</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">route</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">RouteProp</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">AuthNavigatorParams</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token maybe-class-name">AppRoute</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token constant" style="color:hsl(212, 92%, 35%)">RESET_PASSWORD</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><br></span></code></pre></div></div>
<p>Now you can modify props of Auth screens props by adding types to make your autocomplete and IntelliSense work. For more complex examples, consider reading <a class="" href="https://react-navigation-docs.netlify.app/docs/typescript">type-checking</a> doc or reviewing <a href="https://github.com/artyorsh/react-navigation-ex-demo/tree/complete-exmaples" target="_blank" rel="noopener noreferrer" class="">complete demo application sources</a>.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/using-react-navigation-5-with-ui-kitten/typescript.gif" alt="UI Kitten &amp; TypeScript">
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="useful-links">Useful links<a href="https://react-navigation-docs.netlify.app/blog/2019/11/04/using-react-navigation-5-with-ui-kitten#useful-links" class="hash-link" aria-label="Direct link to Useful links" title="Direct link to Useful links" translate="no">​</a></h3>
<p>By the links below, you can find a lot of useful information about UI Kitten and React Navigation 5. The demo application may contain more complex examples. Also, by referring to the app built by the React Navigation team, you can find plenty of useful examples too.</p>
<ul>
<li class=""><a href="https://github.com/artyorsh/react-navigation-ex-demo/tree/complete-examples" target="_blank" rel="noopener noreferrer" class="">Demo App by UI Kitten team</a></li>
<li class=""><a href="https://github.com/react-navigation/react-navigation/tree/main/example" target="_blank" rel="noopener noreferrer" class="">Demo App by React Navigation team</a></li>
<li class=""><a href="https://blog.expo.io/announcing-react-navigation-5-0-bd9e5d45569e" target="_blank" rel="noopener noreferrer" class="">React Navigation 5 Highlights</a></li>
<li class=""><a href="https://akveo.github.io/react-native-ui-kitten/" target="_blank" rel="noopener noreferrer" class="">UI Kitten Documentation</a></li>
</ul>]]></content>
        <author>
            <name>Artur Yorsh</name>
        </author>
        <category label="tutorial" term="tutorial"/>
        <category label="ui-kitten" term="ui-kitten"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation meets native]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2019/10/17/react-navigation-native</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2019/10/17/react-navigation-native"/>
        <updated>2019-10-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[React Navigation steps firmly into the next level and we’re very excited to announce to you something great happening in React Navigation codebase.]]></summary>
        <content type="html"><![CDATA[<p>React Navigation steps firmly into the next level and we’re very excited to announce to you something great happening in React Navigation codebase.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="make-it-custom">Make it custom<a href="https://react-navigation-docs.netlify.app/blog/2019/10/17/react-navigation-native#make-it-custom" class="hash-link" aria-label="Direct link to Make it custom" title="Direct link to Make it custom" translate="no">​</a></h2>
<p>From the very beginning of React Navigation we have been following the important motto to make navigation experience customizable in every detail. We, front-end engineers, mobile developers and User Experience lovers, have a deep need to make decisions about each layout component.</p>
<p>Guided by this idea we (well, not necessarily “we” because I haven’t even written a single line of code this time 😄) made architectural decisions, which might appear controversial for developers with the native background.</p>
<p>We have decided to write React Navigation only in JavaScript replicating native animations and interactions. This is the main decision making our solution very different from other React Native navigation libraries (like <a href="https://wix.github.io/react-native-navigation" target="_blank" rel="noopener noreferrer" class="">React Native Navigation</a> by Wix or <a href="https://grahammendick.github.io/navigation/" target="_blank" rel="noopener noreferrer" class="">The Navigation Router</a> by Graham Mendick).</p>
<p>But… why? What’s the purpose of reinventing the wheel?</p>
<p>Firstly, because JavaScript implementation can be more customizable. It’s easy to maintain and develop new features. Additionally, being independent of native code makes our codebase more reliable.</p>
<p>Furthermore, it’s easy not only for maintainers but also for developers using our library. No need for native setup makes it super simple to start developing and integrating with the existing (e.g. brownfield) app. Eventually, a very wide range of customizations makes it a great solution for developers with very high UX requirements.</p>
<p>The above reasons have made React Navigation navigation super popular among a number of developers but…</p>
<p>After years of growing development, we need to admit that we’re not always able to deliver an exactly native-like experience, especially when it comes to stack navigation. We also see a ton of users that use just a few ways of customization React Navigation offers…</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-reveal"><strong>Native reveal</strong><a href="https://react-navigation-docs.netlify.app/blog/2019/10/17/react-navigation-native#native-reveal" class="hash-link" aria-label="Direct link to native-reveal" title="Direct link to native-reveal" translate="no">​</a></h2>
<p>…so, we have decided to export native stack (<em>FragmentTransaction</em>on Android and <em>UINavigationController</em>on iOS) in order to deliver an even better experience.</p>
<p>Thanks to the great work of Krzysztof Magiera for <a href="https://github.com/kmagiera/react-native-screens" target="_blank" rel="noopener noreferrer" class="">React Native Screens</a> library now we can use truly native components instead of JS replicas.</p>
<img src="https://react-navigation-docs.netlify.app/assets/blog/5.x/android-native-stack.gif" height="530" alt="Native Stack on Android">
<img src="https://react-navigation-docs.netlify.app/assets/blog/5.x/ios-native-stack.gif" height="530" alt="Native Stack on iOS">
<p>We believe you will find it useful in your projects and strongly encourage you to get acquainted with our <a href="https://github.com/kmagiera/react-native-screens/native-stack" target="_blank" rel="noopener noreferrer" class="">documentation</a>. Things that I’m the most excited about are iOS header animations!</p>
<p>Please, note that we don’t intend this component to be a drop-off replacement for the currently existing stack. There are many benefits of using JavaScript-based stack. Moreover, the range of customization of the native stack is very limited and probably won’t get broader due to the limitations of native API.</p>
<p>Native Stack is available in the new 5.0 alpha API and with <a href="https://github.com/satya164" target="_blank" rel="noopener noreferrer" class="">Satyajit</a>’s help, I have managed to release the first version of the <a href="https://www.npmjs.com/package/@react-navigation/native-stack" target="_blank" rel="noopener noreferrer" class="">library</a> a few days ago. It’s in alpha so don’t expect everything to be perfect, but… don’t hesitate to submit a <a href="https://github.com/react-navigation/react-navigation/pulls" target="_blank" rel="noopener noreferrer" class="">PR</a> and help us grow React Navigation!</p>]]></content>
        <author>
            <name>Michał Osadnik</name>
        </author>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 4.0]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2019/09/16/react-navigation-4.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2019/09/16/react-navigation-4.0"/>
        <updated>2019-09-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The documentation is now live at reactnavigation.org, and v3 lives here.]]></summary>
        <content type="html"><![CDATA[<p>The documentation is now live at <a href="https://reactnavigation.org/" target="_blank" rel="noopener noreferrer" class="">reactnavigation.org</a>, and v3 lives <a class="" href="https://react-navigation-docs.netlify.app/docs/3.x/getting-started">here</a>.</p>
<p>In this release, we have removed the navigators from the react-navigation package. The navigators have lived in separate packages for quite a while and you could already use those packages manually, but we still bundled them in the react-navigation package. This made it difficult for us to release significant updates to navigators, because we had to then do a major version release of react-navigation too. By separating the navigator packages there is more freedom to update and improve navigators without any impact on folks that don't use them.</p>
<p>For example, you will find when you install the latest versions of the drawer and tab navigators that the animations are more performant because they use react-native-reanimated to smoothly animate gestures. These have been available in react-navigation-drawer and react-navigation-tabs for several months now but we delayed updating them in react-navigation itself because we did not want to force every user to update.</p>
<p>With this version, you now install the navigators from their respective packages, which means that you can independently update them.</p>
<p>The navigators live at:</p>
<ul>
<li class=""><code>createStackNavigator</code> - <a href="https://github.com/react-navigation/stack" target="_blank" rel="noopener noreferrer" class=""><code>react-navigation-stack</code></a></li>
<li class=""><code>createBottomTabNavigator</code>, <code>createMaterialTopTabNavigator</code> - <a href="https://github.com/react-navigation/tabs" target="_blank" rel="noopener noreferrer" class=""><code>react-navigation-tabs</code></a></li>
<li class=""><code>createDrawerNavigator</code> - <a href="https://github.com/react-navigation/drawer" target="_blank" rel="noopener noreferrer" class=""><code>react-navigation-drawer</code></a></li>
</ul>
<p>For upgrade instructions, please check the <a href="https://github.com/react-navigation/react-navigation/releases/tag/v4.0.0" target="_blank" rel="noopener noreferrer" class="">release notes</a>.</p>
<p>If you're using TypeScript, navigator specific types were also removed from the main package. We've mentioned the replacement types in the release notes. But if you are still having problems, please open an issue and let us know.</p>
<hr>
<p>Thanks for reading, please post any issues you encounter to <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues</a>!</p>]]></content>
        <author>
            <name>Satyajit Sahoo</name>
            <uri>https://satya164.page</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 3.0]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0"/>
        <updated>2018-11-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The documentation is now live at reactnavigation.org, and v2 lives here.]]></summary>
        <content type="html"><![CDATA[<p>The documentation is now live at <a href="https://reactnavigation.org/" target="_blank" rel="noopener noreferrer" class="">reactnavigation.org</a>, and v2 lives <a class="" href="https://react-navigation-docs.netlify.app/docs/2.x/getting-started">here</a>.</p>
<p>This is the first release where React Navigation depends on a native module outside of React Native core: it now depends on react-native-gesture-handler. This library provides an excellent set of primitives for leveraging the operating systems’ native gesture APIs and has enabled us to fix a variety of issues with stack and drawer navigators. React Navigation also depends on react-native-screens, but you don’t need to install the native module if you prefer not to use it (we have a blog post coming soon that will explain what react-native-screens is and why you may want to use it, or you can watch <a href="https://www.youtube.com/watch?v=Z0Jl1KCWiag" target="_blank" rel="noopener noreferrer" class="">this talk</a> by the author of the library).</p>
<p>We didn’t get around to every feature that we wanted to land for this release, but we also didn’t want to hold it up further because we expect that you will want to start using it right away - the release includes performance improvements, bugfixes, ergonomics improvements, some handy new features, and a re-organizing of the internals to improve support for web as a target of React Navigation.</p>
<p>Let’s get started with react-navigation 3.0.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installation">Installation<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation" translate="no">​</a></h2>
<p>First, install the library using your favorite package manager: <code>yarn add react-navigation@^3.0.0</code></p>
<p>Next, install react-native-gesture-handler. If you’re using Expo you don’t need to do anything here, it’s included in the SDK. Otherwise, follow <a href="https://kmagiera.github.io/react-native-gesture-handler/docs/getting-started.html#installation" target="_blank" rel="noopener noreferrer" class="">these installation instructions</a>.</p>
<p>Optionally, you can install react-native-screens. If you’re using Expo you don’t need to do anything here, it’s included in SDK 30 and higher. Otherwise, follow the instructions in the README on <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a>.</p>
<blockquote>
<p><strong>Warning</strong>: if you have manually installed any navigators in your project, for example react-navigation-material-bottom-tabs, you will need to update those to a version that is compatible with 3.0.0. In the case of react-navigation-material-bottom-tabs, 1.0.0 is compatible.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-changes">Breaking changes<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes" translate="no">​</a></h2>
<p>When you first run your app after updating it won’t work because react-navigation@^3 requires you to add an app container to the root navigator. Once you get that in place, you may notice that your navigation options aren’t being applied as you expect - this is due to navigationOptions in navigator configuration being renamed to defaultNavigationOptions. If you use a drawer, you may notice that it feels quicker, but if you depend on inactive screens being unmounted you’ll be surprised. More details on these changes and how to update your app to work just as well (probably better) than before below.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explicit-app-container-required-for-the-root-navigator">Explicit app container required for the root navigator<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#explicit-app-container-required-for-the-root-navigator" class="hash-link" aria-label="Direct link to Explicit app container required for the root navigator" title="Direct link to Explicit app container required for the root navigator" translate="no">​</a></h3>
<p>In the past, any navigator could act as the navigation container at the top-level of your app because they were all wrapped in “navigation containers”. The navigation container, now known as an app container, is a higher-order-component that maintains the navigation state of your app and handles interacting with the outside world to turn linking events into navigation actions and so on.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  createStackNavigator</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  createAppContainer</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-navigation'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">MainNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createAppContainer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token maybe-class-name">MainNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>This should be an easy change - import <code>createAppContainer</code> in the root of your app and use it to wrap the root navigator.</p>
<blockquote>
<p><strong>Warning</strong>: if you have any custom navigators, you may have used <code>createNavigationContainer</code>, you can remove this now because it’s only used at the root of the app and provided by the user.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="renamed-navigationoptions-in-navigator-configuration">Renamed navigationOptions in navigator configuration<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#renamed-navigationoptions-in-navigator-configuration" class="hash-link" aria-label="Direct link to Renamed navigationOptions in navigator configuration" title="Direct link to Renamed navigationOptions in navigator configuration" translate="no">​</a></h3>
<p>When configuring navigators it’s often useful to pass in default navigation options for the screens inside of that navigator. For example in a stack you might want to set a background color and tint color for each screen. Previously, you would write something like this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Feed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#000'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>As of this release, <code>navigationOptions</code> in navigator configuration like this has been renamed to <code>defaultNavigationOptions</code>.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Feed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">defaultNavigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#000'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Sometimes you need to configure the <code>navigationOptions</code> for a navigator itself. Typically you’d do something like this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigationOptions</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarLabel</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Home!'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>As of this release, you can use <code>navigationOptions</code> in the navigator config for this instead.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Feed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">defaultNavigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#000'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarLabel</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Home!'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Tabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p><a href="https://snack.expo.io/@notbrent/belligerent-pizza" target="_blank" rel="noopener noreferrer" class="">See this example on Snack</a>.</p>
<p>We’re sorry to make you go hunt through your code and rename a handful of strings, the hope is that this change makes the code more readable and more intuitive to new users in the future.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawer-now-keeps-inactive-tabs-in-memory-by-default">Drawer now keeps inactive tabs in memory by default<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#drawer-now-keeps-inactive-tabs-in-memory-by-default" class="hash-link" aria-label="Direct link to Drawer now keeps inactive tabs in memory by default" title="Direct link to Drawer now keeps inactive tabs in memory by default" translate="no">​</a></h3>
<p>Previously when using the drawer navigator screens would unmount when inactive, and when you switch back to them you’d need to re-render the entire thing. In tabs these stay in memory as you would expect, so once you switch to the screen once it’s faster to go back there again and you don’t lose your place in a scroll view or anything. Drawer now behaves the same way, but you can go back to the old behavior if you like by passing in <code>unmountInactiveRoutes: true</code> in the drawer navigation configuration.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="default-stack-background-color-is-now-white">Default stack background color is now white<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#default-stack-background-color-is-now-white" class="hash-link" aria-label="Direct link to Default stack background color is now white" title="Direct link to Default stack background color is now white" translate="no">​</a></h3>
<p>You can customize this by using <code>cardStyle</code>:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain">routes</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">cardStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#ccc'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features">New features<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#new-features" class="hash-link" aria-label="Direct link to New features" title="Direct link to New features" translate="no">​</a></h2>
<ul>
<li class="">react-navigation now exports <code>ScrollView</code>, <code>FlatList</code>, and <code>SectionList</code> that will scroll to top when tapping on the active tab as you would expect from native tab bars.</li>
<li class="">Drawer supports two more types in addition to the default ‘front’ behavior that you expect from typical Android drawers: back and slide.</li>
<li class="">You can now provide default params inside of route definitions:</li>
</ul>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Store</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Playstation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">params</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">product</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Playstation'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Xbox</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">params</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">product</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Xbox'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<ul>
<li class="">Basic support for hooks in <code>react-navigation-hooks</code> (although this isn't too useful yet without a stable react-native build that supports hooks, you can play with it on the web!).</li>
<li class=""><code>headerBackgroundTransitionPreset: 'toggle' | 'fade' | 'translate'</code> lets you choose how to transition your custom <code>headerBackground</code> components between screens.</li>
<li class="">Add options to opt in/out of the stack card overlay and shadow that are visible during transitions: <code>cardShadowEnabled</code> defaults to <code>true</code> and <code>cardOverlayEnabled</code> defaults to <code>false</code>.</li>
<li class="">Export <code>StackGestureContext</code> and <code>DrawerGestureContext</code> from react-navigation-stack and react-navigation-drawer, so you can use the ref from the corresponding gestures with other gesture handlers (eg: <a href="https://github.com/react-navigation/react-navigation-drawer/blob/bf4bdba7f6a4fbc12192f5d5ba2285f6280431b7/example/src/GestureInteraction.js" target="_blank" rel="noopener noreferrer" class="">GestureInteraction.js</a>).</li>
<li class="">Tab navigators support <code>tabBarOnLongPress</code> configuration option, which defaults to the same as the tab press event.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="assorted-fixes--improvements">Assorted fixes &amp; improvements<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#assorted-fixes--improvements" class="hash-link" aria-label="Direct link to Assorted fixes &amp; improvements" title="Direct link to Assorted fixes &amp; improvements" translate="no">​</a></h2>
<ul>
<li class="">Stack transition performance improved greatly by removing the shadow from the entire card and rendering it only on the slice where it is needed. The card opacity is also no longer directly animated but instead an overlay is put on top to create a similar effect but with better performance.</li>
<li class="">Fix long-standing issues with stack that led to quietly re-mounting screens when navigating quickly in certain patterns: <a href="https://github.com/react-navigation/react-navigation/issues/4155" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues/4155</a></li>
<li class="">Support inverted gesture in modals.</li>
<li class="">Stack card gesture uses react-native-gesture-handler and native driver so the gesture runs on the UI thread (except when the gesture ends, then it calls back to JS).</li>
<li class="">Fix a variety of issues with drawer navigator, including issues around nesting (<a href="https://github.com/react-navigation/react-navigation/issues/4154" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues/4154</a>) and bugs with firing open / close (eg: <a href="https://github.com/react-navigation/react-navigation/issues/5146" target="_blank" rel="noopener noreferrer" class="">react-navigation/react-navigation/issues/5146</a>).</li>
<li class="">Fix accessibility voiceover for tabs and stack back button.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ecosystem-and-web-support">Ecosystem and web support<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#ecosystem-and-web-support" class="hash-link" aria-label="Direct link to Ecosystem and web support" title="Direct link to Ecosystem and web support" translate="no">​</a></h2>
<p>React Navigation 3.0 brings some important changes to the React Navigation ecosystem: the project now lives across a number of repositories and packages, we have an exciting new transitioner on the way, and the core finally has first-class support for web apps on the client and server!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="independent-projects">Independent Projects<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#independent-projects" class="hash-link" aria-label="Direct link to Independent Projects" title="Direct link to Independent Projects" translate="no">​</a></h3>
<p>React Navigation has always been a set of loosely-coupled navigation components: Stack, Tabs, Drawer, etc. But until now they have always lived in the main navigation repo, which has been difficult to maintain. People often struggle to use different versions of these components, or they want to fork them for their own app.</p>
<p>In v3, all of our main packages and repos are separated. There are the following core packages in our new NPM org:</p>
<ul>
<li class=""><code>@react-navigation/core</code> - The primitives and utilities that define our patterns, plus several routers</li>
<li class=""><code>@react-navigation/native</code> - Container and support for navigators on React Native apps. <code>createAppContainer</code> from the main <code>react-navigation</code> package actually comes from this package.</li>
<li class=""><code>@react-navigation/web</code> - Web browser app container, and utilities for server rendering</li>
</ul>
<p>In addition, we have published our community-maintained components as standalone repos and packages:</p>
<ul>
<li class=""><code>react-navigation-stack</code></li>
<li class=""><code>react-navigation-tabs</code></li>
<li class=""><code>react-navigation-drawer</code></li>
<li class=""><code>react-navigation-transitioner</code></li>
<li class=""><code>react-navigation-hooks</code></li>
</ul>
<p>To keep the experience as simple as possible the <code>react-navigation</code> package will continue to be supported, and will contain most of the above components as it did before.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-support">Web Support<a href="https://react-navigation-docs.netlify.app/blog/2018/11/17/react-navigation-3.0#web-support" class="hash-link" aria-label="Direct link to Web Support" title="Direct link to Web Support" translate="no">​</a></h3>
<p>Now that the core of React Navigation can be used outside of React Native, we can provide first-class web support to anyone using React.js on the web, including those who do not want to use <code>react-native-web</code>.</p>
<p>Here is an example web app which demonstrates the new <code>createBrowserApp</code> container and the built-in <code>Link</code> component:</p>
<div class="language-jsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-jsx codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createSwitchNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"@react-navigation/core"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createBrowserApp</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Link</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"@react-navigation/web"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">class</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Home</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">React</span><span class="token class-name punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Component</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">static</span><span class="token plain"> path </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">""</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">static</span><span class="token plain"> navigationOptions </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"Home"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token function" style="color:hsl(256, 54%, 50%)">render</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag" style="color:hsl(212, 92%, 35%)">div</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag" style="color:hsl(212, 92%, 35%)">h2</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text">Home Screen</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag" style="color:hsl(212, 92%, 35%)">h2</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Link</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">toRoute</span><span class="token tag attr-value punctuation attr-equals" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag attr-value" style="color:hsl(356, 75%, 47%)">Profile</span><span class="token tag attr-value punctuation" style="color:hsl(212, 13%, 16%)">"</span><span class="token tag" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag attr-name" style="color:hsl(212, 92%, 35%)">params</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:hsl(212, 13%, 16%)">=</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">name</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">"Brent"</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript literal-property property" style="color:hsl(256, 54%, 50%)">view</span><span class="token tag script language-javascript operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript string" style="color:hsl(139, 66%, 32%)">"photos"</span><span class="token tag script language-javascript" style="color:hsl(212, 92%, 35%)"> </span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag script language-javascript punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">          Brent's photos</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag class-name" style="color:hsl(26, 100%, 29%)">Link</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain-text"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&lt;/</span><span class="token tag" style="color:hsl(212, 92%, 35%)">div</span><span class="token tag punctuation" style="color:hsl(212, 13%, 16%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">class</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Profile</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">React</span><span class="token class-name punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Component</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">static</span><span class="token plain"> path </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"/profile/:name"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AppNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createSwitchNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createBrowserApp</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token maybe-class-name">AppNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>The above <code>Link</code> tag will render to:
<code>&lt;a href="/profile/Brent?view=photos"&gt;Brent's Photos&lt;/a&gt;</code></p>
<p>See a simple web app with Create React App <a href="https://github.com/react-navigation/example-web" target="_blank" rel="noopener noreferrer" class="">here</a>. Or take a look at <a href="https://github.com/react-navigation/web-server-example" target="_blank" rel="noopener noreferrer" class="">this razzle app</a> for a more complicated example including server rendering.</p>
<hr>
<p>Thanks for reading, please post any issues you encounter to <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues</a>!</p>]]></content>
        <author>
            <name>Brent Vatne</name>
            <uri>https://bsky.app/profile/notbrent.bsky.social</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[3.0 release candidate]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc"/>
        <updated>2018-11-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are excited to announce the release candidate of version 3.0 today!]]></summary>
        <content type="html"><![CDATA[<p>We are excited to announce the release candidate of version 3.0 today!</p>
<p>This is the first release where React Navigation depends on a native module outside of React Native core: it now depends on react-native-gesture-handler. This library provides an excellent set of primitives for leveraging the operating systems’ native gesture APIs and has enabled us to fix a variety of issues with stack and drawer navigators. React Navigation also depends on react-native-screens, but you don’t need to install the native module if you prefer not to use it (we have a blog post coming soon that will explain what react-native-screens is and why you may want to use it, or you can watch <a href="https://www.youtube.com/watch?v=Z0Jl1KCWiag" target="_blank" rel="noopener noreferrer" class="">this talk</a> by the author of the library).</p>
<p>We didn’t get around to every feature that we wanted to land for this release, but we also didn’t want to hold it up further because we expect that you will want to start using it right away - the release includes performance improvements, bugfixes, ergonomics improvements, some handy new features, and a re-organizing of the internals to improve support for web as a target of React Navigation.</p>
<p>Let’s get started with react-navigation 3.0.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installation">Installation<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation" translate="no">​</a></h2>
<p>First, install the library using your favorite package manager: <code>yarn add react-navigation@^3.0.0-rc.0</code></p>
<p>Next, install react-native-gesture-handler. If you’re using Expo you don’t need to do anything here, it’s included in the SDK. Otherwise: <code>yarn add react-native-gesture-handler &amp;&amp; react-native link</code></p>
<p>Optionally, you can install react-native-screens. If you’re using Expo you don’t need to do anything here, it’s included in SDK 30 and higher. Otherwise, follow the instructions in the README on <a href="https://github.com/software-mansion/react-native-screens" target="_blank" rel="noopener noreferrer" class=""><code>react-native-screens</code></a>.</p>
<blockquote>
<p><strong>Warning</strong>: if you have manually installed any navigators in your project, for example react-navigation-material-bottom-tabs, you will need to update those to a version that is compatible with 3.0.0. In the case of react-navigation-material-bottom-tabs, 1.0.0-alpha.2 is compatible.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-changes">Breaking changes<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes" translate="no">​</a></h2>
<p>When you first run your app after updating it won’t work because react-navigation@^3 requires you to add an app container to the root navigator. Once you get that in place, you may notice that your navigation options aren’t being applied as you expect - this is due to navigationOptions in navigator configuration being renamed to defaultNavigationOptions. If you use a drawer, you may notice that it feels quicker, but if you depend on inactive screens being unmounted you’ll be surprised. More details on these changes and how to update your app to work just as well (probably better) than before below.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="explicit-app-container-required-for-the-root-navigator">Explicit app container required for the root navigator<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#explicit-app-container-required-for-the-root-navigator" class="hash-link" aria-label="Direct link to Explicit app container required for the root navigator" title="Direct link to Explicit app container required for the root navigator" translate="no">​</a></h3>
<p>In the past, any navigator could act as the navigation container at the top-level of your app because they were all wrapped in “navigation containers”. The navigation container, now known as an app container, is a higher-order-component that maintains the navigation state of your app and handles interacting with the outside world to turn linking events into navigation actions and so on.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  createStackNavigator</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports">  createAppContainer</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token imports"></span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'react-navigation'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">MainNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createAppContainer</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token maybe-class-name">MainNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>This should be an easy change - import <code>createAppContainer</code> in the root of your app and use it to wrap the root navigator.</p>
<blockquote>
<p><strong>Warning</strong>: if you have any custom navigators, you may have used <code>createNavigationContainer</code>, you can remove this now because it’s only used at the root of the app and provided by the user.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="renamed-navigationoptions-in-navigator-configuration">Renamed navigationOptions in navigator configuration<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#renamed-navigationoptions-in-navigator-configuration" class="hash-link" aria-label="Direct link to Renamed navigationOptions in navigator configuration" title="Direct link to Renamed navigationOptions in navigator configuration" translate="no">​</a></h3>
<p>When configuring navigators it’s often useful to pass in default navigation options for the screens inside of that navigator. For example in a stack you might want to set a background color and tint color for each screen. Previously, you would write something like this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Feed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#000'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>As of this release, <code>navigationOptions</code> in navigator configuration like this has been renamed to <code>defaultNavigationOptions</code>.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Feed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">defaultNavigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#000'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>Sometimes you need to configure the <code>navigationOptions</code> for a navigator itself. Typically you’d do something like this:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token property-access">navigationOptions</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarLabel</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Home!'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>As of this release, you can use <code>navigationOptions</code> in the navigator config for this instead.</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Feed</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Profile</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ExampleScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">defaultNavigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerTintColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#fff'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">headerStyle</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">backgroundColor</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'#000'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">navigationOptions</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">tabBarLabel</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Home!'</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Tabs</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createBottomTabNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token maybe-class-name">Home</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p><a href="https://snack.expo.io/@notbrent/belligerent-pizza" target="_blank" rel="noopener noreferrer" class="">See this example on Snack</a>.</p>
<p>We’re sorry to make you go hunt through your code and rename a handful of strings, the hope is that this change makes the code more readable and more intuitive to new users in the future.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawer-now-keeps-inactive-tabs-in-memory-by-default">Drawer now keeps inactive tabs in memory by default<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#drawer-now-keeps-inactive-tabs-in-memory-by-default" class="hash-link" aria-label="Direct link to Drawer now keeps inactive tabs in memory by default" title="Direct link to Drawer now keeps inactive tabs in memory by default" translate="no">​</a></h3>
<p>Previously when using the drawer navigator screens would unmount when inactive, and when you switch back to them you’d need to re-render the entire thing. In tabs these stay in memory as you would expect, so once you switch to the screen once it’s faster to go back there again and you don’t lose your place in a scroll view or anything. Drawer now behaves the same way, but you can go back to the old behavior if you like by passing in <code>unmountInactiveRoutes: true</code> in the drawer navigation configuration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features">New features<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#new-features" class="hash-link" aria-label="Direct link to New features" title="Direct link to New features" translate="no">​</a></h2>
<ul>
<li class="">react-navigation now exports <code>ScrollView</code>, <code>FlatList</code>, and <code>SectionList</code> that will scroll to top when tapping on the active tab as you would expect from native tab bars.</li>
<li class="">Drawer supports two more types in addition to the default ‘front’ behavior that you expect from typical Android drawers: back and slide.</li>
<li class="">You can now provide default params inside of route definitions:</li>
</ul>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">Store</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Playstation</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">params</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">product</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Playstation'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">Xbox</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">screen</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">ProductScreen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">params</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">product</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">'Xbox'</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<ul>
<li class="">Basic support for hooks in <code>react-navigation-hooks</code></li>
<li class=""><code>headerBackgroundTransitionPreset: 'toggle' | 'fade' | 'translate'</code> lets you choose how to transition your custom <code>headerBackground</code> components between screens.</li>
<li class="">Add options to opt in/out of the stack card overlay and shadow that are visible during transitions: <code>cardShadowEnabled</code> defaults to <code>true</code> and <code>cardOverlayEnabled</code> defaults to <code>false</code>.</li>
<li class="">Export <code>StackGestureContext</code> and <code>DrawerGestureContext</code> from react-navigation-stack and react-navigation-drawer, so you can use the ref from the corresponding gestures with other gesture handlers (eg: <a href="https://github.com/react-navigation/react-navigation-drawer/blob/bf4bdba7f6a4fbc12192f5d5ba2285f6280431b7/example/src/GestureInteraction.js" target="_blank" rel="noopener noreferrer" class="">GestureInteraction.js</a>).</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="assorted-fixes--improvements">Assorted fixes &amp; improvements<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#assorted-fixes--improvements" class="hash-link" aria-label="Direct link to Assorted fixes &amp; improvements" title="Direct link to Assorted fixes &amp; improvements" translate="no">​</a></h2>
<ul>
<li class="">Stack transition performance improved greatly by removing the shadow from the entire card and rendering it only on the slice where it is needed. The card opacity is also no longer directly animated but instead an overlay is put on top to create a similar effect but with better performance.</li>
<li class="">Fix long-standing issues with stack that led to quietly re-mounting screens when navigating quickly in certain patterns: <a href="https://github.com/react-navigation/react-navigation/issues/4155" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues/415</a></li>
<li class="">Support inverted gesture in modals.</li>
<li class="">Stack card gesture uses react-native-gesture-handler and native driver so the gesture runs on the UI thread (except when the gesture ends, then it calls back to JS).</li>
<li class="">Fix a variety of issues with drawer navigator, including issues around nesting (<a href="https://github.com/react-navigation/react-navigation/issues/4154" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues/4154</a>) and bugs with firing open / close (eg: <a href="https://github.com/react-navigation/react-navigation/issues/5146" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues/5146</a>).</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ecosystem-and-web-support">Ecosystem and web support<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#ecosystem-and-web-support" class="hash-link" aria-label="Direct link to Ecosystem and web support" title="Direct link to Ecosystem and web support" translate="no">​</a></h2>
<p>React Navigation 3.0 brings some important changes to the React Navigation ecosystem: the project now lives across a number of repositories and packages, we have an exciting new transitioner on the way, and the core finally has first-class support for web apps on the client and server!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="independent-projects">Independent Projects<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#independent-projects" class="hash-link" aria-label="Direct link to Independent Projects" title="Direct link to Independent Projects" translate="no">​</a></h3>
<p>React Navigation has always been a set of loosely-coupled navigation components: Stack, Tabs, Drawer, etc. But until now they have always lived in the main navigation repo, which has been difficult to maintain. People often struggle to use different versions of these components, or they want to fork them for their own app.</p>
<p>In v3, all of our main packages and repos are separated. There are the following core packages in our new NPM org:</p>
<ul>
<li class=""><code>@react-navigation/core</code> - The primitives and utilities that define our patterns, plus several routers</li>
<li class=""><code>@react-navigation/native</code> - Container and support for navigators on React Native apps. <code>createAppContainer</code> from the main <code>react-navigation</code> package actually comes from this package.</li>
<li class=""><code>@react-navigation/web</code> - Web browser app container, and utilities for server rendering</li>
</ul>
<p>In addition, we have published our community-maintained components as standalone repos and packages:</p>
<ul>
<li class=""><code>react-navigation-stack</code></li>
<li class=""><code>react-navigation-tabs</code></li>
<li class=""><code>react-navigation-drawer</code></li>
<li class=""><code>react-navigation-transitioner</code></li>
<li class=""><code>react-navigation-hooks</code></li>
</ul>
<p>To keep the experience as simple as possible the <code>react-navigation</code> package will continue to be supported, and will contain most of the above components as it did before.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="web-support">Web Support<a href="https://react-navigation-docs.netlify.app/blog/2018/11/01/react-navigation-3.0-rc#web-support" class="hash-link" aria-label="Direct link to Web Support" title="Direct link to Web Support" translate="no">​</a></h3>
<p>Now that the core of React Navigation can be used outside of React Native, we can provide first-class web support to anyone using React.js on the web, including those who do not want to use <code>react-native-web</code>.</p>
<p>Here is an example web app which demonstrates the new <code>createBrowserApp</code> container and the built-in <code>Link</code> component:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createSwitchNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"@react-navigation/core"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createBrowserApp</span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Link</span><span class="token imports"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"@react-navigation/web"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">class</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Home</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">React</span><span class="token class-name punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Component</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">static</span><span class="token plain"> path </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">""</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">static</span><span class="token plain"> navigationOptions </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">title</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"Home"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token function" style="color:hsl(256, 54%, 50%)">render</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token keyword control-flow" style="color:hsl(356, 75%, 47%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token plain">div</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token plain">h2</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</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:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token plain">h2</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token maybe-class-name">Link</span><span class="token plain"> toRoute</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token string" style="color:hsl(139, 66%, 32%)">"Profile"</span><span class="token plain"> params</span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">name</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"Brent"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">view</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"photos"</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">          </span><span class="token maybe-class-name">Brent</span><span class="token plain">'s photos</span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">        </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token maybe-class-name">Link</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">      </span><span class="token operator" style="color:hsl(212, 92%, 35%)">&lt;</span><span class="token operator" style="color:hsl(212, 92%, 35%)">/</span><span class="token plain">div</span><span class="token operator" style="color:hsl(212, 92%, 35%)">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">class</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Profile</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">extends</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(26, 100%, 29%)">React</span><span class="token class-name punctuation" style="color:hsl(212, 13%, 16%)">.</span><span class="token class-name" style="color:hsl(26, 100%, 29%)">Component</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token keyword" style="color:hsl(356, 75%, 47%)">static</span><span class="token plain"> path </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(139, 66%, 32%)">"/profile/:name"</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token spread operator" style="color:hsl(212, 92%, 35%)">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">AppNavigator</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createSwitchNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token maybe-class-name">Home</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain">  </span><span class="token maybe-class-name">Profile</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword" style="color:hsl(356, 75%, 47%)">const</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token plain"> </span><span class="token operator" style="color:hsl(212, 92%, 35%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">createBrowserApp</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token maybe-class-name">AppNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">export</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">default</span><span class="token plain"> </span><span class="token maybe-class-name">App</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>The above <code>Link</code> tag will render to:
<code>&lt;a href=``"``/profile/Brent?view=photos``"``&gt;Brent's Photos&lt;/a&gt;</code></p>
<p>See a simple web app with Create React App <a href="https://github.com/react-navigation/example-web" target="_blank" rel="noopener noreferrer" class="">here</a>. Or take a look at <a href="https://github.com/react-navigation/web-server-example" target="_blank" rel="noopener noreferrer" class="">this razzle app</a> for a more complicated example including server rendering.</p>
<hr>
<p>Thanks for reading, please post any issues you encounter to <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">react-navigation/issues</a>!</p>]]></content>
        <author>
            <name>Brent Vatne</name>
            <uri>https://bsky.app/profile/notbrent.bsky.social</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 2.0]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0"/>
        <updated>2018-05-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The documentation is now live at reactnavigation.org, and v1 lives here.]]></summary>
        <content type="html"><![CDATA[<p>The documentation is now live at <a href="https://reactnavigation.org/" target="_blank" rel="noopener noreferrer" class="">reactnavigation.org</a>, and v1 lives <a class="" href="https://react-navigation-docs.netlify.app/docs/1.x/getting-started">here</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="significant-breaking-changes">Significant breaking changes<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#significant-breaking-changes" class="hash-link" aria-label="Direct link to Significant breaking changes" title="Direct link to Significant breaking changes" translate="no">​</a></h2>
<p>The following changes are considered “significant” because they can’t be fixed by search and replace or something that is similarly mechanical.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigateroutename-in-stacknavigator-is-less-pushy"><code>navigate(routeName)</code> in StackNavigator is “less pushy”<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#navigateroutename-in-stacknavigator-is-less-pushy" class="hash-link" aria-label="Direct link to navigateroutename-in-stacknavigator-is-less-pushy" title="Direct link to navigateroutename-in-stacknavigator-is-less-pushy" translate="no">​</a></h3>
<p>In 1.x, <code>navigate(routeName)</code> and <code>push(routeName)</code> were very similar: every time you called <code>navigate(routeName)</code> it would push a new route to the stack. Now <code>navigate(routeName)</code> will first try to find an existing instance of the route and jump to that if it exists, otherwise it will push the route to the stack.</p>
<p>To update your app for this change you may need to change <code>navigate</code> to <code>push</code> in places where you would like to push a new route every time. Alternatively, you could consider using a <code>key</code>: <code>navigate({routeName: ‘MyRoute’, key: data.uniqueId, params: data})</code>. <a class="" href="https://react-navigation-docs.netlify.app/docs/2.x/navigation-key">Read more about navigation with keys</a>.</p>
<p>Read more about this in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0004-less-pushy-navigate.md" target="_blank" rel="noopener noreferrer" class="">RFC 4</a> and <a href="https://github.com/react-navigation/react-navigation/commit/7a978b1087ff3acc7dd71267bd900d15c932d7cc" target="_blank" rel="noopener noreferrer" class="">commit 7a978b1</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="push-now-propagates-between-routers-like-navigate"><code>push</code> now propagates between routers like <code>navigate</code><a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#push-now-propagates-between-routers-like-navigate" class="hash-link" aria-label="Direct link to push-now-propagates-between-routers-like-navigate" title="Direct link to push-now-propagates-between-routers-like-navigate" translate="no">​</a></h3>
<p>Previously, <code>push</code> only applied to the deepest active stack router. This meant that if you had Stack A &gt; Stack B and Stack B fired <code>push(‘MyRoute’)</code>, even if Stack B does not have a route with the name <code>’MyRoute’</code> and Stack A does, the screen would not be pushed. We made this change to accommodate for the “less pushy” navigate behavior.</p>
<p>When updating your app, you may want to double check where you use <code>push</code> to ensure that this doesn’t impact the expected behavior of your app.</p>
<p>Read about this in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0004-less-pushy-navigate.md#drawbacks" target="_blank" rel="noopener noreferrer" class="">RFC 4</a> and <a href="https://github.com/react-navigation/react-navigation/pull/3617" target="_blank" rel="noopener noreferrer" class="">pull 3617</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="shallow-navigation-options">Shallow navigation options<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#shallow-navigation-options" class="hash-link" aria-label="Direct link to Shallow navigation options" title="Direct link to Shallow navigation options" translate="no">​</a></h3>
<p>A common source of confusion for developers working with React Navigation has been around <code>navigationOptions</code> resolution. For example, if you have a stack navigator with a header, and a drawer inside of that stack, then in some circumstances the title of the stack would change every time you change screens in the drawer. This is because the stack navigator would crawl into child navigators and pull <code>navigationOptions</code> off of the deepest active screen. As of 2.0, this no longer happens: navigators will only look at their direct children for <code>navigationOptions</code>.</p>
<p>Read more about the justification for this in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0005-shallow-navigation-options.md" target="_blank" rel="noopener noreferrer" class="">RFC 5</a>. Also see the new documentation page <a class="" href="https://react-navigation-docs.netlify.app/docs/2.x/navigation-options-resolution">Navigation options resolution</a> to learn more.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-api-for-creating-navigators">New API for creating navigators<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#new-api-for-creating-navigators" class="hash-link" aria-label="Direct link to New API for creating navigators" title="Direct link to New API for creating navigators" translate="no">​</a></h3>
<p>It is now easier to create and maintain custom navigators. The new <code>createNavigator</code> API fully decouples the navigation view from the router. Information about each screen is available on a single "descriptor", including the pre-computed child navigation prop, allowing you to focus on custom navigation views.</p>
<p>Custom navigators can now provide actions helpers for their screens. For example, the new drawer navigator now allows <code>props.navigation.openDrawer()</code> within its screen components.</p>
<p>This does not impact most users - you won't need to make any changes for this unless you use custom navigators in your app. Read more about the changes in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0002-navigator-view-api.md" target="_blank" rel="noopener noreferrer" class="">RFC 2</a>. Also read the <a class="" href="https://react-navigation-docs.netlify.app/docs/2.x/custom-navigators">custom navigators documentation</a>. You can also watch the <a href="https://youtu.be/wJJZ9Od8MjM?t=1215" target="_blank" rel="noopener noreferrer" class="">"Creating a navigator" section in this talk</a> to learn more.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="trivial-breaking-changes">Trivial breaking changes<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#trivial-breaking-changes" class="hash-link" aria-label="Direct link to Trivial breaking changes" title="Direct link to Trivial breaking changes" translate="no">​</a></h2>
<p>The following changes are considered “trivial” because you will only need make straightforward and mechanical changes to update your app for them.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawer-routes-have-been-replaced-with-actions">Drawer routes have been replaced with actions<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#drawer-routes-have-been-replaced-with-actions" class="hash-link" aria-label="Direct link to Drawer routes have been replaced with actions" title="Direct link to Drawer routes have been replaced with actions" translate="no">​</a></h3>
<p>Rather than opening a drawer with <code>navigation.navigate(‘DrawerOpen’)</code>, you can now call <code>navigation.openDrawer()</code>. Other methods are <code>closeDrawer()</code> and <code>toggleDrawer()</code>. See <a href="https://github.com/react-navigation/react-navigation/pull/3618" target="_blank" rel="noopener noreferrer" class="">pull 3618</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigation-actions-api-overhaul">Navigation actions API overhaul<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#navigation-actions-api-overhaul" class="hash-link" aria-label="Direct link to Navigation actions API overhaul" title="Direct link to Navigation actions API overhaul" translate="no">​</a></h3>
<p>In practice, this change is unlikely to impact your app at all except for one case that is mentioned below.</p>
<p>In 1.x, functions on the <code>navigation</code> were not contextual - they would be the same regardless of whether your screen was inside of a drawer, a stack, a tab navigator, etc. In 2.0 the functions that are available to you on the <code>navigation</code> prop depend on the navigators that it corresponds to. If your screen is inside of both a stack and a drawer navigator, you will have helpers for both -- <code>push</code> and <code>openDrawer</code>, for example.</p>
<p>Given that we only exposed generic helpers (<code>navigate</code>, <code>goBack</code>) and helpers specific to the stack in 1.x, this would only impact you if you attempted to use the stack helpers from outside of a stack. For example, if you had a tab navigator with a stack in tab A and just a plain screen in tab B, then tried to <code>push</code> a route from the screen in tab B, <code>push</code> would not be available. Keep this in mind when you update your app if it follows this type of structure.</p>
<p>One of the big improvements you get from this is that you can now add your own helpers to the <code>navigation</code> prop! Read more in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0006-action-creators.md" target="_blank" rel="noopener noreferrer" class="">RFC 6</a> and in <a href="https://github.com/react-navigation/react-navigation/pull/3392" target="_blank" rel="noopener noreferrer" class="">pull 3392</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigationactions-no-longer-have-tostring-implementations-related">NavigationActions no longer have <code>toString()</code> implementations (<a href="https://github.com/react-navigation/react-navigation/issues/4072" target="_blank" rel="noopener noreferrer" class="">related</a>)<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#navigationactions-no-longer-have-tostring-implementations-related" class="hash-link" aria-label="Direct link to navigationactions-no-longer-have-tostring-implementations-related" title="Direct link to navigationactions-no-longer-have-tostring-implementations-related" translate="no">​</a></h3>
<p>This change was intended to simplify the implementation of actions. We may go back on this, however, and apologize in advance if this thrasing causes you trouble.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigationactions-split-up-according-to-router">NavigationActions split up according to router<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#navigationactions-split-up-according-to-router" class="hash-link" aria-label="Direct link to NavigationActions split up according to router" title="Direct link to NavigationActions split up according to router" translate="no">​</a></h3>
<p>If you are using <code>NavigationActions.push</code> or other stack-specific actions, you’ll need to import <code>StackActions</code> and use <code>StackActions.push</code> instead.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deprecations">Deprecations<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#deprecations" class="hash-link" aria-label="Direct link to Deprecations" title="Direct link to Deprecations" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="xnavigator-is-now-createxnavigator">XNavigator(...) is now createXNavigator(...)<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#xnavigator-is-now-createxnavigator" class="hash-link" aria-label="Direct link to XNavigator(...) is now createXNavigator(...)" title="Direct link to XNavigator(...) is now createXNavigator(...)" translate="no">​</a></h3>
<p><code>StackNavigator</code>, <code>TabNavigator</code> and <code>DrawerNavigator</code> are now deprecated in favour of <code>createStackNavigator</code>, <code>createTabNavigator</code>, and <code>createDrawerNavigator</code>, which are functionally identical but more clearly communicate that they are functions and that they return a component. The <code>XNavigator</code> style will removed in 3.0.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tab-navigator-split-into-separate-components">Tab navigator split into separate components<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#tab-navigator-split-into-separate-components" class="hash-link" aria-label="Direct link to Tab navigator split into separate components" title="Direct link to Tab navigator split into separate components" translate="no">​</a></h3>
<p>Previously, <code>TabNavigator</code> would render a navigation bar on the top of the screen on Android and the bottom on iOS. We’ve now pulled these navigators apart, so you can use <code>createBottomTabNavigator</code>and <code>createMaterialTopTabNavigator</code> explicitly depending on what you need. You can use <code>createTabNavigator</code> to have the same behavior as before, but it will be removed in 3.0.</p>
<p>It is worth noting additionally that <code>createBottomTabNavigator</code> is different from the bottom tab navigator that is available through <code>TabNavigator</code> in that it does not support <code>animationEnabled</code> or <code>swipeEnabled</code> properties.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enhancements">Enhancements<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#enhancements" class="hash-link" aria-label="Direct link to Enhancements" title="Direct link to Enhancements" translate="no">​</a></h2>
<ul>
<li class="">dangerouslyGetParent and dismiss helpers on navigation prop (<a href="https://github.com/react-navigation/react-navigation/pull/3669" target="_blank" rel="noopener noreferrer" class="">3669</a>)</li>
<li class="">State persistence - automatically save state and reload it when the app restarts (<a href="https://github.com/react-navigation/react-navigation/pull/3716" target="_blank" rel="noopener noreferrer" class="">3716</a>)</li>
<li class="">Smoothly transition header visibility in Stack (<a href="https://github.com/react-navigation/react-navigation/pull/3821" target="_blank" rel="noopener noreferrer" class="">3821</a>)</li>
<li class="">Add initialRouteKey for StackRouter (<a href="https://github.com/react-navigation/react-navigation/pull/3540" target="_blank" rel="noopener noreferrer" class="">3540</a>)</li>
<li class="">Make StackNavigator keyboard aware -- it hides automatically when you start to swipe back, and refocuses if you cancel the swipe back gesture (<a href="https://github.com/react-navigation/react-navigation/pull/3951" target="_blank" rel="noopener noreferrer" class="">3951</a>)</li>
<li class="">Allow modification of SafeAreaView props in header (<a href="https://github.com/react-navigation/react-navigation/pull/3496" target="_blank" rel="noopener noreferrer" class="">3496</a>)</li>
<li class="">Add <code>createMaterialBottomTabNavigator</code> for a material design style tab bar. (see <a href="https://github.com/react-navigation/react-navigation-tabs" target="_blank" rel="noopener noreferrer" class="">react-navigation-tabs</a>).</li>
<li class="">Use findIndex instead of map/indexOf in StateUtils (<a href="https://github.com/react-navigation/react-navigation/commit/47fe858d4ec339d2b1f4b96f3a5444aed8f6f900" target="_blank" rel="noopener noreferrer" class="">commit</a></li>
<li class="">Warn when users have multiple stateful navigation containers (<a href="https://github.com/react-navigation/react-navigation/commit/68a2a106f370003dc1d46385fd8b5992be189ee2" target="_blank" rel="noopener noreferrer" class="">commit</a>)</li>
<li class="">Remove almost all uses of React 16 deprecated lifecycle methods (<a href="https://github.com/react-navigation/react-navigation/commit/3f837c895e823de4d528b55fd70ee7ba167480d8" target="_blank" rel="noopener noreferrer" class="">commit</a>)</li>
<li class="">Add <code>activeLabelStyle</code> and <code>inactiveLabelStyle</code> for <code>DrawerItem</code> (<a href="https://github.com/react-navigation/react-navigation/commit/7c488c8d4974028f85a4c5171d27209fa099170f" target="_blank" rel="noopener noreferrer" class="">commit</a>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bugfixes">Bugfixes<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#bugfixes" class="hash-link" aria-label="Direct link to Bugfixes" title="Direct link to Bugfixes" translate="no">​</a></h2>
<ul>
<li class="">Avoid unnecessary navigation completion dispatches (<a href="https://github.com/react-navigation/react-navigation/pull/3902" target="_blank" rel="noopener noreferrer" class="">3902</a>)</li>
<li class="">Use Header.HEIGHT instead of measuring to avoid flicker (<a href="https://github.com/react-navigation/react-navigation/pull/3940" target="_blank" rel="noopener noreferrer" class="">3940</a>)</li>
<li class="">Implement paths on <code>SwitchRouter</code> (<a href="https://github.com/react-navigation/react-navigation/commit/5e4512f3ebef587bf90e4ec4d660708b72a0a865" target="_blank" rel="noopener noreferrer" class="">commit</a>).</li>
<li class=""><code>SwitchRouter</code> now returns <code>null</code> on idempotent navigation (<a href="https://github.com/react-navigation/react-navigation/commit/577d99c1658ef85c061c82d55bf349c38e161e97" target="_blank" rel="noopener noreferrer" class="">commit</a>).</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="final-notes">Final notes<a href="https://react-navigation-docs.netlify.app/blog/2018/05/07/react-navigation-2.0#final-notes" class="hash-link" aria-label="Direct link to Final notes" title="Direct link to Final notes" translate="no">​</a></h2>
<p>The breaking changes and deprecations in this release resolve a lot of issues that users have encountered that have been perceived as bugs but were technically expected behavior. We think that we’ve drastically improved library ergonomics for new users and experienced users alike, let us know <a href="https://twitter.com/reactnavigation" target="_blank" rel="noopener noreferrer" class="">on Twitter</a> what you think.</p>
<p>We’ve <a href="https://github.com/react-navigation/react-navigation/issues/3686" target="_blank" rel="noopener noreferrer" class="">started to plan for 3.0</a>. Please get involved by <a href="https://react-navigation.canny.io/feature-requests" target="_blank" rel="noopener noreferrer" class="">posting your feature requests to Canny</a>, <a href="https://github.com/react-navigation/rfcs/issues" target="_blank" rel="noopener noreferrer" class="">opening a RFC</a>, or letting us know about bugs with a well-formulated <a href="https://github.com/react-navigation/react-navigation/issues/new" target="_blank" rel="noopener noreferrer" class="">issue</a>!</p>]]></content>
        <author>
            <name>Brent Vatne</name>
            <uri>https://bsky.app/profile/notbrent.bsky.social</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[2.0 release candidate]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc"/>
        <updated>2018-04-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Exactly two months after the release of React Navigation 1.0, we are close to another major version release. We’d like to invite developers that use the library to give the release candidate a try in your app and let us know if you encounter any issues.]]></summary>
        <content type="html"><![CDATA[<p>Exactly two months after the release of React Navigation 1.0, we are close to another major version release. We’d like to invite developers that use the library to give the release candidate a try in your app and let us know if you encounter any issues.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token function" style="color:hsl(256, 54%, 50%)">yarn</span><span class="token plain"> </span><span class="token function" style="color:hsl(256, 54%, 50%)">add</span><span class="token plain"> react-navigation@^2.0.0-rc.1</span><br></span></code></pre></div></div>
<p>The documentation for 2.0 is available at <a href="https://reactnavigation.org/" target="_blank" rel="noopener noreferrer" class="">reactnavigation.org</a></p>
<p>We’re bumping the major version because some of the changes in this release are backwards incompatible. That said, this should be a fairly easy upgrade. We are improving React Navigation incrementally because we don't want to leave developers feeling stranded in an old version. If you use React Navigation in a conventional way and don't have any custom navigators, I can't imagine this update would take you more than an hour.</p>
<p>This blog post is not a comprehensive changelog - that will come with the 2.0 proper release; the following is a list of the breaking changes, suggestions for how you can update your app to accommodate them, notice of deprecations, and some of my favourite new features.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-changes">Breaking changes<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigateroutename-in-stacknavigator-is-less-pushy"><code>navigate(routeName)</code> in StackNavigator is “less pushy”<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#navigateroutename-in-stacknavigator-is-less-pushy" class="hash-link" aria-label="Direct link to navigateroutename-in-stacknavigator-is-less-pushy" title="Direct link to navigateroutename-in-stacknavigator-is-less-pushy" translate="no">​</a></h3>
<p>In 1.x, <code>navigate(routeName)</code> and <code>push(routeName)</code> were very similar: every time you called <code>navigate(routeName)</code> it would push a new route to the stack, regardless. Now <code>navigate(routeName)</code> will first try to find an existing instance of the route and jump to that if it exists, otherwise it will push the route to the stack.</p>
<p>To update your app for this change you may need to change <code>navigate</code> to <code>push</code> in places where you would like to push a new route every time. Alternatively, you could consider using a <code>key</code>: <code>navigate({routeName: ‘MyRoute’, key: data.uniqueId, params: data})</code>. <a class="" href="https://react-navigation-docs.netlify.app/docs/2.x/navigation-key">Read more about navigation with keys</a>.</p>
<p>Read more about this in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0004-less-pushy-navigate.md" target="_blank" rel="noopener noreferrer" class="">RFC 4</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="push-now-propagates-between-routers-like-navigate"><code>push</code> now propagates between routers like <code>navigate</code><a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#push-now-propagates-between-routers-like-navigate" class="hash-link" aria-label="Direct link to push-now-propagates-between-routers-like-navigate" title="Direct link to push-now-propagates-between-routers-like-navigate" translate="no">​</a></h3>
<p>Previously, <code>push</code> only applied to the deepest active stack router. This meant that if you had Stack A &gt; Stack B and Stack B fired <code>push(‘MyRoute’)</code>, even if Stack B does not have a route with the name <code>’MyRoute’</code> and Stack A does, the screen would not be pushed. We made this change to accommodate for the “less pushy” navigate behavior.</p>
<p>When updating your app, you may want to double check where you use <code>push</code>to ensure that this doesn’t impact the expected behavior of your app.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="shallow-navigation-options">Shallow navigation options<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#shallow-navigation-options" class="hash-link" aria-label="Direct link to Shallow navigation options" title="Direct link to Shallow navigation options" translate="no">​</a></h3>
<p>A common source of confusion for developers working with React Navigation has been around <code>navigationOptions</code> resolution. For example, if you have a stack navigator with a header, and a drawer inside of that stack, then in some circumstances the title of the stack would change every time you change screens in the drawer. This is because the stack navigator would crawl into child navigators and pull <code>navigationOptions</code> off of the deepest active screen. As of 2.0, this no longer happens: navigators will only look at their direct children for <code>navigationOptions</code>. Read more about this in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0005-shallow-navigation-options.md" target="_blank" rel="noopener noreferrer" class="">RFC 5</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-api-for-creating-navigators">New API for creating navigators<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#new-api-for-creating-navigators" class="hash-link" aria-label="Direct link to New API for creating navigators" title="Direct link to New API for creating navigators" translate="no">​</a></h3>
<p>This does not impact most users, but if you have any custom navigators in your app, read on. Read more about the changes in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0002-navigator-view-api.md" target="_blank" rel="noopener noreferrer" class="">RFC 2</a>. Also read the <a class="" href="https://react-navigation-docs.netlify.app/docs/2.x/custom-navigators">custom navigators documentation</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="drawer-routes-have-been-replaced-with-actions">Drawer routes have been replaced with actions<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#drawer-routes-have-been-replaced-with-actions" class="hash-link" aria-label="Direct link to Drawer routes have been replaced with actions" title="Direct link to Drawer routes have been replaced with actions" translate="no">​</a></h3>
<p>Rather than opening a drawer with <code>navigation.navigate(‘DrawerOpen’)</code>, you can now call <code>navigation.openDrawer()</code>. Other methods are <code>closeDrawer()</code> and <code>toggleDrawer()</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigation-actions-api-overhaul">Navigation actions API overhaul<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#navigation-actions-api-overhaul" class="hash-link" aria-label="Direct link to Navigation actions API overhaul" title="Direct link to Navigation actions API overhaul" translate="no">​</a></h3>
<p>In 1.x, functions on the <code>navigation</code> were not contextual - they would be the same regardless of whether your screen was inside of a drawer, a stack, a tab navigator, etc. In 2.0 the functions that are available to you on the <code>navigation</code> prop depend on the navigators that it corresponds to. If your screen is inside of both a stack and a drawer navigator, you will have helpers for both -- <code>push</code> and <code>openDrawer</code>, for example.</p>
<p>Given that we only exposed generic helpers (<code>navigate</code>, <code>goBack</code>) and helpers specific to the stack in 1.x, this would only impact you if you attempted to use the stack helpers from outside of a stack. For example, if you had a tab navigator with a stack in tab A and just a plain screen in tab B, then tried to <code>push</code> a route from the screen in tab B, <code>push</code> would not be available. Keep this in mind when you update your app if it follows this type of structure.</p>
<p>One of the big improvements you get from this is that you can now add your own helpers to the <code>navigation</code> prop! Read more in <a href="https://github.com/react-navigation/rfcs/blob/master/text/0006-action-creators.md" target="_blank" rel="noopener noreferrer" class="">RFC 6</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="deprecations">Deprecations<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#deprecations" class="hash-link" aria-label="Direct link to Deprecations" title="Direct link to Deprecations" translate="no">​</a></h2>
<p>The following APIs are deprecated and will be removed in 3.0.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="xnavigator-is-now-named-createxnavigator">XNavigator is now named createXNavigator<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#xnavigator-is-now-named-createxnavigator" class="hash-link" aria-label="Direct link to XNavigator is now named createXNavigator" title="Direct link to XNavigator is now named createXNavigator" translate="no">​</a></h3>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:hsl(212, 13%, 16%);--prism-background-color:hsl(256, 12%, 98%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:hsl(212, 13%, 16%);background-color:hsl(256, 12%, 98%)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token keyword module" style="color:hsl(356, 75%, 47%)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token imports"> createStackNavigator </span><span class="token imports punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token plain"> </span><span class="token keyword module" style="color:hsl(356, 75%, 47%)">from</span><span class="token plain"> ‘react</span><span class="token operator" style="color:hsl(212, 92%, 35%)">-</span><span class="token plain">navigation’</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:hsl(212, 13%, 16%)"><span class="token plain"></span><span class="token function" style="color:hsl(256, 54%, 50%)">createStackNavigator</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">(</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">{</span><span class="token literal-property property" style="color:hsl(256, 54%, 50%)">routeName</span><span class="token operator" style="color:hsl(212, 92%, 35%)">:</span><span class="token plain"> </span><span class="token maybe-class-name">Screen</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">}</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">)</span><span class="token punctuation" style="color:hsl(212, 13%, 16%)">;</span><br></span></code></pre></div></div>
<p>This change was made to improve the ease of learning and understanding the library. The navigator constructors are functions that return components (HOCs), and that was not previously very well communicated by the name.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tabnavigator-has-been-split-up-into-more-focused-navigators"><code>TabNavigator</code> has been split up into more focused navigators<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#tabnavigator-has-been-split-up-into-more-focused-navigators" class="hash-link" aria-label="Direct link to tabnavigator-has-been-split-up-into-more-focused-navigators" title="Direct link to tabnavigator-has-been-split-up-into-more-focused-navigators" translate="no">​</a></h3>
<p><code>TabNavigator</code> (now <code>createTabNavigator</code> as per above) was a frequent source of confusion for users because it would use a bottom tab bar on iOS and a top tab bar on Android by default. Additionally, some of the configuration properties applied to the bottom tab bar, and others to the top tab bar. The equivalent components are now: <code>createBottomTabNavigator</code> and <code>createMaterialTopTabNavigator</code>. We’ve also introduced a new type of tab navigator, <code>createMaterialBottomTabNavigator</code> - a material design styled bottom tab bar based navigator from <a href="https://github.com/callstack/react-native-paper" target="_blank" rel="noopener noreferrer" class="">react-native-paper</a>. Thank you <a href="http://github.com/satya164" target="_blank" rel="noopener noreferrer" class="">satya164</a> for your great work on this!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-feature-highlights">New feature highlights<a href="https://react-navigation-docs.netlify.app/blog/2018/04/06/react-navigation-2.0-rc#new-feature-highlights" class="hash-link" aria-label="Direct link to New feature highlights" title="Direct link to New feature highlights" translate="no">​</a></h2>
<ul>
<li class="">State persistence - automatically save state and reload it when the app restarts. See <a class="" href="https://react-navigation-docs.netlify.app/docs/state-persistence">state persistence docs</a></li>
<li class="">Transitions between screens in stack with headers and without headers now animates as expected on iOS. <a href="https://github.com/react-navigation/react-navigation/pull/3821" target="_blank" rel="noopener noreferrer" class="">#3821</a>. Thanks <a href="https://github.com/skevy" target="_blank" rel="noopener noreferrer" class="">skevy</a>!</li>
<li class="">As mentioned above, <code>createMaterialBottomNavigator</code> is a new navigator type that provides the material design bottom tab bar pattern.</li>
</ul>]]></content>
        <author>
            <name>Brent Vatne</name>
            <uri>https://bsky.app/profile/notbrent.bsky.social</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[React Navigation 1.0 (goodbye, beta!)]]></title>
        <id>https://react-navigation-docs.netlify.app/blog/2018/02/06/react-navigation-1.0</id>
        <link href="https://react-navigation-docs.netlify.app/blog/2018/02/06/react-navigation-1.0"/>
        <updated>2018-02-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[As of today, React Navigation version 1.0 has been released! To see a list of recent improvements leading up to the release, refer to the “Renewed Path to React Navigation V1.0” issue. Thank you to everybody who has filed high-quality bug reports, submitted pull requests, and helped out fellow developers while we were in beta!]]></summary>
        <content type="html"><![CDATA[<p>As of today, React Navigation version 1.0 has been released! To see a list of recent improvements leading up to the release, refer to the “<a href="https://github.com/react-navigation/react-navigation/issues/2585" target="_blank" rel="noopener noreferrer" class="">Renewed Path to React Navigation V1.0</a>” issue. Thank you to everybody who has filed high-quality bug reports, submitted pull requests, and helped out fellow developers while we were in beta!</p>
<p>This release isn’t meant to be interpreted as a signal that React Navigation is “finished" — work is already underway on a number of significant changes to the API that aim to make React Navigation easier to use and more powerful. These changes will be run through our <a href="https://github.com/react-navigation/rfcs" target="_blank" rel="noopener noreferrer" class="">new RFC process</a>. For example, the <a href="https://github.com/react-navigation/rfcs/blob/master/text/0002-navigator-view-api.md" target="_blank" rel="noopener noreferrer" class="">Navigator View API RFC</a> outlines a plan to decouple views from the router in order to make it easier for other navigation APIs, such as <a href="https://github.com/aksonov/react-native-router-flux" target="_blank" rel="noopener noreferrer" class="">react-native-router-flux</a> and <a href="https://github.com/ReactTraining/react-router/tree/master/packages/react-router-native" target="_blank" rel="noopener noreferrer" class="">react-router-native</a>, to build on top of the same navigation views. We’re also very excited about a plan (no RFC is open yet, but keep an eye out for it) to use <a href="https://github.com/software-mansion/react-native-gesture-handler" target="_blank" rel="noopener noreferrer" class="">react-native-gesture-handler</a> to run navigation gestures (sliding a drawer open, or swiping back on a stack, for example) on the UI thread using the Animated native driver.</p>
<p>Last week we released an updated version of our <a class="" href="https://react-navigation-docs.netlify.app/docs/1.x/getting-started">documentation website</a>, built using <a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer" class="">Docusaurus</a>. We hope that the new documentation will help newcomers get onboarded with the fundamentals of React Navigation, and serve as an ongoing resource to handle specific use cases as you come across them (under the “How do I do..?” section). <a href="https://github.com/react-navigation/react-navigation.github.io" target="_blank" rel="noopener noreferrer" class="">Contributions to the documentation are very welcome</a>.</p>
<p><a class="" href="https://react-navigation-docs.netlify.app/docs/1.x/getting-started">Give React Navigation 1.0 a try</a>, <a href="https://react-navigation.canny.io/feature-requests" target="_blank" rel="noopener noreferrer" class="">post a feature request</a> if you think something is missing, <a href="https://github.com/react-navigation/rfcs" target="_blank" rel="noopener noreferrer" class="">open a RFC</a> if you have an idea of how to implement it, <a href="https://github.com/react-navigation/react-navigation/issues" target="_blank" rel="noopener noreferrer" class="">file a detailed bug report</a> when you encounter problems (or <a href="https://github.com/react-navigation/react-navigation/pulls" target="_blank" rel="noopener noreferrer" class="">open a pull request</a> if you know how to fix them)! Updating your existing installation should be easy if you have tracked releases over recent months — <a href="https://github.com/react-navigation/react-navigation/releases/tag/1.0.0" target="_blank" rel="noopener noreferrer" class="">read the brief release notes</a> for more information.</p>]]></content>
        <author>
            <name>Brent Vatne</name>
            <uri>https://bsky.app/profile/notbrent.bsky.social</uri>
        </author>
        <category label="release" term="release"/>
        <category label="announcement" term="announcement"/>
    </entry>
</feed>