Hacker News new | past | comments | ask | show | jobs | submit login
State of React Native 2018 (facebook.github.io)
418 points by acemarke on June 14, 2018 | hide | past | favorite | 246 comments



The biggest problem I've run into with React Native has been their handling of issues. Far too frequently I'll google an issue I'm having and click a link to a bug report that matches the exact problem I'm having and provides a repro only to see that the issue was closed for inactivity. Never mind the issue is still valid, and the comments on the issue will ask for it to be re-opened and the response is to open a new issue.

So then you start this goose chase of hunting down the current issue since it starts getting into this loop of closed, open a new issue, closed, open a new issue, closed, open a new issue, etc. And everytime this happens relevant information gets lots because its not transferred to the new issue.

And then you finally find the newest, currently active iteration of the issue and find out that its still not fixed and the workaround is to stop using the React Native version and re-implement the feature yourself natively on both ios and android.


I remember asking about this on Reddit and got a response from someone on the RN team.[1]

> In practice this means that we have issues coming in, but we never close them when they are fixed, causing them to pile up. So we decided that the best thing we could do is mark them as stale and close old issues that nobody has commented on in a while. If we mistakenly closed something that is still an issue, the community will let us know and we can reopen it.

The discussion I had with them was interesting, but it didn't leave me feeling like anything would really change. Seeing your comment reminded me of this and I guess the status quo has remained.

[1] https://ps.reddit.com/r/reactnative/comments/7wqxjy/why_are_...


I can't seem to understand what the problem with "pile up" is? The whole idea of logging issues is to see how long they're open for! In fact good projects take the painstaking exercise to coalesce tickets that are in fact the same with an original item IN ORDER TO track the correct age of the ticket.

This sounds totally backwards.


> This sounds totally backwards.

It is. It's the result of low level managers using issue counts as KPI: now it's a metric that must be gamed.


We don't use GitHub issue counts as "KPI" at Facebook.

The explanation is more prosaic: https://news.ycombinator.com/item?id=17316150


Nope, wrong on all counts. You need to delete stale issues, it's no good having an endless backlog of someone's nice-to-haves that they no longer even care about.

And, the "whole idea" of logging issues is not to see how long they are open for... it's to, you know, log issues, because they can't be fixed instantaneously. Measuring how long they are open for is just a pointy-haired boss side effect, because those are the kind of idiots that would think that kind of metric means anything.


I agree that how long they are open is meaningless, but closing them before they are fixed throws the baby out with it's dirty bathwater.


>Measuring how long they are open for is just a pointy-haired boss side effect...kind of metric means anything.

I don't think such cynicism is warranted. Open issue time is a useful metric, at the very least over time, of how quickly developers are fixing problems and how complex they are becoming.

Certainly not something for a pointy haired boss to optimize exclusively for, but a useful bit of data to be taken into consideration with other measurements of performance.


Of all the KPIs for development teams, how-f-ing-long-will-it-take is a pretty 'key' one, IMO.

It's not the only factor, it's highly product dependent, but it is very relevant to most outward facing activity...


most of the time the issues are also not fixed (a cross multiple releases) some of the issues are really basic ones, one can wonder why they made a release with them in the first place.


but we never close them when they are fixed, causing them to pile up

This is the problem. Why not close them when they are fixed?!?


If you have enough issues, just deduping and knowing when a commit fixes an issue to remember to close it becomes a problem.

Not saying this is an excuse, but it's unfortunate reality that "close most issues, see which ones come back" is one of the easier ways to focus on the most important bugs


Well, unless they have a triage team, you're counting on developers having a Spidey-sense that there's an open issue related to what they're working on. I assume the issue list is something they never asked for but feel obligated to doing a minimal amount to clean up.


Huh? You don't need a spidey sense to close a bug you just fixed, you just close it.


This assumes that the person fixing the bug is either the same one who filed the bug, or they were motivated to fix the bug after finding the GitHub issue.

In many cases, the fix comes from within Facebook or from a different contributor when we/they run into the issue themselves.


And this is exactly why React Native is such an unprofessional pile of crap. Random code changes from random people with no prioritization, documentation or coherent history.


So they cannot do even the basic issue tracking? Wow, what a mess.


The response that I've gotten, after complaining repeatedly, is that the team simply has no time to look at any externally reported issues, and that it's essentially a waste of time opening an issue.

This makes me very sad (as an ex-FBer especially), I wish that FB would just add another 3 or 4 engineers to the team with the explicit goal of giving them the bandwidth to be good open source stewards. I'm sure the FB engineers don't like having to ignore the community, but they do as a matter of policy.


They could learn a lot from Microsoft. VS Code, Typescript and related projects are a shining example of how to handle issues on open source projects. In fact, considering what heavy users they are of React Native, maybe Microsoft could be taking a more active role in the core project.


This is a great point. There have been a few issues that I've followed only to find that eventually the entire thread on Github with tons of example cases of the bug gets "closed for inactivity" because nobody from Facebook would respond to it.


They don't need to add more engineers - as an open-source project, all they should have to do is put one person to manage the community, encourage and vet new contributors. But that would mean losing some control.


I've found that to be relevant for a few issues (including one of my own) with Facebook Open Source projects—that or they just go unheeded by staff, but confirmed by a stream of others.

I am a distant outsider to that company, I haven't used the platform in years and remain quite critical of it and many business practices especially regarding recent exposures (though I am a fan of their engineering they've released or open-sourced for the web)— yet I can understand somewhat how staff associated with such projects are not necessarily actively and regularly allocated to addressing those issues. At times they're passion projects that still need to gain traction that entreats the company to something worthwhile to the company [re: endpoint-shareholders]—mindshare, general confidence, whatever. Big corps often do what big corps do...


>At times they're passion projects that still need to gain traction that entreats the company to something worthwhile to the company

That's not the case with React Native though.

The problem is that the surface area is vast, and the popularity is booming through the roof. If RN team looked at every issue, the (very active) development would stall completely. On the "web" React repo we can afford to do this because our surface area is much smaller, but on RN it's not practical.

So instead, the RN team tends to focus on the issues that are reported most often by the FB product teams. While this is not a great outside communication strategy, it ends up highlighting most pain points shared by folks outside the company too. Note this includes vast architectural improvements as highlighted in the post--something that goes way beyond a traditional GitHub issue report.

While admittedly this approach puts FB's needs first, it also serves as an important way to keep the team focused. It is very hard to deal with dozen new issues every day and still move the project forward so they chose this path.

I want to highlight that RN has maintainers outside of FB who help with different parts of the codebase (because again, the surface area is vast), sometimes with more expertise in those areas than people at FB. So the project isn't dependent on FB maintainers looking at issues alone. Folks outside can, and do help.

This doesn't mean issues don't end up being addressed in the end. But GH issue communication model just doesn't scale well for RN.


I think you should just hire a few smart people who can be dedicated to supporting these issues which are high priority outside Facebook.

These issues are extremely costly to teams using React and they absolutely need much faster resolution.


Why should Facebook pay for that? If there are issues that are extremely costly to a bunch of outside teams maybe they should be the ones hiring people to fix their problems.


> Why should Facebook pay for that?

Because the overall health of the open source ecosystem around React and React Native depends upon the cost of development being somewhat predictable.

Most of the bugs in this category are inefficient for most teams to tackle because they get below the surface of the APIs and tooling. Not only is there (by design) no contract for how these things should work, but the appeal of React and React Native is that the developers and teams using them can be selectively ignorant about these things.

In life one must choose which things to devote energy into becoming expert in. These kinds of bugs tend to be show stoppers for teams impacted by them. It's a coincidence that Facebook itself has not been impacted, but someone needs to adopt a higher level view to realize these are very important issues which the maintainer should be addressing as top priority.

Facebook is a many billion dollar company and can surely afford to put a few more top engineers on the team to do this stuff. These things create major credibility issues for React Native supporters in their own orgs.

If Facebook decides to upgrade to a newer Babel library (for instance) and it creates a major issue with an open source library that is used by 30% of React Native projects, this warrants direct attention by Facebook.

If a RN update causes thousands of teams using RN to get failed builds, there should be someone at Facebook trying hard to reproduce the problem even if there is no obvious theoretical reason why it should have occurred and it is not impacting Facebook's builds.

React Native is a great project, but this stuff causes a tremendous amount of thrash and wasted time for the teams impacted. It could be much more efficiently dealt with by Facebook directly (and should be).


