React Native Radio

RNR 251 - Examining React Native 0.70

Episode Summary

In this episode, Mazen and Robin review RN 0.70 to see what's new, what's broken, and everything in between. Mazen also continues his quest to get Robin hooked on sports-ball.

Episode Notes

In this episode, Mazen and Robin review RN 0.70 to see what's new, what's broken, and everything in between. Mazen also continues his quest to get Robin hooked on sports-ball. 

This episode brought to you by Infinite Red! Infinite Red is a premier React Native design and development agency located in the USA. With five years of React Native experience and deep roots in the React Native community (hosts of Chain React and the React Native Newsletter), Infinite Red is the best choice for your next React Native app.

Helpful Links:

  1. RNR 238 - Accessibility in React Native with Lizzi Lindboe
  2. https://reactnative.dev/blog/2022/09/05/version-070
  3. https://reactnative.dev/blog/2022/07/08/hermes-as-the-default
  4. https://github.com/facebook/react-native/blob/main/CHANGELOG.md
  5. https://reactnative.dev/docs/next/the-new-architecture/landing-page

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio Podcast. Brought to you by politics, who reminds you "I good, you bad." Episode 251, Examining React Native 0.70.

Mazen Chami:

So Robin, in my ploy to get you more involved in sports, did you happen to catch the US Open?

Robin Heinze:

I did. I watched the semifinal and the final this weekend.

Mazen Chami:

Nice.

Robin Heinze:

And I was actually watching the semifinal delayed, where I was watching it on my Apple TV, just like a recording of it. But I hadn't actually looked up who won that match. And so I was actually on the edge of my seat for all five sets.

Mazen Chami:

Yeah, that was a good one.

Robin Heinze:

Who's going to take it? That was intense.

Mazen Chami:

But you missed Serena's final match ever.

Robin Heinze:

I did. I did, yeah.

Mazen Chami:

That was a good one. She went out strong, she played well, but I mean it was just tough. I guess most people wanted her to make it all the way and win.

Robin Heinze:

Yeah, that would've been fun to see for her to go out. But it seems like we're about to welcome a new guard in tennis, this 19-year-old dominating like a new era. He does seem good.

Mazen Chami:

It would be interesting with him going up against Djokovic. He obviously wasn't there because of vaccine mandate, but that's his prerogative, I guess. And then on the women's side too, there's so many new people. Even this Tunisian lady, she made the last two Grand Slam open finals, I believe. So she lost both, but she's getting there. I think she's ranked third, probably second now after this loss.

Robin Heinze:

So it sounds like tennis is going to be your in to get me to follow some sports.

Mazen Chami:

Tennis is a start, and I think when you start the conversation talking to me about Premier League soccer games, I will-

Robin Heinze:

Then you know.

Mazen Chami:

I'll retire, yes.

Robin Heinze:

Yes, we'll see. You might be waiting a long time for that.

Mazen Chami:

Well, one episode at a time.

Robin Heinze:

As you guys have probably noticed, Jamon is not here. He skipped out on us today. We're doing a React Native version summary and he seems to always miss these. I don't know why.

Mazen Chami:

I wonder why he doesn't like them.

Robin Heinze:

I don't know. I think they're fun. So I am Robin Heinze. I'm your host for the day and senior software engineer at Infinite Red. I'm located west of Portland, Oregon with my husband and my two kids. And I've been specializing in React Native for the past five years. And I'm joined by my steadfast cohost, Mazen, always here.

Mazen Chami:

Unlike Jamon-

Robin Heinze:

Always shows up, unlike Jamon.

Mazen Chami:

Sorry, Jamon.

Robin Heinze:

Mazen lives in Durham, North Carolina with his wife and his baby boy, and he's a former pro soccer player and coach, and is a senior React Native engineer also here at Infinite Red.

So before we get into our topic, I am duty bound to say that this episode is sponsored by Infinite Red. Of course, Infinite Red is a premier React Native design and development agency located fully remote in the US and Canada. So if you're looking for React Native expertise for your next project, hit us up at infinite.red/reactnative. And of course, don't forget to mention that you heard about us on the React Native Radio Podcast.

