Over the past year, I've enjoyed developing hybrid apps using Ionic/Angular/Cordova. This toolset has made a lot of sense to me. You develop a web app inside a mobile browser container, and then you use the large community of Cordova Plugins as middleware to access the hardware (camera, GPS, fingerprint scanner, etc.) Using Javascript to talk to the Cordova middleware.
I'm now trying to understand how React Native works. To my understanding, it converts Javascript to the related Objective-C/Java components. Test driving React Native apps such as Facebook Groups and Facebook Ads; you can sense the performance advancements over Cordova apps.
My largest concern is accessing the hardware using React Native plugins. Is it correct to think as React Native plugins as the same concept as Cordova Plugins? Does the plugin community feel as rich as Cordova's? At this current time is it best to have a background in Objective-C and Java in order to access device APIs when needed?
React Native is not converting Javascript to Objective-C/Java.
React Native is not using WebView to render the page like Cordova. React Native uses JavascriptCore which is the JavaScript engine that powers Safari. That is the reason you can't write HTML/CSS inside React Native.
If you want to access the Hardware layers, You can use plugins like Cordova. But, React Native doesn't have many plugins like Cordova. React Native community is growing day by day. But, React Native have plugins for all the essential features like Fingerprint, GPS, Camera, etc., So, Java/Objective-C knowledge is not mandatory. But, if you have Java/Objective-C knowledge, It will be helpful. When I started making React Native, I had a requirement to use Android's Shared Preference. There was no plugin for accessing Android's Shared Preference from React Native. So, My friend gave me the snippet for using Shared Preferences, Then I created React Native module for it and published as a plugin. Now, Many people are using my plugin. Like that, All the Android's and iOS's features will be covered soon.
TL;DR: Yes
The longer version: While developing react native applications, all you do is write JavaScript, unless you're building your own native modules. Your entire application / business logic will be written in JS and not in platform specific languages like Objective-C or Java.
How React Native (RN) works?
RN doesn't convert JS to Objective-C or Java, instead, it uses React to wrap the imperative native UI view system. RN applications leverage the UI libraries of its host platform in Objective-C (for iOS) or Java (for Android), thus rendering the actual native UI components and not just web view.
React Native plugins (native modules)?
The are lot of modules out there and the community is still growing. You'll find modules to get most of the things done. Check https://js.coach/react-native
Do you need to know Objective-C and Java?
No. But it's recommended that you have some knowledge in Obj-C / Java, so that you can customize native module or write your own native modules.
Absolutely. Armed only with the knowledge of JavaScript, React, JSX; you can jump head forward into Android/iOS development.
How does React Native work?
The main difference between traditional React.js and React Native is the rendering context. Instead of rendering DOM elements, React Native renders native UI views.
You're sort of correct in assuming that it converts JavaScript to native code. To put it more precisely, picking it up from Facebook's React Native page:
React Native has its own JavaScript engine running on a single thread, which asynchronously communicates with the native platform; this communication "converts" React Native components, to the native mobile OS components; and from there on the native platform has got your back with its multi threaded goodness, for performing further native operations, from the way I understand it.
On the knowledge of Java/Swift/Objective C
I'm still in the phase of getting my feet wet with React Native. But from what I have read so far, ideally you will find everything to build a mobile app with React Native; granted you would have to dig in the docs to learn about the corresponding iOS/Android react native components. React Native is growing at a rapid, rapid pace. For those native components, for which the counterpart React Native components do not yet exist; as @sriraman has mentioned it, the community (along with Facebook) is doing a phenomenal job in quickly closing this gap.