It looks like Microsoft is pursuing React Native as an alternative to Google's Flutter.

It may be strategic for them to take that role and hire folks to work on React Native, either a MS fork, or as part of a conjoined effort with Facebook.


That's exactly what ends up happening: companies that invest heavily in RN also contribute back (and even help us managing issues and releases).


FWIW I think you guys should put out a major call for help to other companies and add more non-FB people to the core committers.

React Native is fantastic, but the ecosystem is thrashed around horribly by these kinds of bugs and the non response from Facebook for things that impact most of the non-Facebook open source ecosystem around React Native.


Been actively wondering if there would be enough interest/momentum for a community LTS fork.

Love RN, and the daunting vastness of the surface area not lost on me, but would be totally ok with me if development stalled for 6 months of purely bug-fix releases. Maybe I'd sound differently if I cared about integration with native apps.


Better developer relations.


This could even be a business model.

Pay $$$ or €€€ to get enterprise support, promissing to fix your issue with a Pull Request in the mainstream repository


Can't understand how any internal team at Facebook tolerates the sloppy coding practices of the RN team. Is everything just technical debt to be ignored and left behind so the team can work on the latest shiniest feature?


From descriptions, that's the way all teams at Facebook work.


All good points, thanks. I guess I was remarking on other experiences more to do with other FB Open Source projects versus giants like RN.

edit: Just realized which Dan you are. Thanks for the insights. Your team does good work.


I've had this exact experience multiple times.

Ironically if you wrote this up as an issue in their tracker, I would surely have one more such experience when they closed it shortly after.

That said I complain out of love, because React Native is just awesome when it works.


I'm one of the open source React Native maintainers here at Facebook, and I'm the one who has set the direction for how issues are treated on our React Native repository.

To anyone whose issue I've closed prematurely, it's OK to feel upset about it. Please do let me know when that happens, as that is the signal I'm looking for. Out of thousands of issues that the bot has closed automatically, only a few dozen end up getting commented on after the fact. Some of these issues we won't reopen because there is no minimal repro (usually because they were opened before we started enforcing the issue template, in which case, please open a new issue!), but in many cases all it needs is for a maintainer to go in and re-open the issue.

If you're reading this and you are one of the people actively participating in the repo, and you'd like to get added to the team that manages issues, please reach out. We have a handful of non-Facebook maintainers with this type of access and we're always looking for more. Shoot an email to my first name @ fb.com.

At this time, we're only automatically closing issues that don't make use of the template. The requirements are actually quite lax: all we ask is for you to run `react-native info` so we can get more information about your setup, and a minimal reproducible example. Questions and requests for help do get sent to Stack Overflow, and this is with the community's best interest in mind as we want to focus on bugs and regressions that affect people's apps. For anything that is not a bug report or a request for help, we have an open-ended discussion template that can be used to file issues that used to get closed automatically in the past.

We used to close stale issues more aggressively in the past, which was needed to get us down from thousands of open issues down to a more manageable state. The bot now only closes issues after four months of inactivity. The bot does give a 30 day warning which should be enough for people to verify if the bug is still present in the latest release, in which case they can leave a comment and the bot won't bug you for another 90 days. This way, we can prune out any issues that got fixed in a release - as others have commented, sometimes the people fixing a bug are not aware that an issue was filed for the bug for various reasons.

But the true purpose of the stale bot is transparency: if there has been no activity in the issue in such a long time, it's not something people should expect to see fixed soon. Typically, issues where someone is able and willing to provide a fix for, or long-running issues describing a problem that does not have an easy fix but the core team wishes to fix at some point, will have some sort of ongoing discussion, in which case we protect the issue from being closed by adding the appropriate label ("Core Team" or "For Discussion").

Finally, I want to point out that the project is open source. If you are waiting for a fix to be merged and need to unblock yourself right now, you can always cut a release off your own fork. Please let us know when you do this, as this helps provide us with some signal about PRs that could be prioritized.

PS: If you would like to learn more about how we prepare each release, please visit https://github.com/react-native-community/react-native-relea...


Well, I see there's at least been some action on the TextInput regressions that were keeping us on fork! <3

Not that running a patched version is necessarily a huge deal, but it's nice to have that 'this random code is approved by someone that actively works on the codebase' stamp.

(well, still might be on 0.55.3 for the version if NetInfo we can work around, but I do appreciate the project, warts and all)


Another similar issue is they never accept Pull Requests from github.


There's a long tail of PRs to go through and review, and the ones we review may take a while to get to a point where they are accepted, but saying PRs are never accepted isn't quite accurate: https://github.com/facebook/react-native/pulls?utf8=%E2%9C%9...


I've had the same experience in multiple open source projects. Seems like not spending though resources on unsexy things, like QA, is typical for open source – although I'd rather expect it from volunteers than FB's engineering team.


I mean... It's a fast moving ecosystem and a coalition of the willing. You have to submit PRs too.

I'm not unsympathetic to your claim but context matters. This is an enthusiasm problem. Not a community one


It's the CADT model of software development: https://www.jwz.org/doc/cadt.html


FYI links to jwz.org from Hacker News redirect to an... interesting... image. Copy and paste into your browser instead.

As an aside, who's really the man child? Hacker News users, or the ~50 year old man insulting/trolling them with that image?


Strip your referrer https://fkref.com/?8XB37z8i


NSFW Warning


works ok for me now


Previously it redirected to a photoshopped picture of a testicle in a cup.


It still does for me.


Lots of negative or neutral posts in here, so let me chime in: I love React Native.

It’s not perfect, but it’s very damn good. One of the most impressive pieces of software I’ve encountered in 9+ years of mobile and full stack development.

I do all my projects in RN now, and I believe it gives me a 2-3x iteration speed advantage over my competitors with indistinguishable-from-native interactions (using react-native-navigation) and the ability to be on all platforms. For a solo dev, these advantages are insanely powerful and are the major reasons that my business is viable.

Last year I rewrote my game Falcross in RN and I’m so happy with my choice. Seriously, check it out and see if you can tell it’s a “hybrid” app: [App Store]: https://itunes.apple.com/in/app/falcross-logic-puzzles/id500... [Google Play]: https://play.google.com/store/apps/details?id=com.rawrmaan.f...

At 5k+ DAU I believe it is the largest production game written in RN.

There are more apps but I’m on mobile and it’s too hard to link them.

Major kudos to the RN team for all their hard work. RN makes me feel very dangerous as a solo developer and honestly makes mobile development more fun than I have ever imagined (especially paired with TypeScript). Thank you!


I tried your game on my Pixel 2, and aside from the performance issues already mentioned by other posters, there are very clear 1px misalignments (buttons borders, screen edges) that make it fairly clear (imo) the app is not native.


I don't have a lot of Android devices to test with, though it looks perfect on the ones I have. I would love to see screenshots of the imperfections you're talking about, it would be a huge help! If you see this, please send them to rawrmaan [at] gmail [dot] com. Thank you!


I have just tried it and I can't really tell that it is non native since I don't expect games to be native anyway.

I do see that the buttons don't align with what the OS displays but that's ok for a game.

What I do see however is that it performs VERY poorly on my Pixel 2. Which is pretty surprising considering there is not much going on on the screen.

Not a major hindrance for this kind of game, but still very noticeable.


I will say that Android performance, especially in recent RN releases, has been one of my biggest issues with RN.

Everything about the game is highly optimized and performs beautifully (60fps) on all 2013+ iOS devices, but inexplicably performs very poorly on even some very new Android devices. I think it has to do with problems with the Android driver for Native Animated.


>inexplicably performs very poorly on even some very new Android devices

That's the unfortunate toll you have to pay when you add another layer of abstraction like this.

It is sad .. a crosplatform solution that performs horribly on one of its two targets is not a great one :/


I want to second this post.

I've really enjoyed react native, and I dread doing application development work outside of it now. Many of the complaints in this thread are totally justified and reasonable complaints, but even with those issues I find RN to be the best platform to develop cross platform applications.


You've developed a fun little game but on Android it really feels 'out of place'. The UI elements seem to be from iOS and performance is surprisingly poor for such a graphically undemanding game


I addressed the performance in another reply, but I would agree that it is surprising. And yeah, the UI is mostly iOS-inspired. Looking to bring it to more of a happy medium over time.


