React Native Radio

RNR 242 - Inspecting React Native 0.69

Episode Summary

In this episode, Mazen and Robin dive into the latest release of React Native - Version 69!! They dive into what's changed and whats new in this version, along with attempting to discuss sportsball.

Episode Notes

In this episode, Mazen and Robin dive into the latest release of React Native - Version 69!! They dive into what's changed and whats new in this version, along with attempting to discuss sportsball.

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. https://reactnative.dev/blog/2022/06/21/version-069
  2. https://reactnative.dev/docs/new-architecture-intro
  3. https://reactnativeradio.com/episodes/rnr-233-react-18-and-the-future-of-react-native
  4. https://github.com/facebook/react-native/blob/2d74de010b8ecc90e8b6b253ab01a98bb6c615ec/CHANGELOG.md

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio Podcast. Brought to you by oil executives who remind you that they feel your pain. You know how much gas a yacht takes? Episode 242 React Native 0.69.

Mazen Chami:

So Robin, did you watch the NBA draft last night?

Robin Heinze:

Well, I am filling in for Jamon today, so I think I'm supposed to say yes.

Mazen Chami:

Yeah. You're supposed to do your Jamon research.

Robin Heinze:

My Jamon homework. No, I didn't watch the NBA draft. I don't follow basketball as closely or at all.

Mazen Chami:

I remember one episode you said you were cheering the blue team.

Robin Heinze:

Yeah, blue team.

Mazen Chami:

Yeah.

Robin Heinze:

Coolest uniforms.

Mazen Chami:

Well, the blue team also known as Duke University. They had a good night at the draft. The number one pick was out of Duke, a freshman.

Robin Heinze:

I was going to say Duke is not NBA, but you're talking about recruited from Duke. Got it.

Mazen Chami:

Yes. Yeah. I think he's going to the Magic. Another blue team.

Robin Heinze:

I'm sure that's why they drafted him.

Mazen Chami:

Exactly. And then, Chet Holmgren I believe-

Robin Heinze:

Holmgren, as in Jamon Holmgren.

Mazen Chami:

Yeah. But I don't think there's a relationship there.

Robin Heinze:

Oh.

Mazen Chami:

I've asked Jamon before. And I think he said no. He doesn't know him. But we could say he knows him. I don't think anyone's going to check out. So Jamon's cousin maybe is in the NBA. I think Duke was probably the team that got the most kids drafted this time, so.

Robin Heinze:

Well, good for Duke.

Mazen Chami:

Yeah.

Robin Heinze:

Well, I'm sure some of our listeners care about basketball. And I'm sure others care about React Native, which is why they're here.

Mazen Chami:

Mm-hmm.

Robin Heinze:

So we'll start our episode for the day. Of course, I am Robin, your friendly host for the day. Jamon is out of town, so he couldn't be here with us. But I will fill his shoes. His very, very large shoes in more ways than one. I am a senior software engineer here at Infinite Red. I live in Portland, Oregon with my husband and my two little kids. And I've been specializing in React Native for the past five, six years. I'm also joined by my formidable co-host, Mazen, who lives in Durham, North Carolina with his wife and little boy. He's a former pro soccer player and coach. And is also a senior React Native engineer here at Infinite Red.

I should say that this episode is sponsored by Infinite Red as usual. Infinite Red is a premier React Native design and development agency located fully remote in the US and Canada. If you're looking for React Native expertise for your next React Native project, hit us up. And you can learn more on our website, infinite.red/reactnative. And of course, don't forget to mention that you heard about us through the React Native Radio Podcast. So let's get into our very exciting topic for today. Drum roll, please.

Mazen Chami:

Drum roll.

Robin Heinze:

Announcing or I guess inspecting React Native 0.69. Very exciting release that just dropped.

Mazen Chami:

Yeah, this is a big one.

Robin Heinze:

Let's just get right into it, because there's a lot of exciting stuff that we want to cover. First of all, React 18 is finally here.

Mazen Chami:

Finally. Yeah.

