Files
react-native/blog/index.html
T
Website Deployment Script d2ac6ca15d Deploy website
Deploy website version based on b2c277fb5d7992e4031c7cf33dcd070d6e9a8366
2020-07-28 22:41:37 +00:00

490 lines
123 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Blog · React Native</title><meta name="viewport" content="width=device-width"/><meta name="generator" content="Docusaurus"/><meta name="description" content="A framework for building native apps using React"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Blog · React Native"/><meta property="og:type" content="website"/><meta property="og:url" content="https://reactnative.dev/"/><meta property="og:description" content="A framework for building native apps using React"/><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 type="text/javascript" src="/js/survey-banner.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="blog"><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.63</h3></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/getting-started" target="_self">Docs</a></li><li class=""><a href="/docs/components-and-apis" target="_self">Components</a></li><li class=""><a href="/docs/accessibilityinfo" target="_self">API</a></li><li class=""><a href="/help" target="_self">Community</a></li><li class="siteNavGroupActive siteNavItemActive"><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>All Blog Posts</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">All Blog Posts</h3><ul class=""><li class="navListItem"><a class="navItem" href="/blog/2020/07/23/docs-update">React Native Documentation Update</a></li><li class="navListItem"><a class="navItem" href="/blog/2020/07/17/react-native-principles">React Native Team Principles</a></li><li class="navListItem"><a class="navItem" href="/blog/2020/07/06/version-0.63">Announcing React Native 0.63 with LogBox</a></li><li class="navListItem"><a class="navItem" href="/blog/2020/03/26/version-0.62">Announcing React Native 0.62 with Flipper</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/11/18/react-native-doctor">Meet Doctor, a new React Native command</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/09/18/version-0.61">Announcing React Native 0.61 with Fast Refresh</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/07/17/hermes">Meet Hermes, a new JavaScript Engine optimized for React Native</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/07/03/version-60">Announcing React Native 0.60</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/06/12/react-native-open-source-update">React Native Open Source Update June 2019</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/05/01/react-native-at-f8-and-podcast">React Native at F8 and Open Source Podcast</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/03/12/releasing-react-native-059">Releasing React Native 0.59</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/03/01/react-native-open-source-update">React Native Open Source Update March 2019</a></li><li class="navListItem"><a class="navItem" href="/blog/2019/01/07/state-of-react-native-community">The State of the React Native Community in 2018</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/11/01/oss-roadmap">Open Source Roadmap</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/08/27/wkwebview">Introducing new iOS WebViews</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/08/13/react-native-accessibility-updates">Accessibility API Updates</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/07/04/releasing-react-native-056">Releasing 0.56</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/06/14/state-of-react-native-2018">State of React Native 2018</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/05/07/using-typescript-with-react-native">Using TypeScript with React Native</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/04/09/build-com-app">Built with React Native - The Build.com app</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/03/22/building-input-accessory-view-for-react-native">Building &lt;InputAccessoryView&gt; For React Native</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/03/05/AWS-app-sync">Using AWS with React Native</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/01/18/implementing-twitters-app-loading-animation-in-react-native">Implementing Twitters App Loading Animation in React Native</a></li><li class="navListItem"><a class="navItem" href="/blog/2018/01/09/react-native-monthly-6">React Native Monthly #6</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/11/06/react-native-monthly-5">React Native Monthly #5</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/09/21/react-native-monthly-4">React Native Monthly #4</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/08/30/react-native-monthly-3">React Native Monthly #3</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/08/07/react-native-performance-in-marketplace">React Native Performance in Marketplace</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/07/28/react-native-monthly-2">React Native Monthly #2</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/06/21/react-native-monthly-1">React Native Monthly #1</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/03/13/introducing-create-react-native-app">Introducing Create React Native App</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/03/13/better-list-views">Better List Views in React Native</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/03/13/idx-the-existential-function">idx: The Existential Function</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/02/14/using-native-driver-for-animated">Using Native Driver for Animated</a></li><li class="navListItem"><a class="navItem" href="/blog/2017/01/07/monthly-release-cadence">A Monthly Release Cadence: Releasing December and January RC</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/12/05/easier-upgrades">Easier Upgrades Thanks to Git</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/11/08/introducing-button-yarn-and-a-public-roadmap">Introducing Button, Faster Installs with Yarn, and a Public Roadmap</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/10/25/0.36-headless-js-the-keyboard-api-and-more">0.36: Headless JS, the Keyboard API, &amp; more</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/09/08/exponent-talks-unraveling-navigation">Expo Talks: Adam on Unraveling Navigation</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/08/19/right-to-left-support-for-react-native-apps">Right-to-Left Layout Support For React Native Apps</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/08/12/react-native-meetup-san-francisco">San Francisco Meetup Recap</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/07/06/toward-better-documentation">Toward Better Documentation</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/04/13/react-native-a-year-in-review">React Native: A year in review</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/03/28/dive-into-react-native-performance">Dive into React Native Performance</a></li><li class="navListItem"><a class="navItem" href="/blog/2016/03/24/introducing-hot-reloading">Introducing Hot Reloading</a></li><li class="navListItem"><a class="navItem" href="/blog/2015/11/23/making-react-native-apps-accessible">Making React Native apps accessible</a></li><li class="navListItem"><a class="navItem" href="/blog/2015/09/14/react-native-for-android">React Native for Android: How we built the first cross-platform React Native app</a></li><li class="navListItem"><a class="navItem" href="/blog/2015/03/26/react-native-bringing-modern-web-techniques-to-mobile">React Native: Bringing modern web techniques to mobile</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 postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2020/07/23/docs-update">React Native Documentation Update</a></h1><p class="post-meta">July 23, 2020</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/rachelnabors" target="_blank" rel="noreferrer noopener">Rachel Nabors</a>Documentation Engineer at Facebook</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/rachelnabors" target="_blank" rel="noreferrer noopener"><img src="https://avatars0.githubusercontent.com/u/236306?s=460&amp;v=4" alt="Rachel Nabors"/></a></div></div></header><article class="post-content"><div><span><p>Last year we conducted user interviews and sent out <a href="https://www.surveymonkey.co.uk/r/DDZWQDJ">a survey</a> to learn more about how and when people use the React Native docs. With the data and guidance gleaned from 24 interviews and over 3000 survey responses, we've been able to work to improve React Native's documentation, and we're excited to share that progress today:</p>
<ul>
<li><strong><a href="https://reactnative.dev/docs/getting-started">New Getting Started guides</a></strong> We launched new Getting Started with docs to <a href="https://reactnative.dev/docs/intro-react-native-components">explain what Native Components</a> are to people with no mobile development background. We also included a <a href="https://reactnative.dev/docs/intro-react">refresher/introduction to React</a> to help folks getting started with React for the first time!</li>
<li><strong><a href="https://reactnative.dev/docs/testing-overview">New Testing guide</a></strong> We worked with Vojtech Novak to create a new illustrated testing guide that introduces app developers to different kinds of testing strategies and how they work in a React Native workflow.</li>
<li><strong><a href="https://reactnative.dev/docs/security">New Security guide</a></strong> We worked with Kadi Kraman to create a new illustrated security guide that explains the basics of security in a React Native world and puts forth best in class solutions.</li>
<li><strong>More illustrations</strong> We've added fancy new illustrations, including the new <a href="https://reactnative.dev/docs/pressable"><code>Pressable</code></a> and <a href="https://reactnative.dev/docs/intro-react-native-components">introduction to React Native components</a> docs</li>
<li><strong><a href="https://reactnative.dev">https://reactnative.dev</a></strong> After 5 years we finally moved to our own domain! <strong>reactnative.dev</strong> is easier to autocomplete from your browser bar and is easier to type out than our previous <strong>github.io</strong> address!</li>
<li><strong>Site design and architecture improvements</strong> We've updated the design and site architecture to surface and categorize more of our guides and make content in the API reference more readable. Kudos especially to <a href="https://github.com/Simek">Bartosz Kaszubowski</a> whose attention to detail and collaboration has made many of these changes possible quickly!</li>
<li><strong>Updated Core Component and API docs</strong> We held a <a href="https://github.com/facebook/react-native-website/issues/1579">documentation drive</a> to update reference docs! Thanks to these and other participants we were able to fully update the docs and add Snack examples to all of them in time for 0.62: <a href="https://twitter.com/martadabrowka">Marta Dabrowka</a>, <a href="https://twitter.com/nnajiabraham">Abraham Nnaji</a>, <a href="https://twitter.com/ahmdtalat">Ahmed Talaat El-Hager</a>, <a href="https://twitter.com/mohamedsgap">Mohamed Abdel Nasser Abdou</a>, <a href="https://twitter.com/danilobrinu">Danilo Britto</a>, <a href="https://twitter.com/mitulsavani">Mitul Savani</a>, <a href="https://twitter.com/kaiodduarte">Kaio Duarte</a>, <a href="https://twitter.com/espipj">Pablo Espinosa</a>, <a href="https://twitter.com/natural_clar">Jesse Katsumata</a>, <a href="https://twitter.com/gedeagas">I Gede Agastya Darma Laksana</a>, <a href="https://twitter.com/bruno_kiafuka">Sebastião Bruno Kiafuka Fernando</a>, <a href="https://twitter.com/Darking360">Miguel Bolivar</a>, <a href="https://twitter.com/dani_akash_">Dani Akash</a>, <a href="https://twitter.com/_eucelso">Luiz Celso de Faria Alves</a>, and <a href="https://twitter.com/simek">Bartosz Kaszubowski</a>. With their contributions, these are the best and most up to date React Native docs yet!</li>
<li><strong>Keep those PRs coming!</strong> We are able to consistently keep our open PRs under 10 per week! Thank you for sending them!</li>
</ul>
<p>Thank you so much to everyone who participated in the interviews, the survey, and our documentation efforts! Your collaboration makes this possible.</p>
<h2><a class="anchor" aria-hidden="true" id="whats-next"></a><a href="#whats-next" 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>Whats next?</h2>
<p>The global COVID-19 pandemic has impacted many community members jobs.</p>
<p>We are responding with additional content including:</p>
<ul>
<li>New and improved Native Modules guides</li>
<li>Introductory content for people coming in to React Native for the first time</li>
</ul>
<h3><a class="anchor" aria-hidden="true" id="you-can-help"></a><a href="#you-can-help" 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>You can help!</h3>
<p>There are many ways you can help us write even better docs!</p>
<ol>
<li>If you see a typo, run into an issue with a guide, or something otherwise isnt quite right, click that “Edit” button and submit a PR.</li>
<li><a href="https://www.surveymonkey.co.uk/r/DDZWQDJ">Participate in our survey</a>—this helps us understand how you use React Native and its documentation</li>
<li>Write for us! Were working on a tutorial section as well as guides for topics like offline apps, navigation, accessibility, debugging, animations, internationalization, and performance. If you or someone you admire or know is a perfect fit for any of these, please <a href="https://twitter.com/rachelnabors">reach out to me</a>!</li>
</ol>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2020/07/17/react-native-principles">React Native Team Principles</a></h1><p class="post-meta">July 17, 2020</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/Eli_White" target="_blank" rel="noreferrer noopener">Eli White</a>Engineering Manager on React Native</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/Eli_White" target="_blank" rel="noreferrer noopener"><img src="https://avatars2.githubusercontent.com/u/249164?s=460&amp;v=4" alt="Eli White"/></a></div></div></header><article class="post-content"><div><span><p>The React Native team at Facebook is guided by principles that help determine how we prioritize our work on React Native. These principles represent our team specifically and do not necessarily represent every stakeholder in the React Native community. We are sharing these principles here to be more transparent about what drives us, how we make decisions, and how we focus our efforts.</p>
<h2><a class="anchor" aria-hidden="true" id="native-experience"></a><a href="#native-experience" 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><strong>Native Experience</strong></h2>
<p>Our top priority for React Native is to <strong>match the expectations people have for each platform</strong>. This is why React Native renders to platform primitives. We value native look-and-feel over cross-platform consistency.</p>
<p>For example, the TextInput in React Native renders to a UITextField on iOS. This ensures that integration with password managers and keyboard controls work out of the box. By using platform primitives, React Native apps are also able to stay up-to-date with design and behavior changes from new releases of Android and iOS.</p>
<p>In order to match the look-and-feel of native apps, we must also match their performance. This is where we focus our most ambitious efforts. For example, Facebook created Hermes, <a href="https://facebook.github.io/react-native/blog/2019/07/17/hermes">a new JavaScript Engine built from scratch for React Native on Android</a>. Hermes significantly improves the start time of React Native apps. We are also working on major architectural changes that optimize the threading model and make React Native easier to interoperate with native code.</p>
<h2><a class="anchor" aria-hidden="true" id="massive-scale"></a><a href="#massive-scale" 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>Massive Scale</h2>
<p>Hundreds of screens in the Facebook app are implemented with React Native. The Facebook app is used by billions of people on a huge range of devices. <strong>This is why</strong> <strong>we invest in the most challenging problems at scale.</strong></p>
<p>Deploying React Native in our apps lets us identify problems that we wouldnt see at a smaller scale. For example, Facebook focuses on improving performance across a broad spectrum of devices from the newest iPhone to many older generations of Android devices. This focus informs our architecture projects such as Hermes, Fabric, and TurboModules.</p>
<p>We have proven that React Native can scale to massive organizations too. When hundreds of developers are working on the same app, gradual adoption is a must. This is why we made sure that React Native can be adopted one screen at a time. Soon, we will be taking this one step further and enable migrating individual native views of an existing native screen to React Native.</p>
<p>A focus on massive scale means there are many things our team isnt currently working on. For example, our team doesnt drive the adoption of React Native in the industry. We also do not actively build solutions for problems that we dont see at scale. We are proud that we have <a href="https://github.com/facebook/react-native/blob/master/ECOSYSTEM.md">many partners and core contributors</a> that are able to focus on those important areas for the community.</p>
<h2><a class="anchor" aria-hidden="true" id="developer-velocity"></a><a href="#developer-velocity" 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>Developer Velocity</h2>
<p>Great user experiences are created iteratively. <strong>It should only take a few seconds to seeing the result of code changes</strong> in a running app. React Native's architecture enables it to provide near-instant feedback during development.</p>
<p>We often hear from teams that adopting React Native significantly improved their development velocity. These teams find that the instant feedback during development makes it much easier to try different ideas and add extra polish when they dont have to interrupt their coding session for every little change. When we make changes to React Native, we make sure to preserve this quality of the developer experience.</p>
<p>Instant feedback is not the only way that React Native improves developer velocity. Teams can easily leverage the fast-growing ecosystem of high quality open source packages. Teams can also share business logic between Android, iOS, and the web. This helps them ship updates faster and reduce organizational silos between platform teams.</p>
<h2><a class="anchor" aria-hidden="true" id="every-platform"></a><a href="#every-platform" 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>Every Platform</h2>
<p>When we introduced React Native in 2014, we presented it with our motto “Learn once, write anywhere” — and we mean <em>anywhere</em>. <strong>Developers should be able to reach as many people as possible without being limited by device model or operating system.</strong></p>
<p>React Native targets very different platforms including mobile, desktop, web, TV, VR, game consoles, and more. We want to enable rich experiences on each platform instead of requiring developers to build for the lowest common denominator. To accomplish this, we focus on supporting the unique features of each platform. This ranges from varying input mechanisms (e.g. touch, pen, mouse) to fundamentally different consumption experiences like 3D environments in VR.</p>
<p>This principle informed our decision to implement React Natives new core architecture in cross-platform C++ to promote parity across platforms. We are also refining the public interface targeted at other platform maintainers like Microsoft with Windows and macOS. We strive to enable any platforms to support React Native.</p>
<h2><a class="anchor" aria-hidden="true" id="declarative-ui"></a><a href="#declarative-ui" 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>Declarative UI</h2>
<p>We dont believe in deploying the exact same user interface on every platform, we believe in <strong>exposing each platforms unique capabilities with the same declarative programming model</strong>. Our declarative programming model is React.</p>
<p>In our experience, the unidirectional data flow popularized by React makes applications easier to understand. We prefer to express a screen as a composition of declarative components rather than imperatively managed views. Reacts success on the web and the direction of the new native Android and iOS frameworks show that the industry has also embraced declarative UI.</p>
<p>React popularized declarative user interfaces. However, there remain many unsolved problems that React is uniquely positioned to solve. React Native will continue to build on top of the innovations of React and remain at the forefront of the declarative user interface movement.</p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2020/07/06/version-0.63">Announcing React Native 0.63 with LogBox</a></h1><p class="post-meta">July 6, 2020</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/grabbou" target="_blank" rel="noreferrer noopener">Mike Grabowski</a>CTO and Co-Founder at Callstack</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/grabbou" target="_blank" rel="noreferrer noopener"><img src="https://avatars0.githubusercontent.com/u/2464966?s=460&amp;v=4" alt="Mike Grabowski"/></a></div></div></header><article class="post-content"><div><span><p>Today were releasing React Native 0.63 that ships with LogBox turned on by default.</p>
<h2><a class="anchor" aria-hidden="true" id="logbox"></a><a href="#logbox" 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>LogBox</h2>
<p>Weve heard frequent feedback from the community that errors and warnings are difficult to debug in React Native. To address these issues we took a look at the entire error, warning, and log system in React Native and redesigned it <a href="https://www.youtube.com/watch?v=Y8brBH5O-bQ&amp;feature=youtu.be">from the ground up</a>.</p>
<p><img src="/blog/assets/0.63-logbox.png" alt="Screenshot of LogBox"></p>
<p>LogBox is a completely redesigned redbox, yellowbox, and logging experience in React Native. In 0.62 we introduced LogBox as an opt-in. In this release, were launching LogBox as the default experience in all of React Native.</p>
<p>LogBox addresses complaints that errors and warnings were too verbose, poorly formatted, or unactionable by focusing on three primary goals:</p>
<ul>
<li><strong>Concise</strong>: Logs should provide the minimum amount of information necessary to debug an issue.</li>
<li><strong>Formatted</strong>: Logs should be formatted so that you can quickly find the information you need.</li>
<li><strong>Actionable</strong>: Logs should be actionable, so you can fix the issue and move on.</li>
</ul>
<p>To achieve these goals, LogBox includes:</p>
<ul>
<li><strong>Log notifications</strong>: Weve redesigned the warning notifications and added support for errors so that all console.warn and console.log messages show up as notifications instead of covering your app.</li>
<li><strong>Code Frames</strong>: Every error and warning now includes a code frame that shows the source code of the log right inside the app, allowing you to quickly identify the source of your issue.</li>
<li><strong>Component Stacks</strong>: All component stacks are now stripped from error messages and put into their own section with the top three frames visible. This gives you a single, consistent space to expect stack frame information that doesnt clutter the log message.</li>
<li><strong>Stack Frame Collapsing</strong>: By default we now collapse call stack frames not related to your applications code so you can quickly see the issue in your app and not sift through React Native internals.</li>
<li><strong>Syntax Error Formatting</strong>: Weve improved the formatting for syntax errors and added codeframes with syntax highlighting so you can see the source of the error, fix it, and continue coding without React Native getting in your way.</li>
</ul>
<p>Weve wrapped all of these features into an improved visual design thats consistent between errors and warnings and allows paginating through all logs in one enjoyable UI.</p>
<p>With this change were also deprecating YellowBox in favor of LogBox APIs:</p>
<ul>
<li><code>LogBox.ignoreLogs()</code>: This function replaces <code>YellowBox.ignoreLogs([])</code> as a way to silence any logs that match the given strings or regexes.</li>
<li><code>LogBox.ignoreAllLogs()</code>: This function replaces <code>console.disableYellowBox</code> as a way to turn off error or warning notifications. Note: this only disables notifications, uncaught errors will still open a full screen LogBox.</li>
</ul>
<p>In 0.63, we will warn when using these deprecated modules or methods. Please update your call sites off of these APIs before they are removed in 0.64.</p>
<p>For more information on LogBox and debugging react native, see the docs <a href="https://reactnative.dev/docs/debugging#in-app-errors-and-warnings">here</a>.</p>
<h2><a class="anchor" aria-hidden="true" id="pressable"></a><a href="#pressable" 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>Pressable</h2>
<p>React Native is built to enable applications to meet users expectations of the platform. This includes avoiding “tells”—little things that give away that the experience was built with React Native. One major source of these tells has been the Touchable components: <code>Button</code>, <code>TouchableWithoutFeedback</code>, <code>TouchableHighlight</code>, <code>TouchableOpacity</code>, <code>TouchableNativeFeedback</code>, and <code>TouchableBounce</code>. These components make your application interactive by allowing you to provide visual feedback to user interactions. However, because they include built-in styles and effects that dont match the platform interaction, users can tell when experiences are written with React Native.</p>
<p>Further, as React Native has grown and our bar for high-quality applications has gone up, these components haven't grown with it. React Native now supports platforms like Web, Desktop, and TV, but support for additional input modalities has been lacking. React Native needs to support high-quality interaction experiences on all platforms.</p>
<p>To address these problems, we are shipping a new core component called <code>Pressable</code>. This component can be used to detect various types of interactions. The API was designed to provide direct access to the current state of interaction without having to maintain state manually in a parent component. It was also designed to enable platforms to extend it's capabilities to include hover, blur, focus, and more. We expect that most people will build and share components utilizing <code>Pressable</code> under the hood instead of relying on the default experience of something like <code>TouchableOpacity</code>.</p>
<pre><code class="hljs css language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> Pressable<span class="token punctuation">,</span> Text <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-native'</span><span class="token punctuation">;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Pressable</span></span>
<span class="token attr-name">onPress</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'pressed'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">}</span></span>
<span class="token attr-name">style</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token punctuation">(</span><span class="token parameter"><span class="token punctuation">{</span> pressed <span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token punctuation">{</span>
backgroundColor<span class="token punctuation">:</span> pressed <span class="token operator">?</span> <span class="token string">'lightskyblue'</span> <span class="token punctuation">:</span> <span class="token string">'white'</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Text</span></span> <span class="token attr-name">style</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>styles<span class="token punctuation">.</span>text<span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">Press Me!</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Pressable</span></span><span class="token punctuation">></span></span><span class="token punctuation">;</span>
</code></pre>
<p class="snippet-caption">
A simple example of a Pressable component in action
</p>
<p>You can learn more about it from <a href="https://reactnative.dev/docs/pressable">the documentation</a>.</p>
<h2><a class="anchor" aria-hidden="true" id="native-colors-platformcolor-dynamiccolorios"></a><a href="#native-colors-platformcolor-dynamiccolorios" 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>Native Colors (PlatformColor, DynamicColorIOS)</h2>
<p>Every native platform has the concept of system-defined colors. Colors that automatically respond to system theme settings such as Light or Dark mode, accessibility settings such as a High Contrast mode, and even its context within the app such as the traits of a containing view or window.</p>
<p>While it is possible to detect some of these settings via the <a href="https://reactnative.dev/docs/appearance#getcolorscheme"><code>Appearance</code></a> API and/or <a href="https://reactnative.dev/docs/accessibilityinfo#isgrayscaleenabled"><code>AccessibilityInfo</code></a> and set your styles accordingly, such abstractions are not only costly to develop but are just approximating the appearance of native colors. These inconsistencies are particularly noticeable when working on a hybrid application, where React Native elements co-exist next to the native ones.</p>
<p>React Native now provides an out-of-the-box solution to use these system colors. <code>PlatformColor()</code> is a new API that can be used like any other color in React Native.</p>
<p>For example, on iOS, the <a href="https://developer.apple.com/documentation/uikit/uicolor/ui_element_colors?language=objc">system provides a color called <code>labelColor</code></a>. That can be used in React Native with <code>PlatformColor</code> like this:</p>
<pre><code class="hljs css language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> Text<span class="token punctuation">,</span> PlatformColor <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-native'</span><span class="token punctuation">;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Text</span></span> <span class="token attr-name">style</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token punctuation">{</span> color<span class="token punctuation">:</span> <span class="token function">PlatformColor</span><span class="token punctuation">(</span><span class="token string">'labelColor'</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">
This is a label
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token punctuation">;</span>
</code></pre>
<p class="snippet-caption">
Sets the color of the Text component to labelColor as defined by iOS.
</p>
<p>Android, on the other hand, <a href="https://developer.android.com/reference/android/R.attr#colorButtonNormal">provides colors like colorButtonNormal</a>. You can use this color in React Native with:</p>
<pre><code class="hljs css language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> View<span class="token punctuation">,</span> Text<span class="token punctuation">,</span> PlatformColor <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-native'</span><span class="token punctuation">;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">View</span></span>
<span class="token attr-name">style</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token punctuation">{</span>
backgroundColor<span class="token punctuation">:</span> <span class="token function">PlatformColor</span><span class="token punctuation">(</span><span class="token string">'?attr/colorButtonNormal'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token plain-text">This is colored like a button!</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token plain-text">
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">View</span></span><span class="token punctuation">></span></span><span class="token punctuation">;</span>
</code></pre>
<p class="snippet-caption">
Sets the background color of the View component to colorButtonNormal as defined by Android.
</p>
<p>You can learn more about <code>PlatformColor</code> from <a href="https://reactnative.dev/docs/platformcolor">the documentation</a>. You can also check the actual <a href="https://github.com/facebook/react-native/blob/master/RNTester/js/examples/PlatformColor/PlatformColorExample.js">code examples present in the RNTester</a>.</p>
<p><code>DynamicColorIOS</code> is an iOS only API that lets you define which color to use in light and dark mode. Similar to <code>PlatformColor</code>, this can be used anywhere you can use colors. <code>DynamicColorIOS</code> uses iOSs <code>colorWithDynamicProvider</code> under the hood.</p>
<pre><code class="hljs css language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> Text<span class="token punctuation">,</span> DynamicColorIOS <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-native'</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> customDynamicTextColor <span class="token operator">=</span> <span class="token function">DynamicColorIOS</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
dark<span class="token punctuation">:</span> <span class="token string">'lightskyblue'</span><span class="token punctuation">,</span>
light<span class="token punctuation">:</span> <span class="token string">'midnightblue'</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Text</span></span> <span class="token attr-name">style</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token punctuation">{</span> color<span class="token punctuation">:</span> customDynamicTextColor <span class="token punctuation">}</span><span class="token punctuation">}</span></span><span class="token punctuation">></span></span><span class="token plain-text">
This color changes automatically based on the system theme!
</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token punctuation">;</span>
</code></pre>
<p class="snippet-caption">
Changes the text color based on the system theme
</p>
<p>You can learn more about <code>DynamicColorIOS</code> from <a href="https://reactnative.dev/docs/dynamiccolorios">the documentation</a>.</p>
<h2><a class="anchor" aria-hidden="true" id="dropping-ios-9-and-nodejs-8-support"></a><a href="#dropping-ios-9-and-nodejs-8-support" 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>Dropping iOS 9 and Node.js 8 support</h2>
<p>After over four years from its release, we are dropping support for iOS 9. This change will allow us to move faster by being able to reduce the number of compatibility checks that need to be placed in the native code to detect whether a given feature was supported on a certain iOS version. With its <a href="https://david-smith.org/iosversionstats/">market share of 1%</a>, it shouldnt have much negative impact on your customers.</p>
<p>At the same time, we are dropping support for Node 8. <a href="https://nodejs.org/fr/blog/release/v8.9.0/">Its LTS maintenance cycle expired in December 2019</a>. The current LTS is Node 10 and it is now the version that we are targeting. If you are still using Node 8 for the development of React Native applications, we encourage you to upgrade in order to receive all the latest security fixes and updates.</p>
<h2><a class="anchor" aria-hidden="true" id="other-notable-improvements"></a><a href="#other-notable-improvements" 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>Other notable improvements</h2>
<ul>
<li><strong>Support rendering <code>&lt;View /&gt;</code> in <code>&lt;Text /&gt;</code> without explicit size</strong>: You can now render any <code>&lt;View /&gt;</code> inside any <code>&lt;Text /&gt;</code> component without setting its width and height explicitly, which wasnt always possible. On previous releases of React Native, this would result in a RedBox.</li>
<li><strong>Changed iOS LaunchScreen from <code>xib</code> to <code>storyboard</code></strong>: Starting April 30, 2020, all apps submitted to the App Store must use an Xcode storyboard to provide the apps launch screen and all iPhone apps must support all iPhone screens. This commit adjusts the default React Native template to be compatible with this requirement.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="thanks"></a><a href="#thanks" 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>Thanks</h2>
<p>Thank you to the hundreds of contributors that helped make 0.63 possible!</p>
<blockquote>
<p>Special thanks to <a href="https://twitter.com/rickhanlonii">Rick Hanlon</a> for authoring the section on <code>LogBox</code> and <a href="https://twitter.com/Eli_White">Eli White</a> for authoring the <code>Pressable</code> part of this article.</p>
</blockquote>
<p>To see all the updates, take a look at the <a href="https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#0630">0.63 changelog</a>.</p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2020/03/26/version-0.62">Announcing React Native 0.62 with Flipper</a></h1><p class="post-meta">March 26, 2020</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/rickhanlonii" target="_blank" rel="noreferrer noopener">Rick Hanlon</a>React Native Core at Facebook</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/rickhanlonii" target="_blank" rel="noreferrer noopener"><img src="https://avatars3.githubusercontent.com/u/2440089?s=460&amp;v=4" alt="Rick Hanlon"/></a></div></div></header><article class="post-content"><div><span><p>Today were releasing React Native version 0.62 which includes support for Flipper by default.</p>
<p>This release comes in the midst of a global pandemic. Were releasing this version today to respect the work of hundreds of contributors who made this release possible and to prevent the release from falling too far behind master. Please be mindful of the reduced capacity of contributors to help with issues and prepare to delay upgrading if necessary.</p>
<h2><a class="anchor" aria-hidden="true" id="flipper-by-default"></a><a href="#flipper-by-default" 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>Flipper by default</h2>
<p><a href="https://fbflipper.com/">Flipper</a> is a developer tool for debugging mobile apps. Its popular in the Android and iOS communities, and in this release weve enabled support by default for new and existing React Native apps.</p>
<p><img src="/blog/assets/0.62-flipper.png" alt="Screenshot of Flipper for React Native"></p>
<p>Flipper provides the following features out of the box:</p>
<ul>
<li><strong>Metro Actions</strong>: Reload the app and trigger the Dev Menu right from the toolbar.</li>
<li><strong>Crash Reporter</strong>: View crash reports from Android and iOS devices.</li>
<li><strong>React DevTools</strong>: Use the newest version of React DevTools right alongside all your other tools.</li>
<li><strong>Network Inspector</strong>: View all of the network requests made by device applications.</li>
<li><strong>Metro and Device Logs</strong>: View, search, and filter all logs from both Metro and the Device.</li>
<li><strong>Native Layout Inspector</strong>: View and edit the native layout output by the React Native renderer.</li>
<li><strong>Database and Preference Inspectors</strong>: View and edit the device databases and preferences.</li>
</ul>
<p>Additionally, since Flipper is an extensible platform, it provides a marketplace that pulls plugins from NPM so you can publish and install custom plugins specific to your workflows. See the available plugins <a href="https://www.npmjs.com/search?q=flipper-plugin">here</a>.</p>
<p>For more information, check out the <a href="https://fbflipper.com/docs/features/react-native">Flipper documentation</a>.</p>
<h2><a class="anchor" aria-hidden="true" id="new-dark-mode-features"></a><a href="#new-dark-mode-features" 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>New dark mode features</h2>
<p>Weve added a new <code>Appearance</code> module to provide access to the user's appearance preferences, such as their preferred color scheme (light or dark).</p>
<pre><code class="hljs css language-js"><span class="token keyword">const</span> colorScheme <span class="token operator">=</span> Appearance<span class="token punctuation">.</span><span class="token function">getColorScheme</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>colorScheme <span class="token operator">===</span> <span class="token string">'dark'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">// Use dark color scheme</span>
<span class="token punctuation">}</span>
</code></pre>
<p>Weve also added a hook to subscribe to state updates to the users preferences:</p>
<pre><code class="hljs css language-jsx"><span class="token keyword">import</span> <span class="token punctuation">{</span> Text<span class="token punctuation">,</span> useColorScheme <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'react-native'</span><span class="token punctuation">;</span>
<span class="token keyword">const</span> <span class="token function-variable function">MyComponent</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span>
<span class="token keyword">const</span> colorScheme <span class="token operator">=</span> <span class="token function">useColorScheme</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token plain-text">useColorScheme(): </span><span class="token punctuation">{</span>colorScheme<span class="token punctuation">}</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token class-name">Text</span></span><span class="token punctuation">></span></span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</code></pre>
<p>See the docs for <a href="/docs/appearance">Appearance</a> and <a href="/docs/usecolorscheme">useColorScheme</a> for more information.</p>
<h2><a class="anchor" aria-hidden="true" id="moving-apple-tv-to-react-native-tvos"></a><a href="#moving-apple-tv-to-react-native-tvos" 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>Moving Apple TV to react-native-tvos</h2>
<p>As part of our <a href="/blog/#lean-core">Lean Core effort</a> and to bring Apple TV in line with other platforms like React Native Windows and React Native macOS, weve started to remove Apple TV specific code from core.</p>
<p>Going forward, Apple TV support for React Native will be maintained in <a href="https://github.com/react-native-community/react-native-tvos">react-native-community/react-native-tvos</a> along with the corresponding <code>react-native-tvos</code> NPM package. This is a full fork of the main repository, with only the changes needed to support Apple TV.</p>
<p>Releases of <code>react-native-tvos</code> will be based on the public release of React Native. For this 0.62 release of <code>react-native</code> please upgrade Apple TV projects to use <code>react-native-tvos</code> 0.62.</p>
<h2><a class="anchor" aria-hidden="true" id="more-upgrade-support"></a><a href="#more-upgrade-support" 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>More upgrade support</h2>
<p>When 0.61 was released, the community introduced a new <a href="https://react-native-community.github.io/upgrade-helper/">upgrade helper</a> tool to support developers upgrading to new versions of React Native. The upgrade helper provides a diff of changes from the version you're on to the version you're targeting, allowing you to see the changes that need to be made for your specific upgrade.</p>
<p>Even with this tool, issues come up when upgrading. Today we're introducing more dedicated upgrading support by announcing <a href="https://github.com/react-native-community/upgrade-support">Upgrade-Support</a>. Upgrade Support is a GitHub issue tracker where users can submit issues specific to upgrading their projects to receive help from the community.</p>
<p>We're always working to improve the upgrade experience, and we hope that these tools give users the support they need in the edge cases we haven't covered yet.</p>
<h2><a class="anchor" aria-hidden="true" id="other-improvements"></a><a href="#other-improvements" 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>Other improvements</h2>
<ul>
<li><strong>LogBox</strong>: Were adding the new LogBox error and warning experience as an opt-in; to enable it, add <code>require('react-native').unstable_enableLogBox()</code> to your <code>index.js</code> file.</li>
<li><strong>React DevTools v4</strong>: This change includes an upgrade to the <a href="https://reactjs.org/blog/2019/08/15/new-react-devtools.html">latest React DevTools</a> which offers significant performance gains, an improved navigation experience, and full support for React Hooks.</li>
<li><strong>Accessibility improvements</strong>: Weve made improvements to accessibility including adding <a href="https://reactnative.dev/docs/accessibility#accessibilityvalue-ios-android">accessibilityValue</a>, missing props on <a href="https://github.com/facebook/react-native/commit/8c0c860e38f57e18296f689e47dfb4a54088c260">Touchables</a>, <code>onSlidingComplete</code> <a href="https://github.com/facebook/react-native/commit/c7aa6dc8270c0eabc913fe6c617c8131e3f4b3c5">accessibility events</a>, and changing the default role of Switch component from <code>&quot;button&quot;</code> to <code>&quot;switch&quot;</code>.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="breaking-changes"></a><a href="#breaking-changes" 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>Breaking changes</h2>
<ul>
<li><strong>Remove PropTypes</strong>: We're removing <code>propTypes</code> from core components in order to reduce the app size impact of React Native core and to favor static type systems which check at compile time instead of runtime.</li>
<li><strong>Remove accessibilityStates</strong>: Weve <a href="https://github.com/facebook/react-native/commit/7b35f427fd66cb0f36921b992095fe5b3c14d8b9">removed</a> the deprecated <code>accessibilityStates</code> property in favor of the new <code>accessibilityState</code> prop which is a more semantically rich way for components to describe information about their state to accessibility services.</li>
<li><strong>TextInput changes</strong>: We removed <code>onTextInput</code> <a href="https://github.com/facebook/react-native/commit/3f7e0a2c9601fc186f25bfd794cd0008ac3983ab">from TextInput</a> as its uncommon, not W3C compliant, and difficult to implement in <a href="https://github.com/react-native-community/discussions-and-proposals/issues/4">Fabric</a>. We also removed the undocumented <code>inputView</code> prop, and <code>selectionState</code>.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="deprecations"></a><a href="#deprecations" 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>Deprecations</h2>
<ul>
<li><code>AccessibilityInfo.fetch</code> was already deprecated, but in this release we <a href="https://github.com/facebook/react-native/commit/523ab8333800afbfb169c6fd70ab6611fe07cc2a">added a warning</a>.</li>
<li>Setting <code>useNativeDriver</code> is <a href="https://github.com/facebook/react-native/commit/5876052615f4858ed5fc32fa3da9b64695974238">now required</a> to support switching the default in the future.</li>
<li>The <code>ref</code> of an <code>Animated</code> component is now the internal component and <a href="https://github.com/facebook/react-native/commit/66e72bb4e00aafbcb9f450ed5db261d98f99f82a">deprecated</a> <code>getNode</code>.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="thanks"></a><a href="#thanks" 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>Thanks</h2>
<p>Thank you to the hundreds of contributors that helped make 0.62 possible!</p>
<p>To see all the updates, take a look at the <a href="https://github.com/react-native-community/releases/blob/master/CHANGELOG.md#0620">0.62 changelog</a>.</p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/11/18/react-native-doctor">Meet Doctor, a new React Native command</a></h1><p class="post-meta">November 18, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/lbentosilva" target="_blank" rel="noreferrer noopener">Lucas Bento</a>React Native Community</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/lbentosilva" target="_blank" rel="noreferrer noopener"><img src="https://avatars3.githubusercontent.com/u/6207220?s=460&amp;v=4" alt="Lucas Bento"/></a></div></div></header><article class="post-content"><div><span><p>After over 20 pull requests from 6 contributors in the React Native Community, we're excited to launch <code>react-native doctor</code>, a new command to help you out with getting started, troubleshooting and automatically fixing errors with your development environment. The <code>doctor</code> command is heavily inspired by <a href="https://expo.io/">Expo</a> and <a href="https://brew.sh/">Homebrew</a>'s own doctor command with a pinch of UI inspired by <a href="https://jestjs.io/">Jest</a>.</p>
<p>Here it is in action:</p>
<p style="text-align: center;">
<video width="700" controls="controls" autoplay style="border-radius: 5px;">
<source type="video/mp4" src="/img/homepage/DoctorCommand.mp4"></source>
</video>
</p>
<h2><a class="anchor" aria-hidden="true" id="how-it-works"></a><a href="#how-it-works" 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>How it works</h2>
<p>The <code>doctor</code> command currently supports most of the software and libraries that React Native relies on, such as CocoaPods, Xcode and Android SDK. With <code>doctor</code> we'll find issues with your development environment and give you the option to automatically fix them. If <code>doctor</code> is not able to fix an issue, it will display a message and a helpful link explaining how to fix it manually as the following:</p>
<p style="text-align: center;">
<img width="700" src="/img/DoctorManualInstallationMessage.png" alt="Doctor command with a link to help on Android SDK's installation" title="Doctor command with a link to help on Android SDK's installation" />
</p>
<h2><a class="anchor" aria-hidden="true" id="try-it-now"></a><a href="#try-it-now" 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>Try it now</h2>
<p>The <code>doctor</code> command is available as a part of React Native 0.62. However, you can try it without upgrading yet:</p>
<pre><code class="hljs css language-sh">npx @react-native-community/cli doctor
</code></pre>
<h2><a class="anchor" aria-hidden="true" id="what-checks-are-currently-supported"></a><a href="#what-checks-are-currently-supported" 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>What checks are currently supported</h2>
<p><code>doctor</code> currently supports the following checks:</p>
<ul>
<li>Node.js (&gt;= 8.3)</li>
<li>yarn (&gt;= 1.10)</li>
<li>npm (&gt;= 4)</li>
<li>Watchman (&gt;= 4), used for watching changes in the filesystem when in development mode.</li>
</ul>
<p>Specific to the Android environment:</p>
<ul>
<li>Android SDK (&gt;= 26), the software runtime for Android.</li>
<li>Android NDK (&gt;= 19), the native development toolkit for Android.</li>
<li><code>ANDROID_HOME</code>, environment variable required by the Android SDK setup.</li>
</ul>
<p>And to the iOS environment:</p>
<ul>
<li>Xcode (&gt;= 10), IDE for developing, building and shipping iOS applications.</li>
<li>CocoaPods, library dependency management tool for iOS applications.</li>
<li>ios-deploy (optional), library used internally by the CLI to install applications on a physical iOS device.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="thanks"></a><a href="#thanks" 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>Thanks</h2>
<p>Huge thanks for the React Native Community for working on this, in particular <a href="https://github.com/thymikee">@thymikee</a>, <a href="https://github.com/thib92">@thib92</a>, <a href="https://github.com/jmeistrich">@jmeistrich</a>, <a href="https://github.com/tido64">@tido64</a> and <a href="https://github.com/rickhanlonii">@rickhanlonii</a>.</p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/09/18/version-0.61">Announcing React Native 0.61 with Fast Refresh</a></h1><p class="post-meta">September 18, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/dan_abramov" target="_blank" rel="noreferrer noopener">Dan Abramov</a>React Core at Facebook</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/dan_abramov" target="_blank" rel="noreferrer noopener"><img src="https://avatars1.githubusercontent.com/u/810438?s=460&amp;v=4" alt="Dan Abramov"/></a></div></div></header><article class="post-content"><div><span><p>Were excited to announce React Native 0.61, which includes a new reloading experience were calling Fast Refresh.</p>
<h2><a class="anchor" aria-hidden="true" id="fast-refresh"></a><a href="#fast-refresh" 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>Fast Refresh</h2>
<p>When we asked the React Native community about <a href="https://github.com/react-native-community/discussions-and-proposals/issues/64">common pain points</a>, one of the top answers was that the “hot reloading” feature was broken. It didnt work reliably for function components, often failed to update the screen, and wasnt resilient to typos and mistakes. We heard that most people turned it off because it was too unreliable.</p>
<p>In React Native 0.61, <strong>were unifying the existing “live reloading” (reload on save) and “hot reloading” features into a single new feature called “Fast Refresh”</strong>. Fast Refresh was implemented from scratch with the following principles:</p>
<ul>
<li>Fast Refresh <strong>fully supports modern React</strong>, including function components and Hooks.</li>
<li>Fast Refresh <strong>gracefully recovers after typos</strong> and other mistakes, and falls back to a full reload when needed.</li>
<li>Fast Refresh <strong>doesnt perform invasive code transformations</strong> so its reliable enough to be on by default.</li>
</ul>
<p>To see Fast Refresh in action, check out this video:</p>
<p style="text-align: center">
<video width="700" controls="controls" autoplay>
<source type="video/mp4" src="https://reactnative.dev/img/homepage/ReactRefresh.mp4"></source>
</video>
</p>
<p>Give it a try, and let us know what you think! If you prefer, you can turn it off in the Dev Menu (Cmd+D on iOS, Cmd+M or Ctrl+M on Android). Turning it on and off is instant so you can do it any time.</p>
<p>Here are a few Fast Refresh tips:</p>
<ul>
<li>Fast Refresh preserves React local state in function components (and Hooks!) by default.</li>
<li>If you need to reset the React state on every edit, you can add a special <code>// @refresh reset</code> comment to the file with that component.</li>
<li>Fast Refresh always remounts class components without preserving state. This ensures it works reliably.</li>
<li>We all make mistakes in the code! Fast Refresh automatically retries rendering after you save a file. You don't need to reload the app manually after fixing a syntax or a runtime error.</li>
<li>Adding a <code>console.log</code> or a <code>debugger</code> statement during edits is a neat debugging technique.</li>
</ul>
<p>Please report any issues with Fast Refresh on GitHub, and well look into them.</p>
<h2><a class="anchor" aria-hidden="true" id="other-improvements"></a><a href="#other-improvements" 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>Other Improvements</h2>
<ul>
<li><strong>Fixed use_frameworks! CocoaPods support.</strong> In 0.60 we made some updates to integrate CocoaPods by default. Unfortunately, this broke builds using <a href="https://guides.cocoapods.org/syntax/podfile.html#use_frameworks_bang">use_frameworks!</a>. This is <a href="https://github.com/facebook/react-native/pull/25619">fixed in 0.61</a>, making it easier to integrate React Native into your iOS projects that require building with dynamic frameworks.</li>
<li><strong>Add useWindowDimensions Hook.</strong> This new Hook automatically provides and subscribes to dimension updates, and can be used instead of the Dimensions API in most cases.</li>
<li><strong>React was upgraded to 16.9.</strong> This version deprecates old names for the UNSAFE_ lifecycle methods, contains improvements to <code>act</code>, and more. See the <a href="https://reactjs.org/blog/2019/08/08/react-v16.9.0.html">React 16.9 blog post</a> for an automated migration script and more information.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="breaking-changes"></a><a href="#breaking-changes" 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>Breaking Changes</h2>
<ul>
<li><strong>Remove React .xcodeproj.</strong> In 0.60, we introduced auto-linking support via CocoaPods. We have also integrated CocoaPods into the e2e tests runs, so that from now on, we have a unified standard way of integrating RN into iOS apps. This effectively deprecates the React .xcodeproj support, and the file has been removed starting 0.61. Note: if you use 0.60 auto-linking already, you shouldn't be affected.</li>
</ul>
<h2><a class="anchor" aria-hidden="true" id="thanks"></a><a href="#thanks" 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>Thanks</h2>
<p>Thanks to all of the contributors that helped make 0.61 possible!</p>
<p>To see all the updates, take a look at the <a href="https://github.com/react-native-community/releases/blob/master/CHANGELOG.md">0.61 changelog</a>.</p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/07/17/hermes">Meet Hermes, a new JavaScript Engine optimized for React Native</a></h1><p class="post-meta">July 17, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/rachelnabors" target="_blank" rel="noreferrer noopener">Rachel Nabors</a>Documentation Engineer at Facebook</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/rachelnabors" target="_blank" rel="noreferrer noopener"><img src="https://avatars0.githubusercontent.com/u/236306?s=460&amp;v=4" alt="Rachel Nabors"/></a></div></div></header><article class="post-content"><div><span><p>Last week at Chain React we announced Hermes, an open source JavaScript engine weve been working on at Facebook. Its a small and lightweight JavaScript engine optimized for running React Native on Android. <a href="https://code.fb.com/android/hermes/">Check it out!</a></p>
<p>Hermes improves React Native performance by decreasing memory utilization, reducing download size, and decreasing the time it takes for the app to become usable or “time to interactive” (TTI).</p>
<blockquote>
<p>“As we analyzed performance data, we noticed that the JavaScript engine itself was a significant factor in startup performance and download size. With this data in hand, we knew we had to optimize JavaScript performance in the more constrained environments of a mobile phone compared with a desktop or laptop. After exploring other options, we built a new JavaScript engine we call Hermes. It is designed to improve app performance, focusing on our React Native apps, even on mass-market devices with limited memory, slow storage, and reduced computing power.” —<a href="https://code.fb.com/android/hermes/">Hermes: An open source JavaScript engine optimized for mobile apps, starting with React Native</a></p>
</blockquote>
<p>Want to get started right away? Be sure to <a href="/docs/hermes/">check out our new guide to enabling Hermes in your existing React Native app</a> in the docs!</p>
<p><a href="https://code.fb.com/android/hermes/"><img src="/blog/assets/2019_hermes-launch-illo-rachel-nabors.jpg" alt="Illustration of the Hermes and React Native logos joined into a winged fury, rising in a crashing electrical storm from a lone, glowing, presumably Android phone."></a> <em>Illustration by Rachel Nabors</em></p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/07/03/version-60">Announcing React Native 0.60</a></h1><p class="post-meta">July 3, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/turnrye" target="_blank" rel="noreferrer noopener">Ryan Turner</a>Core Maintainer &amp; React Native Developer</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/turnrye" target="_blank" rel="noreferrer noopener"><img src="https://avatars0.githubusercontent.com/u/701035?s=460&amp;v=4" alt="Ryan Turner"/></a></div></div></header><article class="post-content"><div><span><p>After months of hard work from hundreds of contributors, the React Native Core team is proud to announce the release of version 0.60. This release handles significant migrations for both Android and iOS platforms, and many issues are resolved too. This blog post covers the highlights of the release. As always though, refer to the changelog for more detailed information. Finally, thank you contributors for helping us to make this milestone!</p>
<h2><a class="anchor" aria-hidden="true" id="focus-on-accessibility"></a><a href="#focus-on-accessibility" 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>Focus on Accessibility</h2>
<p>There have been many improvements to the accessibility APIs, like <a href="https://github.com/facebook/react-native/commit/cfe0032">announceForAccessibility</a>, plus improvements to <a href="https://github.com/facebook/react-native/commit/1aeac1c">roles</a>, <a href="https://github.com/facebook/react-native/commit/14b4668">action support</a>, <a href="https://github.com/facebook/react-native/commit/0090ab3">flags</a>, and more. Accessibility is a complex science, but we hope these improvements make it a bit easier to be an A11Y. Be sure to check <a href="/blog/2019/06/12/react-native-open-source-update#meaningful-community-contributions">React Native Open Source Update June 2019</a> for more details of these changes.</p>
<h2><a class="anchor" aria-hidden="true" id="a-fresh-start"></a><a href="#a-fresh-start" 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>A Fresh Start</h2>
<p>React Native's start screen has been updated! Thank you to the many contributors who helped create the new UI. This new &quot;Hello World&quot; will welcome users to the ecosystem in a more friendly, engaging way.</p>
<p><img src="/blog/assets/0.60-new-init-screen.png" alt="The new init screen helps developers get started from the get-go with resources and a good example"></p>
<h2><a class="anchor" aria-hidden="true" id="androidx-support"></a><a href="#androidx-support" 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>AndroidX Support</h2>
<p><a href="https://developer.android.com/jetpack/androidx">AndroidX</a> is a major step forward in the Android ecosystem, and the old support library artifacts are being deprecated. For 0.60, React Native has been migrated over to AndroidX. This is a breaking change, and <strong>your native code and dependencies will need to be migrated</strong> as well.</p>
<blockquote>
<p>With this change, React Native apps will need to begin using AndroidX themselves. They cannot be used side-by-side in one app, so all of the app code and dependency code needs to be using one or the other.</p>
<p><a href="https://github.com/matt-oakes">matt-oakes</a> on <a href="https://github.com/react-native-community/discussions-and-proposals/issues/129">discussions-and-proposals</a></p>
</blockquote>
<p>While your own native code will need to be migrated by you, <a href="https://github.com/mikehardy">@mikehardy</a>, <a href="https://github.com/cawfree">@cawfree</a>, and <a href="https://github.com/m4tt72">@m4tt72</a> built a <a href="https://github.com/mikehardy/jetifier">clever tool named &quot;jetifier&quot;</a> to patch your <code>node_modules</code>. Library maintainers will need to upgrade, but this tool provide you with a temporary solution while giving them time to release an AndroidX version. So if you find errors related to AndroidX migration, give this a shot.</p>
<h2><a class="anchor" aria-hidden="true" id="cocoapods-by-default"></a><a href="#cocoapods-by-default" 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>CocoaPods by Default</h2>
<p><a href="https://github.com/react-native-community/discussions-and-proposals/blob/master/proposals/0004-cocoapods-support-improvements.md">CocoaPods are now part of React Native's iOS project</a>. If you weren't already, be sure to open iOS platform code using the <code>xcworkspace</code> file from now on (protip: try <code>xed ios</code> from the root project directory). Also, the <code>podspec</code>s for the internal packages have changed to make them compatible with the Xcode projects, which will help with troubleshooting and debugging. Expect to make <a href="https://github.com/facebook/react-native/commit/2321b3f">some straightforward changes</a> to your <code>Podfile</code> as part of the upgrade to 0.60 to bring this exciting support. Note that we are aware of a compatibility issue with <code>use_frameworks!</code>, and we're tracking an <a href="https://github.com/facebook/react-native/issues/25349">issue</a> with workarounds and a future patch.</p>
<h2><a class="anchor" aria-hidden="true" id="lean-core-removals"></a><a href="#lean-core-removals" 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>Lean Core Removals</h2>
<p><strong>WebView</strong> and <strong>NetInfo</strong> were previously extracted into separate repositories, and in 0.60 weve finished migrating them out of the React Native repository. Additionally, in response to community feedback about new App Store policy, <strong>Geolocation</strong> has been extracted. If you havent already, complete your migration by adding dependencies to <a href="https://github.com/react-native-community/react-native-webview">react-native-webview</a>, <a href="https://github.com/react-native-community/react-native-netinfo">@react-native-community/netinfo</a>, and <a href="https://github.com/react-native-community/react-native-geolocation">@react-native-community/geolocation</a>. If you'd like an automated solution, consider using <a href="https://github.com/lucasbento/rn-update-deprecated-modules">rn-upgrade-deprecated-modules</a>. Maintainers have made more than 100 commits to these repositories since extraction and were excited to see the communitys support!</p>
<h2><a class="anchor" aria-hidden="true" id="native-modules-are-now-autolinked"></a><a href="#native-modules-are-now-autolinked" 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>Native Modules are now Autolinked</h2>
<p>The team working on the <a href="https://github.com/react-native-community/cli">React Native CLI</a> has introduced major improvements to native module linking called <a href="https://github.com/react-native-community/cli/blob/master/docs/autolinking.md">autolinking</a>! Most scenarios will not require the use of <code>react-native link</code> anymore. At the same time, the team overhauled the linking process in general. Be sure to <code>react-native unlink</code> any preexisting dependencies as mentioned in the docs above.</p>
<h2><a class="anchor" aria-hidden="true" id="upgrade-helper"></a><a href="#upgrade-helper" 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>Upgrade Helper</h2>
<p><a href="https://github.com/lucasbento">@lucasbento</a>, <a href="https://github.com/pvinis">@pvinis</a>, <a href="https://github.com/kelset">@kelset</a>, and <a href="https://github.com/watadarkstar">@watadarkstar</a> have built a great tool called <a href="https://react-native-community.github.io/upgrade-helper/">Upgrade Helper</a> to make the upgrade process simpler. It helps React Native users with brownfield apps or complex customizations to see what's changed between versions. Take a look at the <a href="/docs/upgrading">updated upgrading docs</a> and try it out today for your upgrade path!</p>
<p><img src="/blog/assets/0.60-upgrade-helper.png" alt="Upgrade Helper cleanly and easily shows the changes needed to migrate to a different version of React Native"></p>
<h2><a class="anchor" aria-hidden="true" id="a-note-to-library-maintainers"></a><a href="#a-note-to-library-maintainers" 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>A Note to Library Maintainers</h2>
<p>Changes for AndroidX will almost certainly require updates to your library, so be sure to include support soon. If you're not able to upgrade yet, consider checking your library against the jetifier to confirm that users are able to patch your library at build time.</p>
<p>Review the <a href="https://github.com/react-native-community/cli/blob/master/docs/autolinking.md">autolinking</a> docs to update your configs and readme. Depending on how your library was previously integrated, you may also need to make some additional changes. Check the <a href="https://github.com/react-native-community/cli/blob/master/docs/dependencies.md">dependencies</a> guide from the CLI for information on how to define your dependency interface.</p>
<h2><a class="anchor" aria-hidden="true" id="thanks"></a><a href="#thanks" 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>Thanks</h2>
<p>While these are the highlights that we noted, there are many others to be excited about. To see all the updates, take a look at the <a href="https://github.com/react-native-community/react-native-releases/blob/master/CHANGELOG.md">changelog</a>. As always, stay tuned for more news. Enjoy 0.60 in the meantime!</p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/12/react-native-open-source-update">React Native Open Source Update June 2019</a></h1><p class="post-meta">June 12, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/cpojer" target="_blank" rel="noreferrer noopener">Christoph Nakazawa</a>Engineer at Facebook</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/cpojer" target="_blank" rel="noreferrer noopener"><img src="https://avatars2.githubusercontent.com/u/13352?s=460&amp;v=4" alt="Christoph Nakazawa"/></a></div></div></header><article class="post-content"><div><span><h2><a class="anchor" aria-hidden="true" id="code--community-health"></a><a href="#code--community-health" 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>Code &amp; Community Health</h2>
<p>In the past six months, a total of 2800 commits were made to React Native by more than 550 contributors. 400 contributors from the community created more than <a href="https://github.com/facebook/react-native/pulls?page=24&amp;q=is%3Apr+closed%3A%3E2018-12-01&amp;utf8=%E2%9C%93">1,150 Pull Requests</a>, of which <a href="https://github.com/facebook/react-native/pulls?utf8=%E2%9C%93&amp;q=is%3Apr+closed%3A%3E2018-12-01+label%3A%22Merged%22+">820 Pull Requests</a> were merged.</p>
<p>The average number of Pull Requests per day throughout the past six months has increased from three to about six, even though we split the website, CLI and many modules out of React Native via the Lean Core effort. The average amount of open pull requests is now below 25 and we usually reply with suggestions and reviews within hours or days.</p>
<h3><a class="anchor" aria-hidden="true" id="meaningful-community-contributions"></a><a href="#meaningful-community-contributions" 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>Meaningful Community Contributions</h3>
<p>Wed like to highlight a number of recent contributions which we thought were awesome:</p>
<ul>
<li><strong>Accessibility:</strong> React Native 0.60 will ship with many improvements to accessibility APIs both on Android and iOS. All of the new features are directly using APIs provided by the underlying platform so theyll integrate with native assistance technologies both on Android and iOS. Wed like to thank <a href="https://github.com/marcmulcahy">Marc Mulcahy</a>, <a href="https://github.com/facebook/react-native/pull/24746">Alan Kenyon</a>, <a href="https://github.com/elucaswork">Estevão Lucas</a>, <a href="https://github.com/sweggersen">Sam Mathias Weggersen</a> and <a href="https://twitter.com/janicduplessis">Janic Duplessis</a> for their contributions:
<ul>
<li><a href="https://github.com/facebook/react-native/pull/24095">Additional Accessibility Roles + States</a> and a <a href="https://github.com/facebook/react-native/pull/24608">new Accessibility States API</a>. Added a number of missing accessibility roles for various components and a new API for better web support in the future.</li>
<li><a href="https://github.com/facebook/react-native/pull/24746">AccessibilityInfo.announceForAccessibility</a>. Added support for Android, previously iOS-only.</li>
<li><a href="https://github.com/facebook/react-native/pull/24695">Extended Accessibility Actions Support</a>. Added callbacks to deal with accessibility around user-defined actions.</li>
<li><a href="https://github.com/facebook/react-native/pull/23913">Support for iOS Accessibility flags</a> and <a href="https://github.com/facebook/react-native/pull/23839">support for &quot;reduce motion&quot;</a>.</li>
<li><a href="https://github.com/facebook/react-native/pull/24359">Android keyboard accessibility improvements</a>. Added a <code>clickable</code> prop and an <code>onClick</code> callback for invoking actions via keyboard navigation <em>(note: this will soon be renamed to <code>focusable</code>).</em></li>
<li><a href="https://github.com/facebook/react-native/pull/24387">Use CALayers to draw text</a>. Fixed an issue that made scaled-up text disappear on iOS.</li>
</ul></li>
<li><strong>New App Screen:</strong> The community came up with a <a href="https://github.com/react-native-community/discussions-and-proposals/issues/122">design for the new app screen</a> that is implemented in 0.60. This screen is what most people see when they are first using React Native. It now links first time users to the documentation and the look fits with our upcoming website redesign 🌟. Huge thanks to <a href="http://twitter.com/orta">Orta</a>, <a href="https://www.linkedin.com/in/ashurson/">Adam Shurson</a>, <a href="https://github.com/glauberfc">Glauber Castro</a>, <a href="https://github.com/karanpratapsingh">Karan Singh</a>, <a href="https://twitter.com/_eliperkins">Eli Perkins</a>, <a href="https://twitter.com/lbentosilva">Lucas Bento</a> and <a href="https://twitter.com/ericlewis">Eric Lewis</a> for all their work and collaboration!
<ul>
<li>Check out the new app screen on the “*<a href="https://www.youtube.com/watch?v=ImlAqMZxveg">React Native Show</a>“ *video series.</li>
</ul></li>
<li><strong>TurboModule Types:</strong> The new <a href="https://github.com/react-native-community/discussions-and-proposals/issues/40">TurboModules system</a> requires <a href="https://github.com/facebook/react-native/issues/24875">types for all native modules</a> to guarantee type safe operations in native. In just over two weeks, the community sent ~40 Pull Requests to complete this work for flow typed native modules. Aside from the people already mentioned above, wed like to thank <a href="https://twitter.com/michalchudziak">Michał Chudziak</a>, <a href="https://twitter.com/thymikee">Michał Pierzchała</a>, <a href="https://github.com/wojteg1337">Wojtek Szafraniec</a>, and <a href="https://github.com/jeanregisser">Jean Regisser</a> and everyone else who sent one or more Pull Requests.</li>
<li><strong>Haste:</strong> Since 2015 React Native used the <a href="https://github.com/reactjs/reactjs.org/commit/0629e3e2289ed54fac854472aec9a5f6c8318c98#diff-c42b758729cb89976b3a8fd51d1227fa">“haste” module system</a> that allows importing modules just via a global id instead of a relative path which is convenient but not well supported by many tools. <a href="https://twitter.com/JI">James Ide</a> proposed removing haste, similar to how React removed haste many years ago. He planned all the work through an <a href="https://github.com/facebook/react-native/issues/24316">umbrella task</a> and he sent 18 Pull Requests to make it happen! Check out <a href="https://twitter.com/JI/status/1136369775083319296">his Twitter thread</a> to learn more.</li>
<li><strong>Android Fragments:</strong> <a href="https://github.com/jpshelley">John Shelley</a>s proposal to make React Native work via <a href="https://github.com/facebook/react-native/pull/12199">Android Fragments</a> was merged and will be available in 0.61. <a href="https://developer.android.com/guide/components/fragments">Read more about Android Fragments here</a>.</li>
</ul>
<h3><a class="anchor" aria-hidden="true" id="lean-core"></a><a href="#lean-core" 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>Lean Core</h3>
<p>The primary motivation of <a href="https://github.com/react-native-community/discussions-and-proposals/issues/6">Lean Core</a> has been to split modules out of React Native into separate repositories so they can receive better maintenance. In just a six months repositories like <a href="https://github.com/react-native-community/react-native-webview">WebView</a>, <a href="https://github.com/react-native-community/react-native-netinfo">NetInfo</a>, <a href="https://github.com/react-native-community/react-native-async-storage">AsyncStorage</a>, the <a href="https://github.com/facebook/react-native-website">website</a> and the <a href="https://github.com/react-native-community/cli">CLI</a> received more than 800 Pull Requests combined. Besides better maintenance, these projects can also be independently released more often than React Native itself.</p>
<p>We have also taken the opportunity to remove obsolete polyfills and legacy components from React Native itself. Polyfills were necessary in the past to support language features like <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map"><code>Map</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set"><code>Set</code></a> in older versions of JavaScriptCore (JSC). Now that React Native ships with a new version, these polyfills were removed.</p>
<p>This work is still in progress and many more things still need to be split out or removed both on the native and JavaScript side but there are early signs that we managed to reverse the trend of increasing the surface area and app size: When looking at the JavaScript bundle for example, about a year ago in version 0.54 the React Native JavaScript bundle size was 530kb and grew to 607kb (+77kb) by version 0.57 in just 6 months. Now we are seeing a bundle size reduction of 28kb down to 579kb on master, a delta of more than 100kb!</p>
<p>As we conclude the first iteration of the Lean Core effort, we will make an effort to be more intentional about new APIs added to React Native and we will continuously evaluate ways to make React Native smaller and faster, as well as finding ways to empower the community to take ownership of various components.</p>
<h2><a class="anchor" aria-hidden="true" id="user-feedback"></a><a href="#user-feedback" 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>User Feedback</h2>
<p>Six months ago we asked the community “<a href="https://github.com/react-native-community/discussions-and-proposals/issues/64">What do you dislike about React Native?</a>” which gave a good overview of problems people are facing. We <a href="https://github.com/react-native-community/discussions-and-proposals/issues/104">replied to the post a few months ago</a> and it's time to summarize the progress that was made on top issues:</p>
<ul>
<li><strong>Upgrading:</strong> The React Native community rallied around with multiple improvements to the upgrading experience: <a href="https://github.com/react-native-community/cli/blob/master/docs/autolinking.md">autolinking</a>, a better upgrading command via <a href="https://github.com/react-native-community/rn-diff-purge">rn-diff-purge</a>, an upgrade helper website (coming soon). Well also make sure to communicate breaking changes and exciting new features by publishing blog posts for each major release. Many of these improvements will make future upgrades beyond the 0.60 release significantly easier.</li>
<li><strong>Support / Uncertainty:</strong> Many people were frustrated with the lack of activity on Pull Requests and general uncertainty about Facebook's investment in React Native. As we've shown above, we can confidently say that we are ready for many more Pull Requests and we are eagerly looking forward to your proposals and contributions!</li>
<li><strong>Performance:</strong> React Native 0.59 shipped with a new and much faster version of JavaScriptCore (JSC). Separately, we have been working on making it easier to enable <a href="/docs/performance#ram-bundles-inline-requires">inline-requires</a> by default and we have more exciting updates for you in the next couple of months.</li>
<li><strong>Documentation:</strong> We recently started an effort to <a href="https://github.com/facebook/react-native-website/issues/929">overhaul and rewrite all of React Native's documentation</a>. If you are looking to contribute, wed love to get your help!</li>
<li><strong>Warnings in Xcode:</strong> We <a href="https://github.com/facebook/react-native/issues/22609">got rid of all the existing warnings</a> and are making an effort not to introduce new warnings.</li>
<li><strong>Hot Reloading:</strong> The React team is building a <a href="https://twitter.com/dan_abramov/status/1126948870137753605">new hot reloading system</a> that will soon be integrated into React Native.</li>
</ul>
<p>Unfortunately we werent able to improve everything just yet:</p>
<ul>
<li><strong>Debugging:</strong> We fixed many inconvenient bugs and issues people that we have been running into every day, but unfortunately we haven't made as much progress on this as we would like. We recognize that debugging with React Native isn't great and we'll prioritize improving this in the future.</li>
<li><strong>Metro symlinks:</strong> Unfortunately we haven't been able to implement a simple and straightforward solution for this yet. However, React Native users <a href="https://github.com/facebook/metro/issues/1">shared various workarounds</a> that may work for you.</li>
</ul>
<p>Given the large amount of changes in the past six months, we'd like to ask you the same question again. If you are using the latest version of React Native and you have things you'd like to give feedback on, please comment on our new edition of <a href="https://github.com/react-native-community/discussions-and-proposals/issues/134">“What do you dislike about React Native?”</a></p>
<h2><a class="anchor" aria-hidden="true" id="continuous-integration"></a><a href="#continuous-integration" 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>Continuous Integration</h2>
<p>Facebook merges all Pull Requests and internal changes directly into Facebooks repository first and then syncs all commits back to GitHub. Facebooks infrastructure is different from common continuous integration services and not all open source tests were run inside of Facebook. This means that commits that sync out to GitHub frequently break tests in open source which take a lot of time to fix.</p>
<p><a href="https://twitter.com/hectorramos">Héctor Ramos</a> from the React Native team spent the past two months improving React Native's continuous integration systems both at Facebook and on GitHub. Most of the open source tests are now run before changes are committed to React Native at Facebook which will keep CI stable on GitHub when commits are being synchronized.</p>
<h2><a class="anchor" aria-hidden="true" id="next"></a><a href="#next" 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>Next</h2>
<p>Make sure to check out our talks about the future of React Native! In the next couple of months, members of the React Native team at Facebook will speak at <a href="https://infinite.red/ChainReactConf">Chain React</a> and at <a href="https://react-native.eu/">React Native EU</a>. Also, watch out for our next release, 0.60, which is right around the corner. <em>It's going to be exciting</em></p>
</span></div></article></div><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/05/01/react-native-at-f8-and-podcast">React Native at F8 and Open Source Podcast</a></h1><p class="post-meta">May 1, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="https://twitter.com/cpojer" target="_blank" rel="noreferrer noopener">Christoph Nakazawa</a>Engineer at Facebook</p><div class="authorPhoto authorPhotoBig"><a href="https://twitter.com/cpojer" target="_blank" rel="noreferrer noopener"><img src="https://avatars2.githubusercontent.com/u/13352?s=460&amp;v=4" alt="Christoph Nakazawa"/></a></div></div></header><article class="post-content"><div><span><p>This week, <a href="https://twitter.com/Eli_White">Eli White</a> gave a talk at <a href="https://developers.facebook.com/videos/2019/mobile-innovation-with-react-native-componentkit-and-litho/">F8 2019</a> about React Native in Facebook's Android and iOS applications. We are excited to share what we've been up to for the past two years and what we're doing next.</p>
<p>Check out the video on <a href="https://developers.facebook.com/videos/2019/mobile-innovation-with-react-native-componentkit-and-litho/">Facebook's developer website</a>:</p>
<p><a href="https://developers.facebook.com/videos/2019/mobile-innovation-with-react-native-componentkit-and-litho/">
<img src="/blog/assets/eli-at-f8.png" alt="F8 Talk about React Native" />
</a></p>
<h4><a class="anchor" aria-hidden="true" id="highlights-from-the-talk"></a><a href="#highlights-from-the-talk" 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>Highlights from the talk:</h4>
<ul>
<li>We spent 2017 and 2018 focused on React Native's largest product, Facebook's Marketplace. We collaborated with the Marketplace team to improve quality and add delight to the product. At this point, Marketplace is one of the highest quality products in the Facebook app both on Android and iOS.</li>
<li>Marketplace's performance was a big challenge as well, especially on mid-end Android devices. We cut startup time by more than 50% over the last year with more improvements on the way! The biggest improvements are being built into React Native and will be coming to the community later this year.</li>
<li>We have the confidence that we can build the high quality and performant apps that Facebook needs with React Native. This confidence has let us invest in bigger bets, like <a href="https://www.youtube.com/watch?v=UcqRXTriUVI&amp;app=desktop">rethinking the core of React Native</a>.</li>
<li>Microsoft supports and uses React Native for Windows, enabling people to use their expertise and codebase to render to Microsofts's Universal Windows Platform. Check out Microsoft Build next week to <a href="https://mybuild.techcommunity.microsoft.com/sessions/77321">hear them talk about that more</a>.</li>
</ul>
<h3><a class="anchor" aria-hidden="true" id="react-radio-podcast-about-open-source"></a><a href="#react-radio-podcast-about-open-source" 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>React Radio Podcast about Open Source</h3>
<p>Eli's talk concludes by talking about our recent open source work. We gave <a href="/blog/2019/03/01/react-native-open-source-update">an update on our progress in March</a> and recently <a href="https://twitter.com/dabit3">Nader Dabit</a> and <a href="https://twitter.com/GantLaborde">Gant Laborde</a> invited Christoph for a chat on their podcast, <a href="https://devchat.tv/react-native-radio/react-native-open-source-the-react-native-community-feat-christoph-nakazawa/">React Native Radio</a>, to chat about React Native in open source.</p>
<h4><a class="anchor" aria-hidden="true" id="highlights-from-the-podcast"></a><a href="#highlights-from-the-podcast" 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>Highlights from the podcast:</h4>
<ul>
<li>We talked about how the React Native team at Facebook thinks about open source and how we are building a sustainable community that scales for a project of React Native's <a href="https://octoverse.github.com/projects#repositories">size</a>.</li>
<li>We are on track to remove multiple modules as part of the <a href="https://github.com/facebook/react-native/issues/23313">Lean Core</a> effort. Many modules like WebView and the React Native CLI have received more than 100 Pull Requests since they were extracted.</li>
<li>Next, we'll be focusing on overhauling the React Native website and documentation. Stay tuned!</li>
</ul>
<p>You'll find the episode in your favorite podcasting app soon or you can listen to the recording right here:</p>
<p><audio
controls
style="display: block; margin: 0 auto;"
src="https://media.devchat.tv/reactnativeradio/React_Native_Radio_Episode_121.mp3"> Audio is unsupported in this browser. </audio></p>
</span></div></article></div><div class="docs-prevnext"><a class="docs-next" href="/blog/page2/">Next →</a></div></div></div></div></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&#x27;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.63"],"hitsPerPage":5}
});
</script></body></html>