That's good to hear, although I assumed that one of the benefits of React Native was that the UI remains appropriate to the host platform


I haven't installed it, but I note that there's no explanation of what a "Picross / Nonogram" is on the google play page. So if I stumbled across this game I wouldn't have any incentive to try it out.


I was A/B testing a much better description and forgot to apply the winner. Thanks for the reminder!


Given your background, maybe you or someone else here could help me. I am about to start a new mobile project, and I have yet to decide whether to use RN or Ionic.

My project will be nothing very fancy: mainly "forms" and use the camera and audio recording. But at some point in the future I would like to use hardware features more heavily (real time audio processing, GPS among others). Would you think RN would be a good fit for this? Have you had experience with Ionic? If yes, how do you think both of this compare?

I know that Ionic is not native, but I am more looking to understand how many headeches will I get to use the phone hardware on each of these two platforms.


I can’t comment on Ionic, but for the features you’re talking about, RN is definitely suitable. The RN ecosystem of native modules is certainly massive. Off the top of my head:

Forms: tcomb-form-native Recording: react-native-audio GPS: react-native-background-geolocation Camera: react-native-camera


Gonna try it out! Looks fun :)

I'm curious, you use react-native-navigation. Did you ever try react-navigation? That's what we are currently using. Don't have any strong complaints, but know it does everything in JS. Was wondering if maybe you tried both and have any comments.

BTW, here is our RN app. https://itunes.apple.com/us/app/bunch-group-video-chat-games...

I (we) also love RN (most of the time :P ).


I haven’t tried a recent enough version of react-navigation to comment, but the older version was so bad in terms of complexity, missing basic features and inconsistent paradigms that I am permanently taste averted to ever installing the npm package again.

react-native-navigation appears to me to be the best available option. The main downside is that it kind of “takes over” your app in terms of the native bootstrapping process on either platform, which can make integrating other native modules slightly more challenging.

Your app looks fantastic, by the way!


How well does it run without a network connection?

How well does it run on an intermittent network connection with poor bandwidth?

How well does it support key native features of both operating systems?


1) It runs very well without a network connection, you just can't access the online features. I've written my own syncing logic to make sure a user can experience the game for days or even months without having a network connection, and then have all their progress saved when they connect.

2) It works very well on low bandwidth connections. The puzzles are represented as strings and there are no remote images loaded.

3) For features that make sense in this game (sharing, IAP, haptics, notifications), it supports native functionality flawlessly. It is very easy to write native modules for RN, and there are may great npm packages that implement commonly needed native functionality.


I write native modules for a React app, and it's not easy at all. React on iOS is an unprofessional abomination, a mass of compiler and console warnings that make it almost impossible to determine what your own code is doing.


I’ll just have to disagree. There’s a bit of a learning curve, and yes the React project is full of warnings, but Xcode has filters for that, and breakpoints work brilliantly. I guess I have a big advantage in having 6+ years of native iOS dev experience.


Yea, I only have 7 years native experience, which tells me Xcode filters don’t work worth a crap at separating out our warnings from RNs warnings, and that warnings are still a clear sign of amateurish coding practices, and burying the console in gibberish is, like the warnings, a recipe for obfuscating serious issues.


Hm, I can’t find the app on the App Store when I search “Picross Logic”, however it appears with “Falcross”

Consider your DAU +1


Hmm interesting find. The app title is mostly for ASO to target the keyword “picross” but I’d never tried that keyword before. Very strange!

Glad you’re enjoying the game :)


There sure are some things to fix (Tutorial label placement on iPhone X, some buttons look blurry) and some behaviour that is not native (like the transition between screens), could be implemented but gives a clue that it might not be a native app.

Anyhow, the game is pretty fun!


Thanks for the kind words! Yup, fixed the tutorial button for the next release, and I should add @3x assets--I have poor vision so I forget about stuff like that.


I'm guessing that DAU in this context means 'daily active users'?


Yup.


On iPhone X, the placement of the tutorial button in the notch gives a non-native feeling. But a lot of existing native apps are also guilty of this. Otherwise, kudos, it is indistinguishable


Thank you! This is actually my fault and is fixed in my upcoming release. All of the other views are iPhone X optimized, which is quite easy to do in RN.


My largest issue with RN is that despite being "cross platform" there are numerous times it is not, and the documentation may or may not reflect this. From the image cache policy for remote objects not being obeyed on Android, resulting in all images being cached all the time (open for multiple years, never even acknowledged), to basic features like tiling an image just now coming to Android. Heck even making something as simple as the keyboard not occlude the field being typed into is not cross platform, with the docs just saying that some props may work better than others on android versus iOS.

That and just how very fragile the entire JS eco-system is. Running NPM Update ranges from doing not much at all, to breaking my entire system making deleting all of node_modules the only realistic fix.

React Native is partially magic, and JSX is really nice to work with. But the complicated things take minutes[0], and the simplest things take hours[1].

All that said, I'm still thankful to Facebook for putting out this project. Even if it does behave... weird at times.

[0] Networking? Stupid easy. Even if my linter is unhappy about 'fetch' not being declared anywhere. Great libraries mean things that are normally a nightmare, like, authentication become really easy. And the community has a to of tutorials.

[1] Want to make an image responsive? Or just learn how to render an image properly at all? It is the opposite of intuitive. Also React-Navigation is bad-but-getting-better to work with.


re: react-navigation, I am one of the two primary maintainers of this project and I started working on it in January of this year because it was in a pretty rough state. I think it has come a long way in that time even though there is still plenty to do. I would love to hear what simple things have taken hours for you when using it, feel free to reach out on Twitter in DM @notbrent or email brent at expo dot io. Also, the roadmap for our next major version is here: https://github.com/react-navigation/react-navigation/issues/....


Short summary is, well, the drawer is all sorts of weird. How the drawer interacts with everything else is also kind of weird. How to open a drawer with a NavigatorService is not something I could find documented outside of Github, and the comment there was old and what was suggested didn't work.

I have also seen people post suggestions on how to use the library that are just flat out wrong. Suggesting using props that don't exist (!!!???), and I've seen at least three recommendations of how to do lazy loading. Now that the docs are better these issues are going to go away, but unfortunately old blog posts (and github threads) live on.

Speaking of the documentation, it has gotten 10x better over the last few months. It has a ways to go, and pictures would be super nice. The React Native community likes to post Expo apps to showcase APIs instead of having super robust examples in the docs, I get why (and sample apps can be super useful!), but sometimes a "this option results in this" doc is super useful.

When I was first learning the library, some of the documentations labeled navigationOptions, some of them didn't and just passed it in positionally. It looks like the docs have been cleaned up, hopefully other examples around the web do the same thing. When I was trying to learn the API, this was very confusing, but I think if I had to learn it from scratch today, it would be a lot easier.