So let's get into our topic, Examining React Native 0.70. We're in the 70's now.

Mazen Chami:

Finally.

Robin Heinze:

When are they going to go to 1.0? I don't think ever at this point.

Mazen Chami:

Yeah, I don't think so. I think we'll probably rebrand the podcast before.

Robin Heinze:

If they're not out of beta yet, then they're this-

Mazen Chami:

Who knows?

Robin Heinze:

Who knows? But we're in the 70's.

Mazen Chami:

The new architecture was probably a good step.

Robin Heinze:

It would've been. Maybe there's still a chance there. Maybe when the new architecture is on by default. That's the default. Maybe that'll be 1.0.

Mazen Chami:

Imagine it's very random. It's like 71.4 and then 1.0. What? Why now?

Robin Heinze:

Yeah, so we're in the 70's. There's a lot of new architecture stuff in this release. That's kind of I think what they're focusing on primarily. But there are some other things that are worth mentioning as well. We'll start with something that's actually very close to Infinite Red. There is a lot of new architecture documentation that's being written, and that's actually been something that Lizzi Lindboe, who is one of our engineers here at Infinite Red. She was on-

Mazen Chami:

Accessibility.

Robin Heinze:

Accessibility, the accessibility episode of the podcast. I don't remember what number that was, but we'll link it in the show notes. But she has been working on that initiative over at Meta for quite a while now. And so we're starting to see some of that come out. So if you're interested in learning more about the new architecture from the source, there's going to be a lot of that new documentation coming out.

Mazen Chami:

I think something else to highlight are the stats of this release, 88 different contributors, which is a lot of people for open source and then 493 commits. And if you think of those all being, majority of them, let's say a very high percentage of that new architecture related. So there's a lot of work going into the new architecture and continuing to improve it and continuing to close the gap on all the other issues.

Robin Heinze:

I still think they need a name for it, but that's just me. Well, React Native synergy is not catching on.

Mazen Chami:

No. It's catching on at Infinite Red, but nowhere else.

Robin Heinze:

It is. And that's what we call it at Infinite Red, but not anywhere else.

Mazen Chami:

We should just make stickers and start airdropping them into different cities and then maybe it'll stick. Meta would not like that.

Robin Heinze:

Probably not. What else? So in addition to some new architecture documentation, Hermes is now the default engine on both platforms.

Mazen Chami:

Yeah, that's big.

Robin Heinze:

Which until this release, it's been off by default and you had to go and turn on. And I think on most of our projects, we've had it turned on. But now if you make a new React Native project, you will be getting Hermes. And I think that's the final step in ... We probably won't even talk about Hermes as much anymore because it's just the engine. It's not the new engine, it's the engine that React Native uses. I guess you can still turn it off if you need to or want to, but why would you? It's so fast.

Mazen Chami:

It is. I mean, if you look a lot of some of the stats from their blog post, they're saying on Android, Samsung Galaxy specifically, the startup time is 51% faster with Hermes and quite a bit, 93 megabytes in memory consumption, which is big. And then on iOS, 63% startup time and 13 megabytes memory consumption. So it being on by default, I would be shocked. I think if projects out there don't explicitly turn it off, unless there's some really bad compatibility issue.

Robin Heinze:

You'd have to have a pretty good reason, like a specific library that you're using that's really important to your business case that doesn't work or something.

Mazen Chami:

And there are a lot of GIFs on that blog post, and it pretty much shows you the TTI, time to interaction, 0.5 times faster on both platforms. So that's big.

Robin Heinze:

It's hardly comparable anymore.

Mazen Chami:

So new architecture bundled with this Hermes being on by default and the improvements. Obviously, it's not just that it was turned on, there were some work done to improve it also. All that is great.

Robin Heinze:

So in addition to that, there's also a new unified configuration for Codegen. I don't know a ton about Codegen, but it sounds like you used to have to separately configure Android in build.gradle, and now you can configure both iOS and Android in the same place. Oh, in package.json, yeah.

Mazen Chami:

package.json.

Robin Heinze:

Jamon will love that. He is a huge advocate of being able to define configuration in package.json.