Robin Heinze:

Finally. If you remember, we did an episode a while back RNR 233 with Gant Laborde on React 18 and the future of React Native, where we talked about all the goodies that come with React 18 and what concurrency is able to bring to the table. But with the caveat that it wasn't included in React Native just yet. Now, we can say that it is.

Mazen Chami:

It's finally arrived.

Robin Heinze:

Finally arrived. So if you are running with the new architecture, if you've enabled it, it's still behind a flag. So you'd have to turn it on. But if you're running with the new architecture, if you upgrade to React Native 0.69, you'll now have the features of concurrency. What are some of those new features that users will see, Mazen?

Mazen Chami:

We highlighted a lot of them in that episode. But to that, I think we highlighted the most was the useTransition hook to leverage all the concurrency. As you're transitioning to a page, you can trigger a function either prior or after. So most likely after you transition. And then, the useID hook. That was one that I was kind of excited about, because in the past, you'd have to install your package, UUID, I believe it is. And then, it's like UUID v4, v5, v6 or whatever to get your unique ID. Well, now, there's the useID hook, which will kind of give you that ID.

Robin Heinze:

So what about that hook requires concurrency? Why is that a concurrency feature?

Mazen Chami:

The useID hook?

Robin Heinze:

Yeah.

Mazen Chami:

That was just more of a nice addition to React 18.

Robin Heinze:

Gotcha.

Mazen Chami:

Yeah. The main concurrency one was the useTransition hook to leverage that. And then, another big one also is, the whole leveraging of concurrency. If you were to set multiple states at once, you would only have one re-render. So if you're not going to use a factor set or something, or on a click, you set a boolean from true to false or whatever. And then, you set another loading, say you're loading boolean to false. You would only have one re-render there.

Robin Heinze:

Awesome.

Mazen Chami:

There's obviously ways around it if it's a certain UX you want, but yeah.

Robin Heinze:

So we're expecting to see some performance improvements with the addition of concurrency.

Mazen Chami:

Absolutely.

Robin Heinze:

Awesome. Well, I'm really excited for that, and to play around with those features, and see what difference they make. So in addition to React 18, that's probably the most notable highlight. But also, they're now including Hermes bundled in with React Native. So previously it was-

Mazen Chami:

Yeah.

Robin Heinze:

Hermes was a separate package. And there was a lot of confusion about, well, which version of Hermes is compatible with which version of React Native? And now, they're shipping Hermes with React Native bundled together, so there won't be any more confusion.

Mazen Chami:

Have you used Hermes on a project? Or was it just automatically enabled at first and that was it?

Robin Heinze:

I don't think I've ever had one where I specifically decided to go enable Hermes. It's all been on by default recently. Or it wasn't released yet, because we only start new projects once every six months to a year.

Mazen Chami:

Yeah. This is just the cool feature where it's bundled in. You don't have to worry about installing a different package.

Robin Heinze:

Right.

Mazen Chami:

And turning it on and whatever. It's already there.

Robin Heinze:

Right. It's basically going to become just another part of React Native that you don't really have to think about, which is great.

Mazen Chami:

Yeah. The next part, the Blog post, which we'll also link in the show notes highlights is just the fact that this is also another big step in the direction of the new architecture. So a lot of stuff we're going to talk about are new architecture specific. So you'll hear buzzwords like React Native Synergy, TurboModules, and all of those. As part of that, the Blog post pretty much links to a way for you to migrate your app or your library to the new architecture. So take a look at that if you want to leverage these new features and the new architecture.

Robin Heinze:

Yeah. I think more and more with each new release, a lot of the changes that you're going to be hearing about will only apply if you have the new architecture turned on.

Mazen Chami:

Yeah. Exactly.

Robin Heinze:

So they're really focusing on innovating and iterating on the version of React Native that is the future. So yeah, if you haven't yet, even if you can't do it in maybe your main project at work, try and start up a side project and enable the new architecture. Play around with it, get to know it, make sure you can get it to work, because it's really going to be the focus of React Native going forward.