(If Steven Girder hasn't updated his examples, ask him to! His RN course is insanely popular and introduces a lot of people to React-Navigation)

So I guess saying it is bad isn't correct, but up until very recently, doing anything with the library was an effort in frustration just because of the documentation.

I'm still going to DM you some questions about the drawer though! :) (Update: answered, I was doing some things wrong, and Drawer is being rewritten to make more sense!)


Just want to thank you for your effort, you rock!


> That and just how very fragile the entire JS eco-system is. Running NPM Update ranges from doing not much at all, to breaking my entire system making deleting all of node_modules the only realistic fix.

That just sounds like a poor understanding of dependency management.

Blindly running 'npm update' means just 'update all dependencies (respecting semver versions in package.json)'. You're going to have a bad time doing that, if you do it rarely, because a lot of stuff is going to update at once. The same applies in most ecosystems (maybe with exception of Elm that has strict enforcement of semver).

Sensible practice is to do something like 'npm outdated' (ideally in CI) to inform yourself of outdated packages and then manually update specific top-level dependencies judiciously, and re-run your test suite against them.


> That just sounds like a poor understanding of dependency management.

And yet a lot of tools and large packages will spit out an error telling the user to run NPM update. As someone who is new-ish to JS, I generally try and follow the recommendations of those who are supposed to know better.

> The same applies in most ecosystems (maybe with exception of Elm that has strict enforcement of semver).

I previously did C++. Breaking changes were few and far in-between. It helps when the library is only updated once every few years. :-D

Now days? Things that break in my environment:

1. Android Studio, I have never not had 2-3 hours of down time after an upgrade. Mostly involving... The Android Emulator. After updates, it just doesn't start. This leads me to: The images on the Android Emulator. I finally have found one that works reliably, I am sticking with it.

Finally, Expo. It is just odd in places.

That is pretty much my entire development stack, short of my editor. Happily enough, VSCode updates just fine.

I have the RN debugger working more or less. There is a Cross Origin Resource error that occurs everytime RN opens up chrome, it opens chrome up to localhost, and I have to type in my IP address instead, which is a bit odd, but the debugger now attaches reliably, so compared to what it was like before, I'm good.

The Expo client is random. It tries to install Expo on the Android emulator all the bloody time, sometimes it works, sometimes it doesn't. I just want Expo to open. I have to use the client to open the emulator if my IP address changes, and this can take 10-15 minutes to jump back and forth between trying the command line client and the GUI client, eventually one of them opens my app.

And then if I login to my app too many times in the emulator, I max out the # of connections allowed to google's auth service and I have to shut down the emulator to close the connections or else I can't login again. I'm guessing it is a bug with how hot loading code works (not cleaning up open network connections?), but at least I understand the fix for it.

Basically the entire RN development stack seems like jank.

Also JS taking 5 minutes to compile blows my mind. I've compiled entire embedded OSes in less time than that (and they did more!).


> And yet a lot of tools and large packages will spit out an error telling the user to run NPM update.

I've honestly never encountered an error with a message telling me to blindly run npm update. What's a package that does this?


never had problems with expo, the emulators dont hold state if you close them, only time it will reinstall is if you close and open the emu OR expo client has updated but you get a prompt asking to update


FWIW I regularly (every month-ish) update all my dependencies in my native iOS projects (cocoapods) and it’s exceedingly rare that things break and when they do, it’s a matter of tweaking <15 lines of application code to fix. Stuff really only gets ugly if you go upwards of a year without updates, and even then it’s still somewhat manageable.

So maybe some library ecosystems are worse than others.


I've had the same experience with the current enterprise Android project I've developed and maintained by myself (at a company). I have my library versions all in my top level gradle file and every few cycles I'll go through and update everything to latest and just build the app and see what happens. It's rare anything bad happens at all. I encounter far more trouble upgrading gradle and the build plugin itself than my dependencies.


> I encounter far more trouble upgrading gradle and the build plugin itself

Could be time to switch from Gradle to Bazel. It would also be nice to see the last of Apache Groovy, don't you think?


> Running NPM Update ranges from doing not much at all, to breaking my entire system making deleting all of node_modules the only realistic fix.

Why not just pin your dependencies to specific versions, ie - “somepackage”: “4.2.9” ?


Having to delete node_modules to “fix” it is indicative of a poor package manager. Although not entirely the same, it reminds me of cabal hell, in Haskell many years ago.


I've had to do that with every package manager though.


After working with pip and gradle I have never encountered that issue


I'm borderline infuriated that this isn't the default way that npm works. Maybe if people didn't willnilly break things and followed semver, it'd be okay, but I waste too much time bisecting why some package that used to work is blowing up my build or failing in less obvious ways.

But I'm a crusty almost-30 .Net developer used to Nuget.


npm does maintain a lockfile for you by default since npm 5, if that's what you mean.

There really is no reason to be encountering surprise sub-dependency changes with npm.


Happens all the time when package.json defaults to foo: "^1.2.3", and some bozo does breaking changes in 1.2.5.


If you have a package lock, even caret in package.json won't automatically install it.


> Happens all the time when package.json defaults to foo: "^1.2.3", and some bozo does breaking changes in 1.2.5.

No it doesn't. Since npm 5, npm is lockfile-by-default, you don't get updates unless you ask for them. Whether one particular package correctly respects semver is irrelevant.


Because that's not how it works. Subdependencies are still liable to slight shifting - of course there is the shrink-wrappish package-lock and npm ci, but they do some weird things I don't want to elaborate here.

Npm is more fragile than it should be.


It's not related to RN but you touched on something with NPM that made me realise that, for some reason, I never trusted its `update` command. If I wanted to update a specific dependency to a new version I would take the `apt` approach and just install it again, or tweak the version number directly.

Contrast this to how I've approached it in, say, Ruby...I'm very confident in blindly running `bundle update` and checking the diff to see the result.


I've been using react-native-navigation from Wix. The documentation is a little sparse but so far I've gotten it to do everything I need it to do.


Me too, so far it has been the best solution. Some things you have to fiddle with for a long time to get working. But overall very good.


Hi! I've contributed at lot into RNN and love to read comments like yours. I feel the library is very underestimated by the community and IMO should be maintained and shipped with React Native by default.

I've been planning to switch to V2 in our starter kit for the next major release.

https://github.com/ueno-llc/react-native-starter


re: [0] you can probably declare fetch as global variable in your linter config to fix that.



I have been working on a commercial RN project for 2 years now. As of today, the project is ~50kloc, and provides builds for Android, IOS, Windows, and Macos platforms. I started it using RN after prototyping with an early Ionic2 version and checking Xamarin.

The code share between IOS and Android is very high, almost 100% (except a few simple home-made native components), and we are above the 85% of shared code between the mobile and desktop versions (mobile is RN, desktop is react-native-web + rewriting of several components on a Qt WebEngine with native versions of a few RN components rewritten in C++). The C++ part is actually very simple, and under 2Kloc. Note that we use Typescript everywhere on the React side, and we consider it very valuable.

Overall, everything works great, we have a few performance issues here and there, but nothing we can't deal with. However the biggest flaw is how indigent the build system is (combining all the flaws of npm and the issues of android upgrades), we still do not manage to have reproducible builds, and it's been sometimes very painful to fix an issue a few weeks later because it would just not build and require a few hours to make it build again.


> all the flaws of npm

Can you not use yarn?


What flaws of npm does yarn fix?


Oh my where do I begin -- Yarn (to me) appears to be faster, and breaks less (if ever). With NPM I kept finding things not working, and having to delete node_modules and re-installing. Yarn just works, and I haven't even considered using NPM since installing yarn.


Ehh, I have a `yarn depreset` command in my package.json files on most projects at work because I still often have to delete node_modules and reinstall everything. I got tired of typing out the whole thing.

Granted this is oftentimes because our dependencies float a bit, especially since we've been migrating to a new major version of one of our major dependencies, but it's still usually the quickest way to fix weird dependency issues.

For us, npm tends to be really wonky in a CI environment. Partially because our CI container needs updating, but also because `npm install` doesn't actually do what you think it does. Gotta use `npm ci`. But the npm in our CI container is old enough that it doesn't actually support that command (yeah yeah, I know -- I don't have access to that part of our build process).

As of npm 6 though, the differences between yarn and npm have been whittled away considerably. Really, the biggest reason we use yarn is because we also use React and a number of other libraries that come from Facebook, so we're just staying under the same umbrella. We don't expect Facebook to break their own tooling, basically, while npm has indeed broken a few things for us in the past, many times critical things.

Not the most compelling of reasons to be sure, but that's why.


Do you have any actual issues yarn solves for you besides an anecdotal “it just works”?


I do.

It caches locally and doesn't hit the net for most redownloads, the lockfiles are significantly more reliable, there's the ability to "force" a transitive dependency to another version, the workspaces system lets you work with monorepos with multiple packages much easier, tools like "upgrade-interactive" are built in and make upgrades much easier, and more that i'm probably missing.


So I just thought I would put my thoughts into this, I've been using React Native to create a number of Apps for a very large company for a few years now. These Apps are used out in the wild and I get to see them being used. As a codebase I think it's great - a really nice way of working and creating something. It's got great integration with tools and the general code setup is really nice.

However; If I'm being honest I don't think I've ever seen a worse managed project in my career. Each version that comes out seems to be completely incompatible with the previous one. Getting the App to simply run can take far longer than it takes to actually build the app. There is no locking of library versions so things conflict constantly. Often times the team will update React Native to use some new feature, this makes all backwards compatibility with Xcode incompatible. I think I drew the line when the advice was, just update your whole OS, download the latest Xcode, Yarn and then this latest version will work.

To be frank, it's infuriating - and I know it's not yet 'officially' released but if this is the state of how they plan to manage React Native in the future, I can't see much hope in it. And that would be a shame, because as a framework I think it's fantastic.


I never really understood the version numbering. It's still pre-1.0 and yet it's somehow production ready and encouraged. We're using React Native at work but I'm really conflicted about it for a number of reasons. As the sole mobile developer it's my responsibility to deliver our apps but something in the back of my mind doesn't sit comfortably pinning everything on a framework that isn't even v1.0 yet and it shows.


Indeed. The project has been in development for 5 years, but feels like it is five months old. Full of bugs, every release breaks something major.


You've got to give them credit though, it's pretty ambitious (and very useful for some cases).


A few years back I was working with Titanium SDK to build apps in my spare time; so it was a pretty obvious choice for me to checkout React Native. It's pretty cool at first but once you dig a little bit deeper and try to tweak things here and there, add extensions, third-party frameworks, ..., the pain becomes very real.

In fact, I learned iOS app development using Swift & Xcode just to not work with React Native anymore.


Had a very similar experience with RN and also learned iOS swift as a result.

It felt to me like I was fighting with the framework every step of the way, swift on the other hand is an absolute joy to work with.


And I am sure your users appreciate it!


Why? Do you think users would really notice the difference between React Native and native?


I think the commenter is saying something I've felt about cross plat for most of the 10 years I've been working in it... ultimately the best user experience is delivered by the native platform and tools.

Cross platform tools can get you really close but you'll be spending a non-trivial of your time tinkering/tweaking shared code to fix or create different issues on different platforms. That's time that takes away from creating a great user experience on a single platform.

That's not to say Cross-platform tech is all bad. Just that you have to be aware of the tradeoff that you won't be able to 'give it your all' towards the best user experience on a single platform.

PS - the one tech stack that gets you really close from all the ones I've tried (Mono, C++, hybrid web apps, RN) is Unity. But that's for an entirely different use case than apps :)


The huge myth about cross-platform mobile development using web technologies isnthat it gives you a faster time-to-market.

The reality I’ve seen, developing both hybrid and native, is that native has the faster time-to-market because all of native stuff (debugger, GUI builder, etc) works out of the box and all the time saved by a shared codebase is eaten up with tweaking the shared code, having to do stupid JavaScript tricks, and dealing with all the bullshit of the web that hybrid development brings into your app.


I'm sure the users appreciate native. Native is the best you can get. Anything else my be better for the developer, but is worse for the user. Especially with something like power consumption


Yes, they do. Obviously they might not know that the difference is due to the app being coded differently, but people do notice the little bugs and odd workarounds and slightly off UIs in apps where the dev(s) are either not skilled enough or don't care enough to hunt down every case. Granted, they may not react (heh) much more than "Huh, this app does this weird thing"


Of course they notice. It is very easy to spot when a company is cheap and uses cross platform tech. Some (Xamarin) are easier to hide than others (RN, Cordova), but it’s always there.


Yes.


My problem with React Native is lack of proper ES6 support on Android. The issues are closed on GitHub instead of being addressed. See https://github.com/facebook/react-native/issues/11232


> No updates but if you'd like to help financially sponsor the work to get this done...

For a project coming from Facebook, this is a bit rich. It's basically saying "you can pay us to build it for you," which isn't wrong, but it's not what you expect from filing an issue on an open source project.


What is very well known and understood with React Native is that Facebook has surprisingly limited resources to work on it, so Facebook developers mainly work on parts of React Native that Facebook uses. It's understood that if you have a feature or use case that Facebook also doesn't have, you should be prepared to contribute that yourself.


It's not a case of limited resources. There's twice more people on React Native team than people working on React itself, and that doesn't count all the neighbor projects that RN relies on (Metro, Yoga). And still this isn't enough.

At some point you can't "throw more people" onto the problem. Facebook can't just add a few hundred developers to the RN team and expect them to collaborate well. But that's more or less what you're asking about.

Realistically, several companies "scratching their own itches" as referred to in a sibling comment reply tends to work better because it creates focus and areas of responsibilities around real use cases.


This isn't "coming from Facebook".

RN isn't maintained by Facebook alone. The surface area is vast, and there are many folks externally who help with different pieces that they depend on or care about. There's a few consulting companies that help maintain RN, and they need to earn money in order to be able to contribute to open source instead of working on their client's projects.


I think this very problem is what makes a lot of people cynical about open source software. HN sees frequent "If you want to see development on [open source project X] continue, money puts fingers to keys" cries for help—from the FSF to Mozilla to Apache. And yet, when one of the most valuable companies in the world writes a blog post about their open source software, leading with:

> At Facebook, we're using React Native more than ever and for many important projects. One of our most popular products is Marketplace, one of the top-level tabs in our app which is used by 800 million people each month.

has a project that's short on cash, how much money does it really take to make this stuff happen? When a company with tens of thousands of employees and billions in revenue and a billion users can't manage to address the very real and critical problems that their insanely popular framework has, what is a tiny project like PyPy supposed to do? What are the folks that make react-router supposed to do? What about the people that contribute to vim/iTerm2/VLC?

Certainly, the world keeps turning and open software keeps getting written and improving. But if you're embedded in open source and you see this kind of nonsense, it's hard not to feel a twinge of cynicism that even a deep-pocketed sponsor can't manage to help a project be exceptional.


Facebook invest in the part of ReactNative that they care. Other companies can invest in the other parts that they care.

Isn't that the point of Open source? Project gets better by everyone scratching their own itches, which collectively means everywhere got scratched.

How would RN being closed-sourced better in this case? Facebook will still fix RN in the part that they care, the different is you don't even get to use that.


Seems to be good enough for them. If it's a problem for someone, that someone should fix it.


It's not unheard of to have "sponsored" issues. In this case though, none of the commenters on that thread work at Facebook. It doesn't mean the issue won't be fixed if no one sponsors it but if you care about it getting fixed sooner, you can send in a fix yourself or sponsor someone else to do that work.


Have you tried replacing the JavaScript Core with the one from the react-native-community repository? https://github.com/react-community/jsc-android-buildscripts


The downside with those is that the build of JavaScriptCore is significantly bigger than the one React Native currently ships with. It's quite a big dependency to have in an app, and a shame Google doesn't expose the system V8 runtime on Android in the same way Apple does with JavaScriptCore on iOS.


Android stopped having a system V8 runtime several years ago. Ever since all webviews you use are just frames to a normal app that's updated over the normal app stores.


Right, but you can use the system webview that way... so why not also use the V8 engine embedded inside the system webview?


It's ironic (and frustrating) to see this marked as "resolved" (albeit from a bot), when really this issue should be left open for others to see


Is there a plugin for this that can be used (such as in .babelrc or some such)?


React Native is hot garbage. I work on a commercial project and it's unbelievable that it can't even compile without hundreds of warnings. Talk about low quality development work.

And every few weeks I shudder to pull a new version, knowing something will have change that broke our builds.

Now let me tell you about debugging in poor network conditions. Ugh.


That doesn’t seem to be something I’ve seen any of the core contributors acknowledge and is often overlooked. As a relatively inexperienced developer it seems like a bad thing on the face of it but the builds still succeed... what’s the tradeoff?


I'm actually a native developer. I'm responsible for a framework that supplies the react app with features it can't implement on it's own (or can't implement efficiently enough). So when I do builds, I need to know if I have any build warnings in my code, but it's almost impossible to see mine in the mass of React build warnings.

It also makes me wonder how compatible react apps will be, for example one build warning about a deprecated iOS feature I inherited actually causes a crash on iOS 12. We have over 400 warnings from the react code alone, how many of those are future land-mines? Quality development dictates your builds have few, if any, compiler warnings. Even if they are things you know will never be a problem you fix them or adjust your warnings so they don't potentially obscure other, more dangerous warnings.

That's a good rule for any professional development project, but when you are developing a shared class library for other developers to build professional products from, it's far more important. The React team's failure to clean warnings makes me question their actual ability and commitment.


If I recall correctly, many of these warnings come from the default settings provided by the starter Xcode template. As we mostly integrate React Native into existing projects here at Facebook, this is something that we're mostly blind to.

As it happens, someone sent a PR the other day that fixed a bunch of these warnings just in time for the new release candidate we just cut this week. Please give 0.56.0-rc a try. If there's any warnings that still need to be addressed, send a PR or open and issue and ping me. This is something we want to actively clean up :)


Hi! I'm the author. Let me know if you have questions that aren't covered in the post.


Hi - What's the latest philosophy/best practices on interop with React web?

Is the philosophy still 'learn once write everywhere'? There are so many different approaches now to reuse React Native with React, like react-native-web and react-native-dom, it's confusing.

Some of those solutions are non-starters for me since I started with a React webapp and want to now have a React Native app that shares most of my existing code.

My gut feeling is just stick with HOCs, SFCs, proper isolation of the views and I'll be able to share the bulk of things like action creators, reducers, etc. Is this reasonable? Are there other good practices?


Your plan of sharing business logic sounds good. We don't currently have any recommended way to share code between web and iOS/Android, although I'm hopeful we will at some point in the future.


I'm actually curious - how does the React (Native) team feel about such efforts? Initially RN was pitched not for cross platform app development, but "learn once, write anywhere". I guess this is the reason why sharing more code between RN and web hasn't been prioritised by the FB RN team, but do you see your team wanting to encourage this?


For sharing code (even view code) between React Native and React web projects, also consider Microsoft's ReactXP project[1]. It is very actively developed and might be what you're looking for.

[1] https://github.com/Microsoft/reactxp


Have you used it? I saw it before but felt wary about having yet another layer above RN and React. I’ve been burned by taking on too many dependencies doing magical/black box things in the past...


Could you possibly say in more detail where in the RN codebase can I find the exact code which generates the "single JSON message that lists mutations to perform" that you claim? I'm super interested and desperately trying to pinpoint it, but I'm having really serious trouble with that :(

(Cross-posted this question to: https://stackoverflow.com/q/50873408)

(I've already asked this in a post on the parent thread, but I let myself copy it here in hope there may be higher chance you'll read it that way...)


Awesome, thanks for posting this! Been hearing/reading some of the claims that FB is done supporting RN and it got me spooked :p

We've been working on a RN project [1] for the list 6 months or so. Although it's been a bumpy ride - overall I have loved it. RN mixed with Firebase has been an awesome experience.

[1]: https://itunes.apple.com/us/app/bunch-group-video-chat-games...


I already posted a comment before seeing your question, so here is just the main point:

Will React Native finally support exchanging BINARY data (ArrayBuffer, TypedArray) across the bridge?


Any plans for desktop support? (especially Linux)


No concrete plans, but I'd love to see it happen someday!


Is there any of this new architecture on the master branch yet? I am currently working on a React Native renderer and would like to try and make sure it will be compatible with this re-architecture.


Most of the code is in the repo in React/Fabric/ and ReactCommon/fabric/ but unfortunately it's not runnable yet due to some missing dependencies that aren't currently in the open source repo.


Will the ability to make synchronous JS calls allow for something like preventDefault() on events?


Yes, we'll likely support some form of this. It's important for controlled native components too (ex: text inputs).


Question to RN experts: does anyone of you know where in the RN codebase can I find the exact code which generates the claimed "single JSON message that lists mutations to perform"? I'm super interested in pinpointing it, but I'm having serious trouble with that :(

(Cross-posted this question to: https://stackoverflow.com/q/50873408)


One of my main issues (as RN plugin developer) is build system being so fragile. Plugins are usually declaring different library versions. Same thing with gradle versions itself. Currently RN is using gradle 2, but some plugins started to use gradle3, which lead to even more incompatibilities.

I also have several suggestion for RN, but have bad experience with ignoring my issues. React team recommends react-native.canny.io for feature request, but those are pretty much ignored too (not seen official response to any of those).

This is very frustrating as plugin developer who really want RN to progress forward and works for free in my free time.


Any plans to fix the hundreds of build warnings RN causes and the broken configuration settings that make parallel builds impossible? Huge pain points in our hybrid native/RN app.


I moved a way from react-native to flutter because developing react-native is frustrating. Note: I love React and Redux but I HATE react-native!

a) Flutter's hot reload is a much better experience than react-native or Expo.

b) I am more confident with Flutter (React-native makes me feel incompetent since I have no idea about native stuff). With Flutter, I feel that I am in charge of my code, because dart compiles to native arm code.

c) I have OCD and don't like RN's console warnings when I am compiling the code.

d) Flutter UI widgets are so consistent that I don't even bother testing on both platforms. (one is enough)

e) I dislike RN's ecosystem. I don't even bother making canny request on react-native's canny, due to lack of response. None of the most popular planned FRs from last year are done yet ! https://expo.canny.io/feature-requests?sort=top

f) React-native's libraries are out of date.(I prefer corporate backing over community support)

