
Ask HN: Why was React Native recommended to me? Not seeing benefits - mkirklions
Ive programmed in 8+ languages, and up to this point Javascript was unused.<p>It was recommended to use javascript and react&#x2F;react native so I only needed to program once.<p>However, seeing the differences between react and react native, this seems overstated.<p>What were the other benefits? I thought there was already built components&#x2F;libraries I could drop in for data management. Maybe its bad googling, but I feel like react-native is like any other app I&#x27;m building from scratch.<p>Looking for any recommendations to get a intermediate programmer going?
======
danielrhodes
React Native likley has a productivity benefit for simpler interfaces -- the
framework is less complex and it's faster to get started. By contrast, iOS
frameworks are very powerful and enable you to do a lot more.

However, a lot of this catches up to you.

1) iOS/Android already have very sophisticated and powerful MVC layers, which
is what React brings to the web.

2) React Native is not performant and it's hard to solve these performance
problems. I've heard a lot of people say this doesn't matter, but I've noticed
this is usually said by those who are doing mobile apps for the first time
coming from the desktop/browser world where problems can be hidden easier. On
mobile you have no such affordances and performance issues are a bigger big
deal. Funny enough, React Native would actually perform better (e.g. with
scrolling) if it used a shadow view layer like its web counterpart uses. Check
out [https://texturegroup.org/](https://texturegroup.org/) for an example of
how this would work.

~~~
zukzuk
Android's "MVC" layer is a joke, and not a very funny one. An argument for
React Native, at least as a replacement for native Android, is that it lets
you circumvent the nightmare that is Google's Android SDK and toolchain.
Javascript and React+Redux is, arguably, it's own special little nightmare
too, but still better than the alternative, especially if used with
TypeScript.

~~~
on_and_off
you can build MVP, MVVM, MVI, or whatever other arch on top of the Android
framework, you don't need to bring react to do that.

------
kd5bjo
The pitch internally at Facebook for React Native wasn't that UI code could be
written once and used everywhere. Instead, their goal was to let engineers
move between web, iOS, and Android development without retraining. This lets
them have one photos team, for example, that is responsible for the photos
portion of the product across all supported platforms.

~~~
briandear
So basically “lowest common denominator” is their development strategy? The
Facebook app is one of the worst on my iPhone. It lags, it sucks power.. I
would expect that if the people that invented React “native” can’t make it
similarly as performant as real native, then random developers out in the wild
aren’t going to do much better — this an ecosystem of iPhone apps that suck
simply because they were designed for the worst possible Android phone.

React Native is a godsend to tiny startups, but for companies that can
actually afford to hire teams.. it’s an insult to the user to use React
“native” and pretend that the app is any good. I own an iPhone because of the
features of an iPhone, but companies like Facebook want to handicap my
experience because someone’s low-end Android can’t keep up?

Facebook has always sucked at mobile. First they insisted on phonegap-style
bullshit, now React “native.” Do they not have the budget to actually hire
real Swift or Java/Android developers? I am not sure why “mobile” is
considered a platform — perhaps they should instead develop for actual iOS and
Android rather than treating those two different OSes and experiences as
identical. Android and iOS users would likely be much happier.

~~~
spicyj
For the record, most of Facebook’s app is not currently built in React Native
so please don’t use it to judge RN. I could go into why FB app quality ends up
low but don’t think it’s that relevant to this discussion.

And FWIW Facebook probably employs over a thousand iOS and Android developers.
It’s not a “budget” thing for us.

------
bdcravens
> Ive programmed in 8+ languages, and up to this point Javascript was unused.

This tells me you haven't built for the web yet. (unless I'm totally
misunderstanding what you're saying) React Native extends web paradigms to
mobile, so if the web isn't where your experience lies, you'll likely be more
comfortable with a traditional native language like Swift/Java.

~~~
hungerstrike
That’s interesting, I always thought that React brought a little bit of the
desktop experience to the web since you can create components that are fairly
self-contained. Of course, as you said, the opposite is also true since you’re
using JavaScript.

To me the biggest benefit is that you write your code once though. Especially
with a React based kit like Expo.

------
wwalser
It sounds like you're new to both React Native and the JavaScript ecosystem. I
can imagine this being very frustrating for someone regardless of their
general programming chops. I happen to be on a React Native project at work
right now. Hopefully I can provide a viewpoint that is helpful and give direct
answers to some of your questions.

One thing that would be helpful to understand that's missing from the OP, what
are you building?

> However, seeing the differences between react and react native, this seems
> overstated.

I'm actually not sure which specific differences you're referring to. Perhaps
you can clarify?

> It was recommended to use javascript and react/react native so I only needed
> to program once.

It's possible to use RN to build an application which runs on both Android and
iOS from a single code base. This is possible with a few other environments
but none are (IMO) quite as good at affording for a truly native look and feel
including dropping down into native code when necessary.

Building a really great app is still a grind on execution and perfecting small
details is a chore. The standards of quality in the mobile app world are high
which leads to average users having higher standards than they might with
desktop or web applications.

> What were the other benefits?

For people who enjoy working in JavaScript, the fact that you can write native
applications using mostly JS is a benefit.

Some products benefit from being able to share code between a web product and
a RN application is a big boost in productivity. I've personally saved
hundreds of hours leveraging this. It's not a 1:1 swap but it's close enough
to lower the mental burden compared to creating something from scratch.

> I thought there was already built components/libraries I could drop in for
> data management.

There are lots of data management libraries for React. Most can be used in a
RN app. Maybe the community resources section of the React documentation will
be helpful: [https://reactjs.org/community/model-
management.html](https://reactjs.org/community/model-management.html)

I can provide specific recommendations if you can describe specific needs.
Like most ecosystems deciding which tool to use in which situation is a skill
which builds up with experience.

~~~
mkirklions
Here is too much information, but this is how I spend my evenings now...

Goal is a finance tech app, although I probably just need a pretty front end,
and I can do stuff manually in the background (like invest money, wire
transfers, etc...).

I do have some database experience, writing to mysql. Was planning on doing
that using LAMP, because I have experience already.

Features needed:

>write to database(should be easy with my previous experience)

>Usernames/passwords(I am actually clueless how to start doing this, I have
Wordpress if needed)

>Accept payments(but again, I can probably do this through wordpress if its
too time consuming).

Other specs, since its finance and people are going to be putting money into
it, its gotta look and feel good. I'm willing to invest many months into
building this to be perfect. However, progress feels slow since I'm learning
the new javascript react-native syntax.

Any tutorials you recommend? Working through the facebook tutorial right now.

last trivia question- I was considering using Reflux, but I saw an article
saying reflux is dying. I've heard facebook is especially brutal with changes.

~~~
peterhunt
With respect to the last point: redux isn’t dying. I’d posit that most
articles and blog posts written about front end technology are highly
inaccurate marketing pieces designed to get clicks :)

~~~
rattray
Probably misread that (or they miswrote): reflux != redux.

I would agree with both statements: redux certainly isn't dying, though reflux
may be.

------
dzek
If you are alone in your project and never used JavaScript - don't use React
Native. It won't give you any benefits at all. It's that simple.

It may be useful if you know and like JS already or your have a team of web
developers and you need them to build mobile app for you or your client. They
should be able to do it without much to learn and your will have an app that
can be potentially run on Android and iOS.

~~~
jannotti
I don't follow. In my opinion, if you're alone on a project, the case for
React Native (compared to writing an Android app in Java and an iOS app in
ObjC or Swift) is even greater.

The OP didn't ever explicitly say he wanted to create an iOS and an Android
app though, and I would agree that if that's not a desire, then React Native
is less compelling, especially if OP has never used JS, as you said.

~~~
beojan
Only if you are a web developer. If you already know other languages, Obj C /
Swift for iOS and Java for Android would be easier (even if there is
duplicated work).

Alternatively, you could use C++ and Qt for both.

~~~
jannotti
Ok, I guess that's where we disagree. I think that even if I were well versed
in native Android or iOS development, I'd be better off writing a new app in
React Native (even if I had to learn it all), rather than becoming well-versed
in native development of the other, and then writing two apps.

If I was an expert in both Android and iOS, and knew nothing of web
development... I still think I'd lean toward learning and using React Native.
But only then would it be a close call.

~~~
beojan
I would just target the platform I already knew first, then port to the other
if it turns out to be worth it.

------
JaRail
The library commonly paired with React/React Native for data is Redux.

People who use React and React Native to share code between web and native
typically report 85-90% of their code can be shared. Some UX code is platform-
specific. Most of the application code should be reusable. Much of the UX
code, such as for a button or input field, should be reusable. Getting high
reusability depends on strong knowledge of both platforms. That's kind of the
case with any abstraction though. The better you know the entire system, the
better your code sharing.

React is different from many UX libraries because of its functional structure.
You describe what you want, say <b>text</b>. Most people use JSX, but it's
really just representing that in a tree structure, an object for each node,
references to child nodes, etc. You don't code the algorithm/steps to
represent that to the platform. In a traditional native UX library, you'd do
something more like "Element textEl = new Text("text"); el.isBold = true;
container.add(textEl);". Then when you want to change things, you'd find the
element and adjust the properties, delete it, etc. In react, the mental model
is to just rerun your render code which spits out the new UX. The library
handles the diff/update. React Native essentially takes your tree, it's
knowledge of the platform's current state, does a diff, and makes those
updates for you. Naturally, there are a lot of underlying heuristics which
make that diff/update efficient.

Traditionally, coding a cross-platform app for both web and native platforms
is quite a bit more intensive than a simple language port. It's a ground-up
re-write.

Should also be pointed out that React Native is only useful for the
traditional event-driven style of apps, eg Facebook. You wouldn't use it for
games.

~~~
mkirklions
I find the structure very interesting. Thanks for explaining it, in your own
words.

I like the concept, but I'm struggling ton managing data outside the
component. I've read this is by intention.

Thinking I'll just call everything from my server, save user data into the
server directly and constantly recall from mysql. Goal would be to eliminate
variables. Although this is a pipe dream, I'll still have to keep users logged
in, and securely since this is a finance app.

Redux solves this problem?

~~~
JaRail
Redux is appropriate for that, yes. You'll need to write the code to
communicate with the server. So whatever fetch/update APIs you write there.
Then interpret the response, and push the data into Redux.

Your server is your main single-source of truth. But on the client, redux is
that source of truth that your UX and application code reference.

Lin Clark is amazing at explaining concepts in the React and Mozilla worlds.
Here's her intro to Redux concepts: [https://code-cartoons.com/a-cartoon-
intro-to-redux-3afb77550...](https://code-cartoons.com/a-cartoon-intro-to-
redux-3afb775501a6)