Mazen Chami:

I agree. And if you do mess it around with it on the side, it might just be a good validating point to then prove to why you should get your current production apps moved over to the new architecture, because of all these performance improvements and all the underlying fixes that are there.

Robin Heinze:

Definitely. So let's talk about some of the other highlights in this release. In the blog post, they wanted to call out a few specific things. One is, they're deprecating support for iOS and tvOS SDK 11.0. So I think we're on what? iOS 15, 16 now.

Mazen Chami:

15 point something, and then 16 is coming out in the fall.

Robin Heinze:

And then, they just announced 16. Yeah.

Mazen Chami:

Which is very cool.

Robin Heinze:

Yeah. I'm very excited.

Mazen Chami:

Yeah.

Robin Heinze:

For the configurable lock screen, I'm all about it.

Mazen Chami:

A lot of fun. Yeah.

Robin Heinze:

I'm going to have so much fun.

Mazen Chami:

A lot of fun is going to be had there.

Robin Heinze:

So yeah, 11.0 is deprecated now. And now, 12.4+ is the required version. They've also added better support for M1 users developing for Android.

Mazen Chami:

Oh, you fancy M1 people out there.

Robin Heinze:

I know. Those of us with Intel are just like, not part of the cool kids club anymore. I'm pretty sure Jamon judges me pretty hard for not having an M1 yet.

Mazen Chami:

Yeah. I talked to him about it recently. And he was like, "Yes, you should get an M1." Okay.

Robin Heinze:

I'm surprised he hasn't made it required for all Infinite Red employees at this point.

Mazen Chami:

Right?

Robin Heinze:

So yeah, more and more improvements for M1 users all the time. There's also a new xcode.env configuration file for "more deterministically sourcing the node executable." I don't know what that means. I got to be honest. I don't know what that means.

Mazen Chami:

Yeah. I'm not exactly sure what that is, but looking at the changelog. And this is specific for iOS obviously, because of Xcode. The comment is this PR removes the find.node.sh script and replaces with an .xcode.env file that is sourced by the scripts phase that needs it. The xcode.env file is versioned and customized to your local environment, like you do .xcode.local.env can be used. So I believe now, instead of... I could be shooting in the dark here. But kind of just looking at this. In the past, React Native kind of required... Did it require? Node 16. There was this whole thing about Node 16. I think you can now, using this, pick a specific version. And then, have it trigger that on build time.

Robin Heinze:

Ah, okay. So you-

Mazen Chami:

We're probably going to have to look a little bit more into that, whether if someone's using Node 18, which is the latest one out there. Does that break a lot of stuff along the way?

Robin Heinze:

I have a feeling this is one of those things where if you are one of the people that needs this, you already know that you need this.

Mazen Chami:

Yeah.

Robin Heinze:

And if you don't know what it means, then you probably don't need it.

Mazen Chami:

Yeah. We could be on React Native version, I don't know, 0.80 and never use this, because it's just something you never really need to adjust.

Robin Heinze:

Yeah. It be a niche requirement.

Mazen Chami:

Mm-hmm. The next thing here is React Native now uses the latest status bar API for Android 11. That's cool. Just kind of bringing it up to speed.

Robin Heinze:

They've also added support for C++ 17. I don't know what they were on before. Looks like 14 is what they were on before.

Mazen Chami:

Okay. And C++ came in with the new architecture, so that's a new thing. Another thing here is iOS hotkeysEnabled property is added to the RCTDevMenu, which allows enabling/disabling hotkeys that trigger developer menu popup.

Robin Heinze:

That sounds like a really cool change. I know there's been a lot of frustration around those hotkeys. There's been some changes to the simulator shortcuts. And I know half the time, I start a screen recording when I'm trying to reload and-

Mazen Chami:

So many times I look at my simulator and it's recording. I'm like, "Oh, boy." I stop it. I stop it and it's an hour of me clicking through the app. Yeah. That's happened.

Robin Heinze:

So yeah, that's seems like a cool little thing that you can customize now.

Mazen Chami:

Yeah.

Robin Heinze:

So yeah, those were the highlights that they called out in the Blog post. We also combed through the changelog and pulled out stuff that we thought was noteworthy, interesting, accessible to our listeners. We're not going to touch on everything. The changelog is a mile long. We'll go through some of the points that we thought were cool. To start with, there's some breaking changes to be aware of. One, React Native CLI has been bumped to version 8.0. And that comes with it, a bunch of visible changes.

Mazen Chami:

I've been a big fan recently of using NPX instead of globally installing the CLI. So I think, if you do use NPX-

Robin Heinze:

You'll get the-

Mazen Chami:

You'll probably-

Robin Heinze:

Yeah.

Mazen Chami:

Yeah. And that's usually the better way of getting all that.

Robin Heinze:

But you may notice some things aren't there that used to be there, like React Native link and React Native unlink are no longer available since we've had auto linking for 10 versions or something. Long time.

Mazen Chami:

I can't remember the last time I used link.

Robin Heinze:

I was working on an app that was built originally on React Native 0.43 or something. It's a dinosaur.

Mazen Chami:

I'm glad you didn't quit, Robin.

Robin Heinze:

It's been upgraded since then. But some of the packages that it uses have decayed, as open source packages tend to do.

Mazen Chami:

Yeah.

Robin Heinze:

Also, there's a whole list in the blog post of things that are different in the CLI. But I think a lot of these things, people probably have been mentioning for a long time, like install and uninstall commands. There were some properties for run-android, things like that, just sort of cruft was removed. So yeah, we'll link the Blog post of course. So take a look at all those CLI differences. If you see something that you weren't expecting, that's probably the reason.

Mazen Chami:

The next one is support for console.disableYellowBox has been dropped. This is a breaking change, because if you remember or if you're using this, console.disableYellowBox has been in the works to be deprecated. Now, it's completely gone in favor of LogBox.

Robin Heinze:

Okay.

Mazen Chami:

Which is the API.

Robin Heinze:

I was going to say, are they just not letting us disable warnings anymore? No. It's LogBox, that's why.

Mazen Chami:

Yeah, yeah. The new command. Instead of console.disableYellowBox, it's LogBox.ignoreAllLogs, which is a function, so yeah. Again, just in favor of making it a little bit cleaner using the LogBox API there. And in the notes, it says that the initial deprecation of this was started over two years ago, so.

Robin Heinze:

You had time.

Mazen Chami:

Yeah, so.

Robin Heinze:

If you've been looking at a deprecation warning for two years, the jig is up.

Mazen Chami:

Yes.

Robin Heinze:

Let's see. The next one on here. They removed some more deprecated prop types. So if you're still using prop types and you've been getting deprecation warnings, you may have to make a change now. Another deprecation, removeListener on the appearance API. I didn't actually know about the appearance API until I was reading up on this. But there's an appearance API in React Native that lets you check things like whether your user has chosen light or dark mode. I think that's all it does. But they deprecated the removeListener method on that API. Or they removed it. It's been deprecated since 65, I think

Mazen Chami:

It's saying to now just do the standard remove function.

Robin Heinze:

Yep.

Mazen Chami:

On any of your event subscriptions. And then, if you are using SegmentedComponentIOS, you will need to move to the segmented-control library. I would guess this is just more of Lean Core initiative or a package that potentially wasn't used that much. That's now just being moved over into its own package. So there's a repo out there for this and you can just kind of add it as needed.

Robin Heinze:

Cool. So I think that was the list of breaking changes. So those are the things that you'll have to change in order for your app to continue working with 0.69. But there is also, of course, a lot of new features, non-breaking changes. One of the cool new features is support for the devtools' profiler, which is in Chrome. The Chrome DevTools.

Mazen Chami:

Correct.

Robin Heinze:

The summary on the commit message says add support for analyzing sample profiler data in devtools' JavaScript Profiler tab. So just a little bit of extra tooling around profiling and sampling.