g) lack of response on stack overflow

If I wear react-native, I would take Flutter's approach instead of bridge. Completely modernize JavaScript, get rid of its bad parts and compile it to arm. SKIA is open source and if Dart can compile to it, so should JavaScript with more tweaks of course.


Everyone’s “biggest problem with react native” seems to be different. Not sure what that means but don’t think it’s a positive sign.


I think sadly a lot of it is just FUD. Refer to the comments about npm I'm addressing elsewhere in this thread. They're just ill-informed, or deliberately throwing shade.


My problems-

> Documentation is written with IOS as the primary system. I still consider this to be a betrayal of programming fundementals

>Hot reload stopped working overnight once. No way to root cause this. Ive never guessed so hard. Still not fixed, might just reflash my entire computer since uninstalling and reinstalling didnt work.

But really, showcasing the native platform for dev being Apple Irks me. They are bottom barrel for programmers.


My dream is react native reimplementation (not just bindings but complete rework) with Kotlin. It could compile to Android, iOS, Browser as a native target without any need to bridge between JavaScript and native code, work faster and having first class sane language. I think that only big corporation could make it, Jetbrains, hear me :)


Why not check Xamarin? It’s already on a modern language (C#), great cross platform capabilities (Xamarin Forms), but can also directly interop with native APIs when needed (they are always needed).


I like Xamarin but I do not like the dev process yet for the frontend. I think if that would be leaner (more Core2 and potentially command line and reloading instead of recompile: only for dev ofcourse) it would be more popular. Now it is a very heavy process; thats not because of c# or f#; they can both be very dynamic. Not sure why not more work goes into making development smoother.

Having said that, I for one like working with Forms+renderers and a reactive framework a lot more than RN. I can go for years and have my code work fine after updates; I find npm such a nightmare and RN feels too driven (logically) by FB needs.


F# as well, Don Syme has even joined Xamarin.


Check out Dart with Flutter. You get browser compatibility with Dart alone, iOS/Android through Flutter. Flutter isn't a JS bridge solution as RN is, alleviating some of the pain that RN exposes.


Definitely a great idea. This talk explores what that might look like: https://www.youtube.com/watch?v=eR4LjL1h6cE


This seems to dissuade some of the rumors on HN about React Native not being supported by Facebook.


Also Flutter is getting a lot of traction right now.

The development experience is incredible (probably why Facebook mentioned instant reload), lots of companies are trying it out e.g. Evernote and the community is buzzing with new plugins. Plus it doesn't wrap native components so the core of it just works cross-platform.


I think the flutter approach is probably the better one, since the ux stack has more control over how things are done.

Instead of being wrappers around complicated native UI libraries, it's a 'game engine' over a lower level graphics layer. It's a smaller surface area to screw up on and create abstraction leaks. You don't have to be a iOS/Android and react native expert to fix hard issues, just a flutter expert for the most part.

It's just too bad the language run time is dart and it's run by google, which is infamous for being fairly ADD with projects.


Flutter is at least open source, here's hoping that the dev community gets organized enough to have the will to adapt annual iOS updates into the Cupertino widgets once Google drops support for the project.


1. Apple doesn't refresh the UI components annually. In fact the last time it happened was 3 years ago. Not to mention that the Cupertino widgets are very limited in nature.

2. This project definitely feels different compared to some of their others. The experience is just so much better than writing iOS or Android code that I think they would be insane not to support it.


Maybe they don't do full-on refreshes a la iOS 7, but perhaps they tweak little animation physics here and there. I'm thinking of this article's critiques of Cupertino widgets feeling a bit off:

https://harveynick.com/2018/05/21/an-ios-developers-opinions...


I really love what I see of Flutter, but JSX, for now, has me won over.

I've love a JSX like tool for Flutter, especially since JSX is just syntactic sugar over a c-like syntax.


I know someone started a DSX at some point. Not sure what happened with that.


React Native had hot reloading a year before Flutter was announced. Not to take anything away from Flutter (I heard it's great!) Personally I'm rooting for all declarative UI libraries and platforms, and I'm very excited Flutter is getting traction.


React Native's hot loading is.....

eh. The wrong type of typo can take down the entire app. Other typos it can recover from. Trying to change redux components just doesn't work. All in all it isn't too hard to fool RN's hot loading.

I'd also note that hot loading is turned off by default for RN! I can see why, having it on I have to know what types of things I can use it with and what types of changes will need a full relaunch.

Let's not even get into the "reload" button and what that may or may not do. (Note: I am using expo, so I have an additional layer of bugs and abstraction on top, having to force close Expo on the phone is way too common in my experience)


My experience as well. I moved from RN to Flutter because the dev experience felt less brittle.


I agree it's somewhat brittle (it's pretty hard to do with the existing constraints) but I think this will improve next year. Got some ideas. :-)


