forked from facebook/react-native
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
141 lines (132 loc) · 23.8 KB
/
index.html
File metadata and controls
141 lines (132 loc) · 23.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Using Hermes · React Native</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="<a href="https://hermesengine.dev">"/><meta name="docsearch:version" content="0.60"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Using Hermes · React Native"/><meta property="og:type" content="website"/><meta property="og:url" content="https://reactnative.dev/"/><meta property="og:description" content="<a href="https://hermesengine.dev">"/><meta property="og:image" content="https://reactnative.dev/img/logo-og.png"/><meta name="twitter:card" content="summary"/><meta name="twitter:image" content="https://reactnative.dev/img/logo-og.png"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/solarized-dark.min.css"/><link rel="alternate" type="application/atom+xml" href="https://reactnative.dev/blog/atom.xml" title="React Native Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://reactnative.dev/blog/feed.xml" title="React Native Blog RSS Feed"/><script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-41298772-2', 'auto');
ga('send', 'pageview');
</script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/focus-visible@5.0.2/dist/focus-visible.min.js"></script><script type="text/javascript" src="https://snack.expo.io/embed.js"></script><script type="text/javascript" src="https://platform.twitter.com/widgets.js"></script><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="/js/codeblocks.js"></script><script type="text/javascript" src="/js/tabs.js"></script><script type="text/javascript" src="/js/docs-rating.js"></script><script type="text/javascript" src="/js/announcement.js"></script><script src="https://unpkg.com/vanilla-back-to-top@7.1.14/dist/vanilla-back-to-top.min.js"></script><script>
document.addEventListener('DOMContentLoaded', function() {
addBackToTop(
{"zIndex":100}
)
});
</script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/prism.css"/><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/header_logo.svg" alt="React Native"/><h2 class="headerTitleWithLogo">React Native</h2></a><a href="/versions"><h3>0.60</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/0.60/getting-started" target="_self">Docs</a></li><li class=""><a href="/docs/0.60/components-and-apis" target="_self">Components</a></li><li class=""><a href="/docs/0.60/accessibilityinfo" target="_self">API</a></li><li class=""><a href="/help" target="_self">Community</a></li><li class=""><a href="/blog/" target="_self">Blog</a></li><li class="navSearchWrapper reactNavSearchWrapper"><input type="text" id="search_input_react" placeholder="Search" title="Search"/></li><li class=""><a href="https://github.com/facebook/react-native" target="_self">GitHub</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Guides (Android)</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">The Basics<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.60/getting-started">Getting Started</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/tutorial">Learn the Basics</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/style">Style</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/height-and-width">Height and Width</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/flexbox">Layout with Flexbox</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/handling-text-input">Handling Text Input</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/handling-touches">Handling Touches</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/using-a-scrollview">Using a ScrollView</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/using-a-listview">Using List Views</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/network">Networking</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/more-resources">More Resources</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Guides<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.60/platform-specific-code">Platform Specific Code</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/navigation">Navigating Between Screens</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/images">Images</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/animations">Animations</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/accessibility">Accessibility</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/improvingux">Improving User Experience</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/optimizing-flatlist-configuration">Optimizing Flatlist Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/timers">Timers</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/debugging">Debugging</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/performance">Performance</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/gesture-responder-system">Gesture Responder System</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/javascript-environment">JavaScript Environment</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/typescript">Using TypeScript with React Native</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/direct-manipulation">Direct Manipulation</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/colors">Color Reference</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/integration-with-existing-apps">Integration with Existing Apps</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/building-for-tv">Building For TV Devices</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/running-on-device">Running On Device</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/upgrading">Upgrading to new React Native versions</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/troubleshooting">Troubleshooting</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/native-modules-setup">Native Modules Setup</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/out-of-tree-platforms">Out-of-Tree Platforms</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Guides (iOS)<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.60/native-modules-ios">Native Modules</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/native-components-ios">Native UI Components</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/linking-libraries-ios">Linking Libraries</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/running-on-simulator-ios">Running On Simulator</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/communication-ios">Communication between native and React Native</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/app-extensions">App Extensions</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Guides (Android)<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/0.60/native-modules-android">Native Modules</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/native-components-android">Native UI Components</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/headless-js-android">Headless JS</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/signed-apk-android">Publishing to Google Play Store</a></li><li class="navListItem"><a class="navItem" href="/docs/0.60/removing-default-permissions">Removing Default Permissions</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/0.60/hermes">Using Hermes</a></li></ul></div></div></section></div><script>
var coll = document.getElementsByClassName('collapsible');
var checkActiveCategory = true;
for (var i = 0; i < coll.length; i++) {
var links = coll[i].nextElementSibling.getElementsByTagName('*');
if (checkActiveCategory){
for (var j = 0; j < links.length; j++) {
if (links[j].classList.contains('navListItemActive')){
coll[i].nextElementSibling.classList.toggle('hide');
coll[i].childNodes[1].classList.toggle('rotate');
checkActiveCategory = false;
break;
}
}
}
coll[i].addEventListener('click', function() {
var arrow = this.childNodes[1];
arrow.classList.toggle('rotate');
var content = this.nextElementSibling;
content.classList.toggle('hide');
});
}
document.addEventListener('DOMContentLoaded', function() {
createToggler('#navToggler', '#docsNav', 'docsSliderActive');
createToggler('#tocToggler', 'body', 'tocActive');
var headings = document.querySelector('.toc-headings');
headings && headings.addEventListener('click', function(event) {
var el = event.target;
while(el !== headings){
if (el.tagName === 'A') {
document.body.classList.remove('tocActive');
break;
} else{
el = el.parentNode;
}
}
}, false);
function createToggler(togglerSelector, targetSelector, className) {
var toggler = document.querySelector(togglerSelector);
var target = document.querySelector(targetSelector);
if (!toggler) {
return;
}
toggler.onclick = function(event) {
event.preventDefault();
target.classList.toggle(className);
};
}
});
</script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><a class="edit-page-link button" href="https://github.com/facebook/react-native-website/blob/master/docs/hermes.md" target="_blank" rel="noreferrer noopener">Edit</a><h1 id="__docusaurus" class="postHeaderTitle">Using Hermes</h1></header><article><div><span><p><a href="https://hermesengine.dev">
<img width="300" height="300" style="float: right; margin: -30px 4px 0;" src="/docs/assets/HermesLogo.svg"/>
</a></p>
<p><a href="https://hermesengine.dev">Hermes</a> is an open-source JavaScript engine optimized for running React Native apps on Android. For many apps, enabling Hermes will result in improved start-up time, decreased memory usage, and smaller app size. At this time Hermes is an <strong>opt-in</strong> React Native feature, and this guide explains how to enable it.</p>
<p>First, ensure you're using at least version 0.60.4 of React Native.</p>
<p>If you have an existing app based on an earlier version of React Native, you will have to upgrade it first. See <a href="/docs/upgrading">Upgrading to new React Native Versions</a> for how to do this. Make especially sure that all changes to <code>android/app/build.gradle</code> have been applied, as detailed by the <a href="https://react-native-community.github.io/upgrade-helper/?from=0.59.0">React Native upgrade helper</a>. After upgrading the app, make sure everything works before trying to switch to Hermes.</p>
<blockquote>
<h2><a class="anchor" aria-hidden="true" id="note-for-windows-users"></a><a href="#note-for-windows-users" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Note for Windows users.</h2>
<p>Hermes requires <a href="https://www.microsoft.com/en-us/download/details.aspx?id=48145">Microsoft Visual C++ 2015 Redistributable</a></p>
</blockquote>
<p>Edit your <code>android/app/build.gradle</code> file and make the change illustrated below:</p>
<pre><code class="hljs css language-diff"> project.ext.react = [
entryFile: "index.js",
<span class="hljs-deletion">- enableHermes: false // clean and rebuild if changing</span>
<span class="hljs-addition">+ enableHermes: true // clean and rebuild if changing</span>
]
</code></pre>
<p>Also, if you're using ProGuard, you will need to add this rule in <code>proguard-rules.pro</code> :</p>
<pre><code class="hljs">-<span class="ruby">keep <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">com</span>.<span class="hljs-title">facebook</span>.<span class="hljs-title">hermes</span>.<span class="hljs-title">unicode</span>.** { *;</span> }
</span></code></pre>
<p>Next, if you've already built your app at least once, clean the build:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> <span class="hljs-built_in">cd</span> android && ./gradlew clean</span>
</code></pre>
<p>That's it! You should now be able to develop and deploy your app as normal:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> react-native run-android</span>
</code></pre>
<h2><a class="anchor" aria-hidden="true" id="confirming-hermes-is-in-use"></a><a href="#confirming-hermes-is-in-use" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Confirming Hermes is in use</h2>
<p>If you've recently created a new app from scratch you should see if Hermes is enabled in the welcome view:</p>
<p><img src="/docs/assets/HermesApp.jpg" alt="Where to find JS engine status in AwesomeProject"></p>
<p>A <code>HermesInternal</code> global variable will be available in JavaScript that can be used to verify that Hermes is in use:</p>
<pre><code class="hljs css language-jsx"><span class="token keyword">const</span> <span class="token function-variable function">isHermes</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> global<span class="token punctuation">.</span>HermesInternal <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">;</span>
</code></pre>
<p>To see the benefits of Hermes, try making a release build/deployment of your app to compare. For example:</p>
<pre><code class="hljs css language-shell"><span class="hljs-meta">$</span><span class="bash"> react-native run-android --variant release</span>
</code></pre>
<p>This will compile JavaScript to bytecode during build time which will improve your app's startup speed on device.</p>
<h2><a class="anchor" aria-hidden="true" id="debugging-hermes-using-google-chromes-devtools"></a><a href="#debugging-hermes-using-google-chromes-devtools" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Debugging Hermes using Google Chrome's DevTools</h2>
<p>Hermes supports the Chrome debugger by implementing the Chrome inspector protocol. This means Chrome's tools can be used to directly debug JavaScript running on Hermes, on an emulator or device.</p>
<p>Chrome connects to Hermes running on device via Metro, so you'll need to know where Metro is listening. Typically this will be on <code>localhost:8081</code>, but this is <a href="https://facebook.github.io/metro/docs/en/configuration">configurable</a>. When running <code>yarn start</code> the address is written to stdout on startup.</p>
<p>Once you know where the Metro server is listening, you can connect with Chrome using the following steps:</p>
<ol>
<li><p>Navigate to <code>chrome://inspect</code> in a Chrome browser instance.</p></li>
<li><p>Use the <code>Configure...</code> button to add the Metro server address (typically <code>localhost:8081</code> as described above).</p></li>
</ol>
<p><img src="/docs/assets/HermesDebugChromeConfig.png" alt="Configure button in Chrome DevTools devices page"></p>
<p><img src="/docs/assets/HermesDebugChromeMetroAddress.png" alt="Dialog for adding Chrome DevTools network targets"></p>
<ol start="3">
<li><p>You should now see a "Hermes React Native" target with an "inspect" link which can be used to bring up debugger. If you don't see the "inspect" link, make sure the Metro server is running. <img src="/docs/assets/HermesDebugChromeInspect.png" alt="Target inspect link"></p></li>
<li><p>You can now use the Chrome debug tools. For example, to breakpoint the next time some JavaScript is run, click on the pause button and trigger an action in your app which would cause JavaScript to execute. <img src="/docs/assets/HermesDebugChromePause.png" alt="Pause button in debug tools"></p></li>
</ol>
</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/0.60/removing-default-permissions"><span class="arrow-prev">← </span><span>Removing Default Permissions</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#note-for-windows-users">Note for Windows users.</a></li><li><a href="#confirming-hermes-is-in-use">Confirming Hermes is in use</a></li><li><a href="#debugging-hermes-using-google-chromes-devtools">Debugging Hermes using Google Chrome's DevTools</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><div><h5>Docs</h5><a href="/docs/getting-started">Getting Started</a><a href="/docs/tutorial">Tutorial</a><a href="/docs/components-and-apis">Components and APIs</a><a href="/docs/more-resources">More Resources</a></div><div><h5>Community</h5><a href="/help">The React Native Community</a><a href="/showcase">Who's using React Native?</a><a href="https://stackoverflow.com/questions/tagged/react-native" target="_blank">Ask Questions on Stack Overflow</a><a href="https://github.com/facebook/react-native/blob/master/CONTRIBUTING.md">Contributor Guide</a><a href="https://dev.to/t/reactnative" target="_blank">DEV Community</a></div><div><h5>More Resources</h5><a href="/blog">Blog</a><a href="https://twitter.com/reactnative" target="_blank">Twitter</a><a href="https://github.com/facebook/react-native" target="_blank">GitHub</a><a href="https://reactjs.org" target="_blank">React</a></div></section><a href="https://code.facebook.com/projects/" target="_blank" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Facebook Open Source" width="170" height="45"/></a><section class="copyright">Copyright © 2020 Facebook Inc.</section></footer></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script><script>window.fbAsyncInit = function() {FB.init({appId:'1677033832619985',xfbml:true,version:'v2.7'});};(function(d, s, id){var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.src = '//connect.facebook.net/en_US/sdk.js';fjs.parentNode.insertBefore(js, fjs);}(document, 'script','facebook-jssdk'));
</script><script>window.twttr=(function(d,s, id){var js,fjs=d.getElementsByTagName(s)[0],t=window.twttr||{};if(d.getElementById(id))return t;js=d.createElement(s);js.id=id;js.src='https://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js, fjs);t._e = [];t.ready = function(f) {t._e.push(f);};return t;}(document, 'script', 'twitter-wjs'));</script><script>
document.addEventListener('keyup', function(e) {
if (e.target !== document.body) {
return;
}
// keyCode for '/' (slash)
if (e.keyCode === 191) {
const search = document.getElementById('search_input_react');
search && search.focus();
}
});
</script><script>
var search = docsearch({
apiKey: '2c98749b4a1e588efec53b2acec13025',
indexName: 'react-native-versions',
inputSelector: '#search_input_react',
algoliaOptions: {"facetFilters":["tags:0.60"],"hitsPerPage":5}
});
</script></body></html>