Mazen Chami:

There's a bunch of also up next, new architecture related changes. We highlighted, looks like four over here, which is automatic type conversion for C++ TurboModules, new bridging API for JSI to C++. And those are just basically getting us away from the bridge, right? To the new C++ architecture. Exposed scheduler through FabricUIManager. So that's again another cleaner way of making sure we don't have a flicker on our screen anymore. Getting rid of the bridge and that time in between. And then, adding event listeners to the Scheduler. So that one, similar to what we said, you can set a listener to just kind of see what's happening based off of this API.

Robin Heinze:

Yeah, definitely. There was a lot of changes in this list that are all new architecture or React Native Synergy-

Mazen Chami:

Exactly.

Robin Heinze:

... related. And again, this stuff you might not notice.

Mazen Chami:

Yeah.

Robin Heinze:

It's nice to kind of dig through the code change and just see what it's doing just to give you an insight scoop of how React Native is working, but you might not touch on it, but you should feel it with the improvements getting rid of the bridge. I think that's one of the big things to highlight based off of that new architecture. And as always, the new architecture is still in its infancy. So there's going to be a lot of stuff like this that's coming up just to improve it and keep growing it

Definitely. I will say, every time we do episodes like this, we read through the changelog, which isn't something I was in the habit of doing before starting this podcast. And it's been really eyeopening. And 95% of what's in there, I don't understand, because a lot of it is internal workings or really obscure features that I never had a need to use. But just the process of reading through everything, and getting a visual of everything that goes into each release, and how much is going on behind the scenes is really powerful.

Mazen Chami:

Totally. Up next is the changed section. I do like how, in the changelog, they have these breakdowns. So we did breaking changes, new stuff that's added. And then now, we're going over stuff that's been changed, which is pretty cool. We have two that we want to highlight. We've kind of talked about it already, but a bunch of dependencies have been upgraded to a newer version. So we said React Native CLI is now version 8.0. Metro has also been updated to 0.70.1.

And then, the next one is Optimized VirtualList context when used with nested lists. I think this is pretty cool, because every time I work on a list of sorts, whether it's virtual list, flat list, or any list that leverages virtual list, I always tend to put another list within it. So it's always good to kind of have improvements on that and making sure that we're always fixing it, because there tends to be a lot of stuff that goes awry there, whether it's vertical versus horizontal and just performance of the lists.

Robin Heinze:

Yeah. The app that we worked on for the past year had a lot of nested lists specifically, like horizontal lists within a vertical scrolling page. So it's not as uncommon of a design pattern as you might think.

Mazen Chami:

Yeah.

Robin Heinze:

So some of the things that were fixed, there's bug fixes. So it looks like AppState, the removeEventListener callback was not correctly removing listeners for blur and focus events. And so, that's fixed. The focus method on text input now respects the editable state, which-

Mazen Chami:

So it would skip the input if it's not editable, I assume.

Robin Heinze:

I think so. When we call focus() upon a TextInput ref which has prop editable=false it marks the textinput as focused in TextInputState even though the focus is rejected by textinput itself because it is not editable. Right, so it sounds like before this fix, if a text input was marked as not editable, the focus call was just ignored. And now with this fix, when you call focus, it records that you have focused the input, even if nothing registers on visibly.

Mazen Chami:

Okay.

Robin Heinze:

Because it's not editable. So yeah, that's been fixed. VirtualizedList with initialScrollIndex was not rendering all elements when data was updated. That was fixed. On Android, the underlineColorAndroid, if you said it's transparent was not working on API 21. There's a fix for that.

Mazen Chami:

On iOS, ScrollView's contentInsetAdjustmenBehaviour is reset to Never at every reuse to avoid layout artifacts. That's pretty straightforward there, I think. That's pretty cool.

Robin Heinze:

What do they mean by every reuse?

Mazen Chami:

I assume every time data changes or on scroll, because whenever something changes within it. Well, if it's talking about content inset, I feel like whenever the content within it changes might have like a jump.