There's also been a number of complaints from RN users lately that the RN team hasn't been communicating well, that the roadmap is unclear, etc. This at least gives an indication that RN is being actively developed and what they're working on.


Sounds more like a quick response to the news that Microsoft is building Office on RN.


Proooobably moreso a response to the Twitter drama from a few days ago where people were claiming that Facebook was moving away from RN... especially considering the author was in that thread.


Wasn't really a response to either actually. :)


Then I stand corrected. The view from 5000 feet seemed that way, but happy to be wrong. :)


Could you please send an RN-invested soul like myself a link to said drama? :)



They already converted Skype to RN, so I wouldn't be surprised if they did that.

That would also be the day that I stop using MS Office as my go-to.


Why would you stop using it just because the migrate over to RN?


Do you know why LibreOffice moved away from Java?

Because the performance was just not good enough.

They had custom, native UI while the backend was running in Java.

And it just wasn't fast enough. Even when hot, throughput and latency weren't good enough.

So, they started moving to C++ as much as possible, as fast as possible. By now you can run Writer without Java at all.

Current JS runtimes are all slower than HotSpot.

Yet somehow we're to believe that doing the exact same mistake again will work better this time?

It'll still end up being slow and a memory hog.

Moore's law is dead. RAM is more expensive than at any other point in almost 10 years.