Mazen Chami:

Yeah, I think it's the default with expo, which makes it so much easier to set up your project and all that. So I think that's great.

Robin Heinze:

So look, a convenience feature with that. One of the things they highlight in the blog post for this feature is that it provides a more consistent experience for library maintainers when they migrate their code bases to the new architecture because they don't have to be separately configuring things in multiple places.

So also a little shout out, if you are a library maintainer, the React Native core team would love to know how it's going for you migrating your library to the new architecture. So they would love for you to join the React Native new architecture working group. We'll put a link to that in the show notes because there are so many libraries out there and they all need to be migrated. So if you are a maintainer, please join the working group and talk about your experience.

Mazen Chami:

Next item on here, which I personally think is a big one, Android autolinking for new architectural libraries. So continuing off what Robin said, reach out and let them know how things are going. Please leverage this part of it. I can't remember, it's been a while since I had to do manual linking for ... I used to be totally against autolinking.

Robin Heinze:

Can you even do manual linking? The link-

Mazen Chami:

On iOS? You can.

Robin Heinze:

The link command in the CLI is gone. It doesn't even work. But I mean, you could go in and literally link things in Xcode, I think.

Mazen Chami:

In the past, I used to be anti-autolinking, and I think that was probably early on in the process. I used to do everything manually.

Robin Heinze:

What was your reasoning for being against it?

Mazen Chami:

I used to always have issues, and I think when going through it manually, I would always be successful on the iOS side.

Robin Heinze:

I had similar feelings about it when autolinking was new, and I still have feelings about it not because it doesn't work. Autolinking almost always works flawlessly now. But because it's "magic", and so I feel like I have less control or less knowledge. Back when you had to manually link things, I was always really certain about where things were and how things were working and stuff. And with autolinking, you're kind of like, "Did it? Did it work? I don't know."

Mazen Chami:

And now just by running Yarn ad, you have both iOS and Android linked, and it's almost like you don't have to open up Android Studio or Xcode anymore and that's it.

Robin Heinze:

But then when something goes wrong, you're like, I have no idea what-

Mazen Chami:

... don't know what files are touched.

Robin Heinze:

Yeah, exactly.

Mazen Chami:

Exactly. So that was mainly it. If things would break, you'd kind of get those errors on runtime. And it was easier to be like, "Hold on, I do remember doing something in that file. Let me go." And then you double check the documentation and you'll see that something was missed in that process. So there's that.

And I don't know, I think as we're talking of the improvement of React Native and how it's growing, this is a big one because with this new architecture, autolinking is supposed to be easier. I think that that's a big one. I think one thing the blog does highlight is users on the new architecture will have this feature automatically without additional work to their CMake files. So there's a little bit more magic there for you.

Robin Heinze:

If you don't know what CMake is, neither do I. So you're not alone. I know it's something, it's like C++ build or compilation tool. I think I had to go install a new version of CMake at one point in Android Studio because I was getting this really obscure error, and so I had to update the version of CMake. But otherwise, on a day-to-day basis, I don't need to know much about CMake. But maybe you do.

Mazen Chami:

I remember I didn't know either up until this part. I did a quick Google on it and it's pretty much a software compilation process using simple platform and compiler independent configuration files. So you make your CMake files and it runs off of that to compile and do all that for you. So C++, I believe, specific. Yeah, C and C++ specific.

Robin Heinze:

Is that related to a Makefile? So Makefile is, it's a similar thing, right? It's sort of a platform agnostic.

Mazen Chami:

Well, I think then CMake is just the C++ side of it.

Robin Heinze:

Interesting. So yeah, there's that. And then those are the things that were specifically highlighted in the release blog post. But we combed through the change log and pulled out a handful of other things that we thought were interesting. Specifically, there's a couple breaking changes. The Jest preprocessor was removed from the React Native package. I think you now have to install that separately if you're using that. I'm not sure what is the Jest preprocessor used for.

Mazen Chami:

So this was deprecated. It's been deprecated for a while now and they officially made the file private, so you can't access it essentially.

Robin Heinze:

Yeah, using React Native Jest preprocessor outside of the React Native has been deprecated since a while ago. So in this change, they make the file private and stop publishing it to NMP. The supportive method of using Jest in React Native projects is using the React Native Jest preset.

Mazen Chami:

That makes sense.

Robin Heinze:

Use the Jest preset for React Native instead. And then some of the other breaking changes removed, non-standard Promise.prototype.done. I think that's just a weird variation of the Promise API that isn't actually supported.

Mazen Chami:

And this is another, it was something that they extended essentially, I believe.

Robin Heinze:

It said users should switch to using standard Promise features like .done.

Mazen Chami:

I mean, so far these two breaking changes, they're stuff that have been deprecated. So if you're using them up until now, you've seen the warnings. So now they're officially gone.

Robin Heinze:

Yep. Metro has also been bumped to 0.72, which comes with its own set of breaking changes. If you have a pretty complex Metro config that might affect you, if you're using the default Metro config, I'm guessing you probably won't notice too much. But yeah, if you have a complicated Metro config, take a look at the breaking changes for Metro 72.

Mazen Chami:

Cool. So now let's move on to some stuff that's been added. The first one will highlight add useNativeDriver as param for setValue for Animated. So in the past, some of the Animated functions would give you the ability to pass in the option of use Animated driver. Usually you'd set it to true because I think default is false, so now on setValue. So when you're bringing the value up, you can tell it to use a native driver or not, reanimate it. That handles that in a different way and does it better, so there's that. If you're still using the Animated, there's that new param for you to access and use.

Robin Heinze:

Nice. That's good to know about. There are some Android specific additions. They added an accessibility announcement for list and grid in FlatList. So yeah, if you have accessibility features like voiceover on, you'll get an announcement for list and grid. I think that's the ... So it'll specify the difference if it's a grid versus a list. There are also a couple new permissions added to the permissions Android library, specifically Read_Voicemail and Write_Voicemail, which I didn't know you could do.

Mazen Chami:

It's funny, the documentation has a typo where it says permissions with one S.

Robin Heinze:

Oh, my god. Really?

Mazen Chami:

I was like, for a moment I was concerned that it was actually a typo. You actually have to mistype it to get access to that. But no, it's typed correct. So it was just a typo in the docs.

Robin Heinze:

If they haven't fixed that yet, that would be a good hacktoberfest submission, go fix for the permissions Android typo in the React Native docs.

Mazen Chami:

Two other ones actually we didn't highlight, but I just saw them Post_Notifications and Nearby_Wifi_Devices permissions were added.

Robin Heinze:

Oh, nice.

Mazen Chami:

More stuff that you can access, read and write to your user's privacy stuff.

Robin Heinze:

Yay! So there was also an ... In the documentation for text input, there was a prop that lets you control the caret and cursor color, I believe. Let me double check.

Mazen Chami:

Yes. It was cursor color.

Robin Heinze:

Okay, cursor color, which existed. The prop was always there, but it was not in the documentation. So now it has been added to the documentation. So now it's more clear that that is a prop that's available to use.

Mazen Chami:

There was another one similar to that. I think we'll get to it later, but yeah.

Robin Heinze:

So those are some Android specific changes. There are also some iOS specific additions. One of them is Mac Catalyst compatibility. Mac Catalyst is ...

Mazen Chami:

Isn't that like the ... It's like when you have Mac apps, Mac Catalyst helps you share code with the iPad apps.

Robin Heinze:

Yes. That's right.

Mazen Chami:

And stuff like that, and Apple Watch and stuff.

Robin Heinze:

Yes. So your app can share an experience with an iPad or run on both. And that uses something called Mac Catalyst, and that is now compatible with React Native. And you can enable it in your pod file, it looks like. So that's cool.

Mazen Chami:

Yeah, we should do more iPad related apps in my opinion.

Robin Heinze:

We should. I've only had one client that I can remember that had specifically focused on iPad experience. It was actually my very first client, and I thought that all projects would be like that and then none of my other ones have been. But it was fun. It's actually kind of a fun design challenge to try and get things to work on little screens and big screens. Flexbox could do a lot, you'd be surprised.