Robin Heinze:

So this is specifically a fix for the Fabric side. So that new architecture version, because Fabric can reuse components. And so, this prop has to be reapplied at every reuse, so it resets to never.

Mazen Chami:

Okay.

Robin Heinze:

Oh, yeah. So related to the new architecture and the rendering optimizations that go along with that.

Mazen Chami:

The next one for iOS. If you are doing a local push notification, you can now enable a custom sound.

Robin Heinze:

That's cool.

Mazen Chami:

That comes with a notification.

Robin Heinze:

So...

Mazen Chami:

I feel like my phone's always on silent. I don't even know what my notifications sound like.

Robin Heinze:

Fun story. We have a client in the transportation and logistics industry. And this client once requested that the sound when notifications came in, be set to a semi truck horn.

Mazen Chami:

That could be startling with the drivers driving and that happens.

Robin Heinze:

True story. He sent us an MP3 of a semi truck horn to set as the notification.

Mazen Chami:

Did you?

Robin Heinze:

We did. And then-

Mazen Chami:

You did.

Robin Heinze:

I think literally after three days of testing on their beta builds, he said, "Everyone finds this really annoying. Please take it out."

Mazen Chami:

Moral of the story. Stick to the regular...

Robin Heinze:

Stick to the regular notification sound.

Mazen Chami:

Another fix here is pod install--project-directory=ios failing when Hermes is enabled. This is actually pretty interesting. But recently, I mentioned I've been using NPX. If you do NPX pod-install, NPX will automatically find the project directory for you. So I wonder-

Robin Heinze:

That may be what they're using under the hood-

Mazen Chami:

Yes.

Robin Heinze:

... from that package.

Mazen Chami:

Hopefully. Yeah.

Robin Heinze:

So yeah, that's fixed.

Mazen Chami:

That does that. Yeah.

Robin Heinze:

I'm just going to hop back to a couple of the new additions that I thought were neat. And this is kind of a behind the scenes change, but is interesting nonetheless. There's now a feature flags module inside React Native. So that means they can add new features and then keep them behind a feature flag, which I'm very shocked that, that wasn't already a thing that they were doing. I'm sure they're going to need that a lot, especially as the new architecture becomes on by default, which will be down the line here a bit. But once that happens, I'm sure they'll need to put stuff behind feature flags a lot more.

Mazen Chami:

That's a pretty cool one. I think they should have highlighted that a little bit, higher up on the list.

Robin Heinze:

I mean, I'm guessing users won't need to know or use that. I'm guessing it's for React Native developers, who will mostly care about that. Developers on the React Native core team, I mean.

Mazen Chami:

Yeah.

Robin Heinze:

But I thought it was interesting and mostly interesting that it is just happening now.

Mazen Chami:

Yeah.

Robin Heinze:

Also, I saw quite a few changes related to animation of color styles, which are now using the native animation driver. There were a couple changes related to that. So I think that means animating color styles now is more performing because it uses the native driver. So that's neat.

Mazen Chami:

I'm a big fan of using Reanimated. Well, 3 now, if you have the new architecture instead of the animated library.

Robin Heinze:

Is it Reanimated 3 now?

Mazen Chami:

Yeah. We had an episode with Christoff Najera. And we talked about Reanimated 2 with him. But he did give us a sneak peek into 3, which was then released shortly after. So Reanimated 3 with the new architecture, I think, another game changer library out of software mentioned.

Robin Heinze:

So many smart people.

Mazen Chami:

Yeah.

Robin Heinze:

Let's see. On Android, there's now an API that enables concurrent route on Android, which is a key feature for using React 18, I believe. And then on iOS, ActionSheet iOS now has a dismissActionSheet method. I'm shocked that, that was not already a thing, but I guess it wasn't. Now, you can programmatically dismiss your iOS action sheet. I guess before, you could only use a cancel option.

Mazen Chami:

Yeah.

Robin Heinze:

But now, you can do it programmatically, so that's actually a cool feature. To kind of wrap up, I just want to highlight a couple of the... There's some accessibility changes that were included that I just want to call out, because I love to see any improvements in the accessibility realm. So in this case specifically, there was a couple Android changes. There's now an accessibility announcement for list and grid in FlatList, which if you're looking at a grid or a list in ScrollView, TalkBack will announce, whether it's a grid or a list. And it'll announce when you change pages or change row or column. So it's more customized to the grid and not just a regular ScrollView.

Mazen Chami:

And that's pretty good. Just so the user knows when they're clicking, something's changing, and they're announced what's changing

Robin Heinze:

Exactly. On Android links are also now independently focusable. So a link in this case is, I think, a pressable text. And so now, you can independently focus on a particular link. And then on the iOS side, all available components now have the accessibilityLanguage prop, which I'm guessing means you can internationalize your labels and hints, I believe.

Mazen Chami:

I think that's pretty cool.

Robin Heinze:

Yeah. That seems really, really important to me.

Mazen Chami:

Yeah, because not everyone speaks just English.

Robin Heinze:

Right?

Mazen Chami:

Yeah. For their test, they test this out in Italian, it looks like.

Robin Heinze:

So I'm guessing, if you specify the accessibilityLanguage, that tells the phone or the voiceover application to read things. I don't know.

Mazen Chami:

I wonder if it will translate it or it'll be dependent-

Robin Heinze:

That's what I'm not sure, because-

Mazen Chami:

Yeah, if it'll be dependent on the developer to make sure that they're passing in their labels internationalized still. But that would be interesting, because-

Robin Heinze:

So I guess, it's says there's things that the voiceover says, like meta things, like instructions that are usually in English. It'll say double tap to activate or something, which is something that's voiceover system commands, but not necessarily based on your app. So if you've specified the accessibilityLanguage on compressible component or something to be Italian, it will say double tap to activate in Italian instead of in English.

Mazen Chami:

Yeah. That's pretty cool.

Robin Heinze:

Yeah. Otherwise, it just uses the system language. So if your phone is set to Italian, then it does that. But now in app, you can specify what language it should be reading in, which I'm guessing will be useful for apps that let you select the language in the app.

Mazen Chami:

Yeah.

Robin Heinze:

Then, you can universally apply the accessibilityLanguage. And then, there's one key security fix that we wanted to point out. Mazen, if you want to explain what that one is.

Mazen Chami:

Yeah. Now, with the URL, all the params that are passed in under your search params get URI encoded. So for a little bit more security there. In the past, it looked like any search params were just added on as a string. And now, they're URI encoded, so you can't have any sort of injection or whatnot in the URLs.

Robin Heinze:

Awesome. Yeah. No more little Johnny drop tables.

Mazen Chami:

SQL injection. Drop all.

Robin Heinze:

All right. I think we are out of time. We hit a lot of things, but there's so much more in this release that we didn't touch on. So we will, of course, include a link, not only to the Blog post announcement, but to the official changelog. Make sure to check those out. And then, if you'd like to learn and nerd out more about React Native, be sure to check out Jamon's Twitch stream. He streams twice a week, Mondays and Fridays at rn.live or youtube.infinite.red. You can also join our Slack community at community.infinite.red. And make sure to check out the Twitter community, which I'm not a part of.

Mazen Chami:

Still?

Robin Heinze:

Twitter-

Mazen Chami:

We're almost at a thousand, I believe, members.

Robin Heinze:

I'm not one of them. If you are one of the lucky few rntwitter.infinite.red is our Twitter community. And of course, you can find me on Twitter @robin_heinze with an E at the end. And Mazen, you're @mazenchami. React Native Radio is @ReactNativeRdio. All complaints about the podcast can be emailed to jamon@infinite.red. 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 of course, thanks to our sponsor, Infinite Red. Check us out at infinite.red/reactnative. And a special thanks to all of you for listening today. Make sure to subscribe wherever you get your podcasts. We will see you next time.