You can't just throw abstractions at everything at the cost of performance anymore, expecting the hardware to catch up.


And even Java is adding AOT and value types as a way to increase the performance.

Somehow I got the feeling that MSFT has been invaded by JavaScript developers.


A little sad, if it deemphasizes .net. I hope the Core transition doesn't turn into a boondoggle, though I'm afraid; it's taking a long time to reach parity with where the full framework was. The history of major language rewrites is not overly encouraging.

Working in C# on .net 4.5-4.7 is such a tremendously productive platform.


BUILD 2018 was full of .NET goodies, including .NET Core 3.0 roadmap with Forms/WPF/UWP/XAMLDirect support as the main goal.

It appears it is the usual political issues between Microsoft divisions, which I thought had gotten better after all the re-organizations that took place.

I wouldn't be surprised if this JavaScript everywhere wasn't yet another way Microsoft is trying to appear cool among the Google devotees crowd, like how they are jumping in PWAs as well.


Oh yes. I won't be surprised if VS Code team to be even bigger than their money making products.


Interestingly this coincides with them slowly becoming irrelevant in all areas.


Somehow you lost me there.

Microsoft is as relevant as ever outside SV coffee shops.


That's a ridiculous thing to say considering 50% of dev's are writing on Microsoft stacks and the company pulls in over 20 billion in actual profit each year.


If they can pull that off AND VS code being as performant on electron as it is I will be damn impressed.


I'm curious if RN will go the way of Flutter and implement their own renderer instead of giving commands to the OS for every little thing.


God, I hope not. They would have to re-implement every tiny little detail of every button, textbox, and every other widget on each platform. Then they'd have to keep it up to date every time the platform updates. That's just an impossible task.


It's pretty possible, and has been for a while: 1) Flutter already implements the Material spec and Cupertino spec, so the biggest cost, the upfront cost, is satisfied. In fact, the Flutter team found inconsistencies with the Cupertino spec vs. what iOS' animation kit implements and filed bugs for them. 2) It's OSS; this problem will minimize as more people are contributing and using Flutter.


You mean just like people are contributing and using Ionic, Cordova, Qt, Xamarin?


Most of the UI on mobile is custom, material libraries are also not that "native" and usually lagging behind the current specs.


Most iOS developers writing 'custom' UI, etc. are just customizing UIKit controls. Same for Android. Not many are creating UI controls from scratch with custom hit testing, drawing, and accessibility handling.


Its very unfortunate that that there is not built-in library for navigation in RN or Expo. React Navigation is a capable tool, but the API is very awkward and convoluted, even for doing very basic things like opening modals.



I recently started building an app using Cordova. I chose Cordova because I'd used it before and enjoy using VueJS (have used React and have no problems with it, just really enjoy Vue).

What a mistake.

I run into problems with the build on a weekly basis. I generally have very good debugging skills but in many cases could not figure out what was wrong. Usually `cordova platform remove ios && cordova platform add ios` fixed it. There is a ton of state in there and it's never been clear to me how to make it reproducible from the configs.

Many plugins simply don't work as they are outdated and not compatible with new iOS/Android versions. Using Firebase for notifications is one example.

Of course, I greatly appreciate the open-source authors who built all this and I don't expect them to solve my problems for free. I'm just pointing out my own mistake in choosing to use this tool, which doesn't solve as many problems as I thought it did.

Can any developers here say whether they've had a smooth experience using React Native? I'll definitely be trying it out soon...


There is a small step to get all the build tools into your mindset, xcode and gradle. For me the javascript side of things has been very stable.

I have built couple of native like applications with react native, and my only recomendation is using native navigation, it is key.

https://loremipsum.ueno.co/using-react-native-to-build-a-pro...


Added React Native to our developer dashboard tool at Chart.ly.

Project is definitely healthy in terms of activity both in terms of commits and contributors. Here is the dashboard:

https://chart.ly/github-dashboard/facebook/react-native

Would love some feedback on our dev dashboards if anyone here is interested!


That looks like a great tool for micromanagers, and I'm not sure what other uses those numbers could have.


Well... the streaks are intended to show consistency in progress of a project. Great for anyone with a vested interest in the project.

Also great for just seeing activity in one place. GitHub's website is great, but not really geared to providing much of this information in one place.


I suppose, but maybe I'm inexperienced: in what context is "longest streak" a useful number?


You are right about that one... more of a "glamour" metric than something very useful (like when longest streak equals current streak which is the case for our internal dashboard [1]). In this case you know you've been very consistent over that time period. We will probably remove that one soon.

We do believe that at least with our product this kind of information it will inspire more confidence in our users when we publicize this information more (vs. lots of products that end up stagnating over time).

[1] https://www.dropbox.com/s/86jik7dvxwzdddd/Screenshot%202018-...


how do people feel about that FB is not using the github build themselves ?

and the fact that the opensource build is RED for roughly a year now ?


Excellent news. I've had the opportunity to work with the framework while mentoring a customer and the experience has been pretty enjoyable. Hopefully these upcoming improvements will be backed by better documentation—that's the only area that really felt lacking.


Can someone tell me how React Native is actually working?

My initial guess is that it is basically running the same JS in a browser wrapped into a native GUI widget (win32, X, Cocoa, etc).

Maybe I'm getting long in the years, but seems like we've played this game many times.


@hiram112. React native works in a 'conceptually' similar way as wxWidgets (if you are familiar with with that). It uses platform's native APIs. It does not rely on a web browser on your mobile device. The integration is also not just for widgets, but underneath it abstracts out Image, network api, basic storage/preference primitives, screen rotation, etc.

For the things that it does not abstract, it let's you write a native module, that you register with RN runtime, and then the APIs for your native module will be avialable to your RN java script code.

There is an active opensource ecosystem of RN-modules that you can leverage, that will work on Android and IoS , abstracting the platform specific things that RN does not do yet themselves. Everything from non trivial camera interactions to bluetooth specific things. Eg

https://github.com/Polidea/react-native-ble-plx


In the simplest terms, it renders native UI (the JSX part maps to UI components that the iOS and Android frameworks provide) but it maintains a bridge so that you can write your business logic in JS and have it work against those native components (as far as I understand it).

It's not the same as using a web widget as your main interface and having it render the same kind of HTML and CSS you deploy on the web.