Mazen Chami:

I'm sure. And yeah, you can tell when an app is built for both and not optimized for iPad because it's this super pixelated looking app, or it's like this app that looks like the size of your phone just happens to be running on this much larger screen and taking up ... There's so much black space around it.

Robin Heinze:

So another change for iOS is Hermes Intl is now enabled, which is actually kind of a big deal. Luxon react Intl, other sort of date time-ish libraries, localization libraries depend on Intl. And I think for a while, they've all had to use sort of custom polyfills, because Intl didn't work on Hermes and now it does.

So that's actually kind of a big deal. There's been an open issue on the Hermes repository for a while about this, and I think people are going to be really happy that this is finally supported.

Mazen Chami:

Yeah, since 2019.

Robin Heinze:

Yeah.

Mazen Chami:

I mean the issue is not that there's a lot of issues out there, but the issue is number 23. To me that's like-

Robin Heinze:

It's pretty early.

Mazen Chami:

That's like way back when.

Robin Heinze:

Well, I mean that's 2019. That's when Hermes was announced, that they announced that at Chain React, which was in July of that. So yeah, this is been an issue since Hermes first was announced. So that's actually a pretty big deal.

Mazen Chami:

The next one is userInterfaceStyle to Alert to override userInterfaceStyle for iOS 13+. So essentially, you can do light and dark themed alerts or unspecified. I'm not quite sure what unspecified goes to. I think it just defaults to light probably. But yeah, so I think that's pretty cool where if you have, we were talking a lot about HOCs in using dark mode and stuff in your apps now. So I'm assuming in the past, React Native, if you didn't have this flag being passed in when you're in dark mode, you would have a "light mode" alert pop up.

So now you make sure to style that correctly. Instead of having the white background, it's just a darker gray black background. And that makes me wonder if in the future that'll then open up the door to fully style these alert boxes instead of having to create your own custom one that pops up.

Robin Heinze:

I wonder, yeah. iOS is allowing a lot more customization. I don't know, have you downloaded iOS 16 yet?

Mazen Chami:

I did, but I haven't played with it yet.

Robin Heinze:

I had a lot of fun last night customizing my lock screen. I'm a big fan of their new lock screen update and you can change the fonts of the clock and I really love the way that they can overlay your pictures now. And so the person in the picture sits above the clock. It looks really cool.

Mazen Chami:

It does, yeah. I'm excited for the focus aspect of it. Limiting my notifications, because I keep telling myself I'm going to kill a lot of notifications, but I don't end up doing it. So the focus will be a good aspect of that.

Robin Heinze:

I have no willpower at all. Even with the focus modes and stuff, I have no willpower at all. Because the thing about the focus modes I've found is I'll remove all the apps I don't want to be using during the day, but then you can still access whatever you want from the app library. And so my brain is just retrained itself to like, "Oh, I'm just going to go over to the app library." So I literally have to delete my problem apps. So I delete TikTok during the day and I delete Instagram during the day, because I have no willpower.

Mazen Chami:

I should probably do that.

Robin Heinze:

Anyway, so there's a bunch of other things that were changed as opposed to added, you can now pass ItemSeparatorComponent as a React Element. This is to FlatList, I think. Previously it had to be a function, I think. And now it can be a React Element. TextInput has been fixed. There was a bug where it was if you were using it as an uncontrolled component with a default value, I had to look up what that meant.

But using it as an uncontrolled component means that you're not passing a value into your TextInput. It's just sort of managing the value internally. And you can pass a default value. But then what was happening was every time there was a layout event, it would clear the internally managed value and go back to the default value. And that bug has been fixed so that it doesn't drop the text value.

I would say most of the time, I don't use TextInput uncontrolled. I always manage the value in my global state or even in my local state. But if you did have a case where you were using it uncontrolled, that bug is fixed.

Mazen Chami:

I wonder if we've conditioned ourself to use it controlled because of this bug-

Robin Heinze:

I don't know, maybe.

Mazen Chami:

... in the past.

Robin Heinze:

Maybe, I wonder.

Mazen Chami:

Who knows?

Robin Heinze:

Oh, if I don't pass in a value, it randomly drops without realizing that that was a bug.

Mazen Chami:

We've forgotten about it since then. But yeah, who knows?

Robin Heinze:

It's generally a best practice to manage your value and state, but anyway.

Mazen Chami:

This one is the one I kind of mentioned before. Move ScrollView's contentOffset to common props. So this was only an iOS specific prop for ScrollView in the past. But lo and behold, it actually is an Android specific prop.

Robin Heinze:

It's like both. But the docs have been telling us that it's iOS only.

Mazen Chami:

IOS only. So now it's just moved to the common props.

Robin Heinze:

Yeah, it fixes the docs. So it's in the common section.

Mazen Chami:

Well it moves, it fixes the docs and while also I believe as part of this commit, moves it internally to be common, so it would actually be used on both. In the past, it was removed for iOS, for Android. So now it's in common prop.

Robin Heinze:

In the past, you couldn't actually use it on Android, even though the Android platform supported it, and content offset that literally does what it sounds like it does.

Mazen Chami:

Yes. So the content offset is used to manually set the starting scroll offset. So it's an X and Y value.

Robin Heinze:

Oh, okay. So I think it's specifying that your content is already offset. So please start the scroll.

Mazen Chami:

So it's almost like, I've seen this more on web than I have mobile I think. But sometimes when you were, it's almost clicking a markdown file or going to a link of a markdown file when it loads and then scrolls you down to whatever you pass in URL, like the hash whatever. I assume it's the same thing if you were to do on mount that checks the prop. It's like, oh, I need to find this item, and this item is on X and Y and it'll set that as the content offset and drop you down there.

In the past, I have done that programmatically to get the animation side of it. So I guess if you have a reason, there's the scroll to ...

Robin Heinze:

Because Content Office, they wouldn't show it scrolling to that place. It would just-

Mazen Chami:

It'll be like a flash almost. A flash, I think, or it would just like you said, just show there. I usually like the animated aspect of it. So you pass an animated-

Robin Heinze:

Right. You're telling the user like, "Hey, there's more content up here. We're scrolling to this place for you though." So, a couple more things on Android, this one made me laugh. There's a fix to demonstrate Dark Mode correctly in the StatusBar for the starter template app. So that means before this was fixed, when you started a new React Native app, the very first default example screen has this little dark mode example and you can toggle dark mode.

And apparently, it didn't actually work on Android in the StatusBar. It literally wasn't working, so they fixed that now. I think it looks like it was just the StatusBar. It wasn't the whole thing.

Mazen Chami:

Yeah, it was the StatusBar. They weren't setting the background color, I believe, was the fix.

Robin Heinze:

And it was the translucent StatusBar or something.

Mazen Chami:

Yeah. So now it's set.

Robin Heinze:

So that's fixed. And there was also an error on release builds with Hermes enabled for Windows users. Sorry, Windows users, but that bug is fixed now.

Mazen Chami:

So next thing that's changed for now for iOS, I think we only have one thing here on our list that we wanted to highlight.

Robin Heinze:

We already talked about that. Hermes is now the default engine on iOS.

Mazen Chami:

The setting is controlled via flag in the Podfile. So now that's automatically set up to-

Robin Heinze:

So I guess it was already on by default on Android, and iOS was the last step.

Mazen Chami:

Yeah. I guess we could just move on to the next topic in general. So removed stuff, this one's probably a big one. Removed previously deprecated transform style-attribute props. I'm going to run through these next three because they're pretty much all removing deprecated stuff, so transform style attribute prompt IsTVOS constant. So that's an interesting one. Now you can do platform.isTVOS.

Robin Heinze:

Right. You can still check through the platform API, but there used to be an isTVOS constant and that's gone now.

Mazen Chami:

And then the last one is moving deprecated removeListener methods. This one, so this is the .removeSubscription. I've actually had to do this a couple times already, so there's been the warning. So again, if you've seen the warning for any of these, you've had time.

Robin Heinze:

Which get annoying. They pop up every single time. I've removed them from a couple different places like libraries.

Mazen Chami:

I'm the type of person where if VS Code or Metro or whatever kind of gives me either obviously, the red X, you can't miss those. But if it gives you any of those triangle-

Robin Heinze:

No, you got to get rid of this.

Mazen Chami:

... the yellow. I'm like, no. I like it to be, not that it's always zero and zero. Sometimes when I run Xcode, there's so many warnings and I'm like, "Oh boy."

Robin Heinze:

It's funny, I was thinking about this the other day because I was running a build in Xcode and I was trying, there was a specific error that was happening every time. But I would run it in Xcode and then have to scroll through a bajillion warnings and I'm like, "Can we not do something about these? Why are there so many?"

Mazen Chami:

I wonder if they're still there on new architecture.

Robin Heinze:

I don't know. It's a good question, but I want to know. I was reading through them and I was like, "Are these all really necessary? Can we not turn these off or fix the ..." I was like, "This is ridiculous." I'm just scrolling and scrolling and scrolling and scrolling just to get to the error at the bottom.

So those are the things that were removed. There was a couple things that were fixed as well. They're in HorizontalScrollView. The scrollToEnd property was causing NPE in side-effects. What's NPE?

Mazen Chami:

This is an Android specific one. What does NPE stand for?

Robin Heinze:

I don't know. Googling it does not help.

Mazen Chami:

No pointer exception.

Robin Heinze:

No pointer exception. Okay. Define your acronyms, people.

Mazen Chami:

So Fixed HorizontalScrollView API scrollToEnd causing No Pointer Exception in side-effects. Okay. There are some errors when you're scrolling horizontally in that function. I feel like I've run into that actually, now that I think about it.

Robin Heinze:

Well, maybe you won't anymore.

Mazen Chami:

Good to know. So that's Android only. The next one for fixed, they fix InputAccessoryView crash on Android. That seems like a big one because on any of your inputs, you usually have like, let's say password. You have that eye that shows and doesn't show.

Robin Heinze:

Oh, that's an InputAccessoryView? Nice.

Mazen Chami:

At least that's how I usually use it. Yes. So that's a good fix there.

Robin Heinze:

That's pretty much everything we had that we were going to call out. There's obviously a lot more changes than that. We will link the full change log in the show notes, so do check that out if you're interested. And I would say this release and probably most releases for the foreseeable future are going to be a lot of new architecture improvements. That's just what we should expect to see going forward, which is great. It means they're putting a lot of work into it.

If you haven't already, try to check out the new startup project, enable the new architecture, play around with it. It's going to be the future of React Native, so we're all going to have to learn it eventually.

So that was React Native 0.70. If you would like to nerd out more about React Native, check out Jamon's Twitch stream at rn.live or youtube.infinite.red. He streams Mondays now. I think he used to be Mondays and Fridays. He's stepping back from the Fridays for a while, I think. But he usually streams on Monday mornings, West Coast mornings, I guess it's afternoon for you on the East Coast.

Mazen Chami:

Yeah. Usually during my lunch break.

Robin Heinze:

So check it out. You can also join our Infinite Red Slack community at community.infinite.red. There's almost 2,000 React Native developers in there and it's a pretty active community. And check out our Twitter community at rntwitter.infinite.red. You can, of course, find me on Twitter, @robin_heinze. You can find Mazen, @mazenchami, and React Native Radio, @ReactNativeRdio.

As always, thanks to our producer and editor, Todd Werth; our assistant editor and episode release coordinator, Jed Bartausky; our designer, Justin Huskey; and our guest coordinator, Derek Greenberg. And thanks to our sponsor, Infinite Red. Check us out at infinite.red/reactnative and special thanks to all of you listening. Make sure to subscribe wherever you get your podcasts.

I am supposed to tell a mom joke. I was not prepared for this. I do have my mom joke book.

Mazen Chami:

Let's go.

Robin Heinze:

I'm really glad that I put post-its on all the jokes. What do you call a dinosaur with one eye? A do-you-think-he-saurus?

Mazen Chami:

Okay. That's a good one.

Robin Heinze:

I giggled. Yep, that's our show for today. I'll see you all next time.