~~~
mkirklions
Thank you, validated what I thought I needed.

Wondering how I should hide all the goodies, pick an encrypt library and move
everything over GET?

I wanted to avoid doing back end work in the mysql/php? I could never get the
debugger to work.

------
buliam
I can’t speak to why React Native was recommended to you specifically, but
here are some reasons I think speak for React Native and which I’ve also heard
from other people (for example those who I’ve interviewed on my site
[http://madewithreactnative.com](http://madewithreactnative.com))

* Web devs can hit the ground running, more or less without having to learn a new language.

* One code base for both Android and iOS without having to write any native code (Theoretically. For some things, you still can’t get around native code), which leads to

* Shorter development times for apps for both platforms.

* For apps, which are basically just presentation layers for data fetched from server, performance is fine.

* Huge community with a lot of packages and libraries, especially because you can also use many node packages without any problems.

------
muse900
It depends on the product you are building and the team.

E.g for us it was super useful (team of 3) as we just hired a designer ux/ui
guy that knew some flexbox stuff and javascript and now he is adopting into
react-native quick enough and he is able to change bits in the actual app
without us having the need to do it for him.

What am trying to saying is that if we were doing native development for
example, there would be no way that the designer knowing a bit of javascript
could go in and do it himself in swift/c or java, he'd need us to do it for
him.

------
skybrian
Maybe try Flutter? It's still beta but has a good team behind it:

[https://flutter.io/](https://flutter.io/)

------
jamesmcintyre
React Native is amazing if you primarily work with the traditional web stack
of JS/HTML/CSS, especially if you're already familiar with React you're able
to jump into React with almost no retraining so you have immediate
productivity and power to create on iOS/Android.

If, on the other hand, you do not have much experience on a modern web stack
like React/Redux/Node then using React Native may actually feel
counterproductive. You would still be getting the benefit of writing once for
iOS/Android (or mostly once), reusable components across the app, a vibrant
React Native open source components library, a great hot-reload dev
experience, the benefits of React's design among other benefits but it all
comes down to what you feel productive with and/or how much time does it make
sense for you to invest in learning a new language/framework (or two) just to
build mobile apps.

If you're looking for a good resource to learn React Native lookup the udemy
courses by Stephen Grider, he does a great job of diving deep quickly yet
explaining important concepts thoroughly.

Good luck!

------
osrec
One question I would definitely ask is: why native? Would your app be just as
well-received if it was a PWA? Do you actually need any specific native
functionality? If not, then there are some definite benefits of trying the PWA
route, especially if you're good with JavaScript in the browser. We built our
app ([https://usebx.com](https://usebx.com)) as a PWA and have never regretted
it. No frameworks, no gimmicks. Plain old vanilla JavaScript, and it's the
same code base running on Safari, chrome, desktop, tablet, mobile, whatever.

------
ctulek
I didn’t do React Native programming in a real product and only played with it
but like many others, I used Javascript in different runtimes against
different APIs. The most famous ones are of course DOM and NodeJS.

The biggest advantage of React Native is that you can carry the same mental
model you learned about JS from one API to another: \- Representing data and
the available data types \- Doing async operations \- The pros and cons of the
single threaded execution \- Error handling \- Testing / Mocking

I bet I forgot a few others but all these change from one language/ecosystem
to another sometimes very significantly, and takes years to master. Objective
C/Swift and Java/Kotlin are so different than JS.

So, JS is not my favorite language but for any nontrivial new product, I check
if I can use JS with some runtime for the target platform(s) I am dealing
with. In that regard, the React Native decision is about checking what APIs
are available that will be needed in your project.

As far as I see, React Native is a perfect match for CRUD apps that help users
to interact with some data and business logic by using native UI/UX elements.

It does not seem to have much to provide though when you want to do some cool
stuff with the camera, 3D APIs, and other device capabilities. Same is true
for any new capability that mobile devices may provide in the future.

When you need all these advanced capabilities, one option is to go with a
hybrid model, implementing some parts with native languages of a given
platform. However, I have big reservations against that.

If I need to use these other languages in a nontrivial way, I would rather go
full native and master each language/ecosystem as an individual or team. It
will take sometime (for me it took 2-3 months, while learning/working in 3
ecosystems in parallel), but eventually the productivity/ease of development
is pretty much the same.

In short, if you are already a good JS developer, do some research on APIs and
capabilities that React Native provide, and if you are say ~80% sure that they
are enough for your products needs, go for React Native.

That is my 2 cents.

Edit: Typos and rephrasing

------
JamesBarney
I think react native is a good recommendation for a react dev who wants to do
cross platform development on mobile.

If you're not a web dev it's not a great fit. You'll have to deal with
learning web, learning mobile, and as well as all learning all of react-
native's leaky abstractions.

Sounds like a nightmare. I'd go with either native(Java/swift) dev or if you
have c#/wpf experience then maybe xamarin.

------
Gys
Your question does not mention the use case ? If react-native was recommended,
it was for a something specific ?

We use react-native for a cross platform mobile app (iOS and Android). The
alternative would be to write two separate code bases in two two different
languages for two separate OSes. RN was a no brainer and we are still very
happy with it.

------
paulryanrogers
React is newer than jQuery so there aren't yet as many mature libraries out
there. Still, it's component-ized approach, especially with Redux, can help
keep complex applications easier to manage and reason about.

~~~
bdcravens
React isn't "new". It was deployed on FB in 2011, and open sourced in 2013.
(2006 for jQuery). 4-5 years is plenty of time to develop a rich ecosystem of
libraries ... just recall jQuery circa 2010-2011.

I certainly wouldn't want to build a mobile app these days with jQuery, since
that would generally mean more of a pure Cordova app. (I do think that Ionic
however would be a great option depending on the use case)

~~~
briandear
Cordova or Ionic is perfect for those that don’t care about the user
experience.

~~~
mercer
Or those who have considered the options, advantages and drawbacks, and
decided Cordova/Ionic is the best tool for the particular job.

------
on_and_off
You don't really mention your usecase and that is crucial.

There is a niche where RN chines but that does not mean it is a great solution
for any app.

------
mmmex
> Ive programmed in 8+ languages, and up to this point Javascript was unused.

What languages and for how many years have you programmed?

------
megaman22
Depending on your background, and what you're trying to do, something like
Xamarin might make you happier.

If you're not a JS person at all, getting thrown into the full-bore insanity
of modern web development typically embraced by those who tout React and React
Native as the silver bullet, you're gonna have a bad time.