It isn't. It's using a native JS engine entirely separate from the browser, and hooking into the required native APIs.


i also wonder about the 64 bit support on android ? if they are really supporting it, i would expect more movement in that area...


they also mention async rendering. cool. but they also did in ways that breaks the Detox e2e testing framework ,if i am not mistaken, in a way that is difficult to fix without proper support from RN code itself.

this kind of stuff is awkward. do something new cool, but break major functionality for some users of RN.


"Move at a medium pace and break things."


I need to interact with a very specific SDK that Bluetooth stuff, is React the going to be able to handle that?


Sure you can.

Either you find an native module like this: https://github.com/Polidea/react-native-ble-plx

Or implement a Native Module yourself(https://facebook.github.io/react-native/docs/native-modules-...), then you can use any native frameworks available.


I have very positive experience with React native, and also with React Native Web. Being able to share source of full pages/activities/forms across both Mobile platform + Web browsers, while having Native look and feel -- is incredible.

Very rewarding not just being able to use the same 'code base', but also leverage same paradigms to manage UI Layouts between native and web (with flux).

As a side note, I absolutely despair when I have to fall back to CSS or even bootstrap.

Once I, finally, 'groked' flux -- it was huge productivity booster and I can rely on that learn-once-use-in-many-places knowledge across not just my app, but also when building small web-sites (in web tech only).

My approach for the app, is of a 'hybrid'. That is, my app starts out as Native, and then, for some 'activities' (in Android-speak) -- I use react-native.

I have implemented native modules to get access to platform specific elements from React native code (eg networking apis, security, hardware device access, device-preference/database stores) -- while basic forms/widgets and navigation logic for some pieces are in React, leveraging React-native and react-native-web underneath.

I think the UI paradigm introduced by React is a sweet spot for UI development (concentrating on state as first-class-citizen).

I am hoping same paradigm (and similar abstractions) are adapted by MS toolchain for desktop and console UI in .NET-based solutions.

Another side note (not RN specific) : C# is really a much better language than JavaScript, but until browsers can supports C#-subset, JavaScript is the only game in town for the 'modern' cross-platform dev efforts (eg. cross mobile, desktop and web-browsers) ).

In terms of some challenges I have experienced with RN:

a) build system. Creating a release build is a major undertaking. As the solution has to merge the 2 worlds: native and JavaScript-specific asset management pipelines.

Error messages are obscure (eg I ran into issues, for example, where a path for an Icon file was too deep, moving it to shorter path, solved that one).

Guides are for primitive (and non-hybrid) approaches.

b) Lack of standard (RN and RNWeb ) support navigation component.

c) Small things like: no Checkbox component for IoS..

d) Cross-platform app-store compatible icon management is not built in. I use react-native-vector-icons -- so that solves that problem for me. But app-store compliancy like this should, ideally be part of such platform.

e) As the article points out, the integration bridge between RN and native is not efficient for 'constant interaction'. Because it requires you to serialize data structures back and forth. So impossible to write 'hybrid' apps where small parts are in RN -- instead it has to be 'bigger things' that would not require too much back-and-forth.

f) the Debugging with Chrome over TCP bridge -- is basically a horrible/slow/barely working. Navigations from one screen to another take like 2 seconds, while the debug mode. Because my components work on web browsers, thanks to React-native-web - I end up, most of the time, debugging my RN logic using React-native-web within browser debugging tools (rather than starting up the native app and then spawning the debugger with Chrome bridge).


> I am hoping same paradigm (and similar abstractions) are adapted by MS toolchain for desktop and console UI in .NET-based solutions.

You're at least a couple of decades late, there, and the other way around: instead of `Winuser.h`, it's `react.js`.


I do not think we had something similar prior to React Native.

I programmed MFC, Delphi, YACL (if folks remember..), wxWidgets, Borland OWL, Dojo toolkits.

There was never a concept of State-as-first-class citizen for UIs.

And there as never a cohesive multi-screen layout engine story, like we have now with flexbox (via RN and RNW).

So in my view, the data binding via explicit state-management paradigm that React introduced -- will survive for decades, and will be copied to other programming environments.

Same, probably for flexbox as a layout management model...

Although, there, I wish that it would be more 'typefull' where various incompatible layouts could be flagged as errors or warnings at compile time.

Perhaps (and may be this is is far fetched) with the advancements in practical category theory, compute power (including at compile time) -- we should be able to do 'shape' management as algebraic concepts -- where layout engines, should be able to treat layout definitions as composeable, multi-variable functions.

WRT javascript vs C#, I was just noting, that, in my view C# is just a much better language, and I wish it would have been a de-facto web-standard and not javascript. This way something like React, would not have been conceived in javascript.


Will React Native finally support exchanging BINARY data (ArrayBuffer, TypedArray) across the bridge?

Thus far I have to send binary data as base64 encoded strings! See react-native-fetch-blob for an example, when I read a file.

Current state:

Example, issue: https://github.com/facebook/react-native/issues/1424 (closed but not solved, quote: "We are trying to keep issues focused on bugs and this is more of a feature request")

Documentation for native modules, which kinds of data can be sent back to Javascript: https://facebook.github.io/react-native/docs/native-modules-... (here the iOS docs, but it's the exact same for Android/Java)


I’ve managed to do this with direct access to the JSC C API — you could probably write an interop w/ Obj-C / JNI.


Any pointers or code?



That's the regular RN documentation - which is of ZERO help here. Please check the topic of this sub-conversation - you missed it.

Hint: The parent mentions the "JSC C API". You point to Java and Objective-C - that alone should give you a hint that something is wrong with your links, that they don't quite fit into the conversation. That's the equivalent of a physics question where you want Watts and get Newtons - a unit mismatch as an indicator that you solved the wrong problem or the problem wrong.

And just to say that too, I'm the co-maintainer of a popular native package for RN, so I'm already quite familiar with the RN native API for both Android and iOS.


Likely yes.


[flagged]


This is about react native, not reactjs.


Facebook can make software great because they have great engineers, but they've suffered a major case of scope creep, which leads to more than a few loose ends as the company assigns their best engineers to [choose your own adventure]:

- maximum profits (woohoo!) - reaction to potential regulation - unwanted press attention - wanted press attention - the shiny new thing

That's why I never switched to React. It's a good way to organize things and was clearly well engineered from the start, but there are other choices besides React (and RN) where leaders have demonstrated their willingness to stick with it through thick and thin because...it's all they do.


This is a pretty unrealistic view of how big companies work. Engineers aren't fungible, and no one has been "pulled off" of React or React Native to anything like you suggest.

React is my full time job (I was also the #1 committer before joining FB) and no one is planning to abandon it. Even if Facebook company leadership decided for some reason to divest, React would live on with the support of its community similar to other projects without corporate backing.


While it may be your full-time job, you're still participating in a larger mission, right?

Take the case of the legal problems with the React license that eventually were ironed out or the privacy issues facing the company more recently.

Neither of those would have been a factor in your day to day life if React was its own thing, right?

If no engineer has left the team, through their own will or through enticement, you have my apologies.

I'm not arguing that you're not committed. I'm arguing that working for a large company is a distraction, which is true of all large companies. Would you agree that the licensing issue was unnecessary and distracting?

Don't get me wrong, I think you're doing great work and React isn't going anywhere, but there's a broader mission there that is distracting from doing that one thing. Do you ever wish it were it's own thing (if money weren't involved)?


Certainly there are downsides to any setup, but due to React Native's large ambitions I'm unsure if it could have ever been created by an independent community. There is a lot of work that goes into it and the abundant availability of complex real-world problems (to a greater extent than I've seen anywhere else) spurred by this setup pushes React Native to be a more capable project.


Thanks for the insight. I can tell from how you write about React, you're very dedicated, and I feel your passion.

Upper-level managers at the large companies I've worked for universally saw these types of projects as "cost centers" and tended to interfere in ways that demonstrated a basic misunderstanding of the value. I hope that's not true in your case.


I think that when you actually work in a large company, you realise just how large it is. As in, org charts and different campuses and countries.

When I worked at an airline working on their websites, I wasn't privy to, or bothered by their flight scheduling or workplace relationship dramas.


Scope creep? Is that a nice way of adding shitty useless features and dark patterns? Because Facebook wins the gold medal there. Marketplace and their garbage message app for instance.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: