React Native Radio

RNR 230 - We React to News

Episode Summary

It's that time again! Jamon and Robin react to news. This episode includes plenty of laughs Jamon's most recent "mistake", along with the latest news in the world of React Native.

Episode Notes

It's that time again! Jamon and Robin react to news. This episode includes plenty of laughs Jamon's most recent "mistake", along with the latest news in the world of React Native. 

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. Jamon’s mistake
    1. Jamon's blog post about how Flutter is better than React Native...in all the ways that dont matter.
  2. This Week in React
  3. React Native 0.68 prerelease
  4. Workgroup for the New React Native Architecture
  5. TypeScript 4.6
  6. react-native-screens Fabric
  7. Flipper
  8. Ignite 7.9
  9. Glassmorphism

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio Podcast. Brought to you by the J-raphical Interchange Format. J-raphical Interchange Format, the best way to avoid work. Episode 230, We React to News.

Jamon Holmgren:

I made a mistake, Robin.

Robin Heinze:

Okay. You can elaborate. What did you do?

Jamon Holmgren:

Well, I make lots of mistakes, so I can understand why you'd want me to-

Robin Heinze:

That's believable.

Jamon Holmgren:

Elaborate. It's very believable. I tweeted... Well, first off, that sounds like a mistake just straight off, "I tweeted." But I tweeted, "Should I write an article, 'Flutter is better than React Native in all the ways that don't matter'?" And it was kind of like a throwaway joke. I've said this many times on the podcast and in other areas.

Robin Heinze:

I was like, "You've said that on the podcast," so...

Jamon Holmgren:

Yeah, I've said it plenty of places.

Robin Heinze:

It's your little quip. It's your quippy.

Jamon Holmgren:

Yeah, I know. It just gets people going. I love it. It's kind of clickbait-y. Right now, there's almost 600 likes on it, and people are telling me I need-

Robin Heinze:

600?

Jamon Holmgren:

600.

Robin Heinze:

It was at like 150 when I saw it yesterday.

Jamon Holmgren:

I know. So, I guess that means I have to write it.

Robin Heinze:

You have to do it. I mean, you just said yourself, it's clickbait-y, so...

Jamon Holmgren:

It's so clickbait-y. I'm working on it. By the time this comes out, it's probably going to be out, so maybe we can link to it, or you can search for it, "Flutter is better than React Native in all the ways that don't matter."

Robin Heinze:

Well, now you'll actually have all of the information to back up that claim, because you'll have to do the research to write the blog post.

Jamon Holmgren:

Are you saying that I'm making that claim without that information?

Robin Heinze:

Maybe just like casual information, and now you'll have-

Jamon Holmgren:

Casual information?

Robin Heinze:

You'll the real concrete... the good stuff.

Jamon Holmgren:

I actually disagree. The reason I disagree is because yes, it's true that I don't have all the information in terms of really nitty-gritty technical details. That is true. You are right about that, but those aren't the things that matter.

Robin Heinze:

There you go.

Jamon Holmgren:

So, you'll have to wait for the article to come out, but yeah, I'll probably be running it by you, Robin, and others. You know what? The article's probably out by now, so people can just go and check it out.

Robin Heinze:

We'll put it in the show notes.

Jamon Holmgren:

Yeah.

Robin Heinze:

Are you going to build a Flutter app for research purposes?

Jamon Holmgren:

No, because again, that doesn't matter.

Robin Heinze:

It doesn't matter.

Jamon Holmgren:

Doesn't matter. It's such an out, but it's true. The reasons that React Native are better than Flutter really don't have a lot to do with the technical stuff. There are some technical reasons that Flutter is better, but really it has to do with... I'm going to give away... You can go read the article. It's way more nuanced than this, people. It's way more nuanced than this.

Robin Heinze:

Go read it.

Jamon Holmgren:

Please go read the article.

Robin Heinze:

Go read it.

Jamon Holmgren:

Yes. This is not... Don't quote me on Twitter and say, "This guy is a..." I don't know. Anyway, the reasons are really more business-oriented, and it's, can you hire Dart developers right now who have not done Flutter to go do Flutter?

Robin Heinze:

Probably not.

Jamon Holmgren:

Probably not. Not really. Can you hire React and JavaScript developers to go do React Native? Like all over.

Robin Heinze:

Tomorrow.

Jamon Holmgren:

They're everywhere. Now. It's hard to hire anywhere, but it's just... I'm talking relatively speaking. That's one. Another is, can you share code between your web team and your mobile team?

Robin Heinze:

I don't know. Can you?

Jamon Holmgren:

With Flutter, you're probably not using Flutter on the web. I know you can, but you're probably not.

Robin Heinze:

I was like, you're just inviting the "well, actuallies" to say, "Yes, there actually is a Flutter for web."

Jamon Holmgren:

Yeah. And who uses it?

Robin Heinze:

I can't name anybody.

Jamon Holmgren:

Exactly. This is unnecessarily aggressive. And I go into more things, too, but my blog article explains in a much more...

Robin Heinze:

Flutter fans, please don't send us hate mail.

Jamon Holmgren:

Nuanced tone. You can send it to me. My email is robin@infinite.red.

Robin Heinze:

Good thing I have filters on and I don't check my email very often.

Jamon Holmgren:

You don't, actually.

Robin Heinze:

That's what Slack is for.

Jamon Holmgren:

Okay. Let's get started. I'm Jamon, your host and, contrary to all evidence, friendly CTO of Infinite Red. I am joined by my admirable co-host... That is not a word that we've used yet. Robin Heinze.

Robin Heinze:

You're right. I seriously think we need to make a database of the words so that I can check every time. Make sure you don't reuse a word.

Jamon Holmgren:

I just search it in Google Drive. It pops up. If I see in Google Drive, like in our show notes, it pops up if I've ever used it.

Robin Heinze:

Hey, work harder, not smarter.

Jamon Holmgren:

Or something like that.

Robin Heinze:

I mean, no. Work smarter, not harder?

Jamon Holmgren:

This is why you're admirable. Mazen is not here today. He is on baby watch. That doesn't mean he's watching a baby. He's watching for a baby to appear.

Robin Heinze:

Well, by the time this comes out, he probably will be watching a baby.

Jamon Holmgren:

That's true. That is actually very true. He's probably on baby watch right now, as he's listening to this. A different type of baby watch.

Robin Heinze:

Hi, Mazen. Hi, Mazen's baby.

Jamon Holmgren:

Yeah, Mazen, Junior. Actually, is it a boy or a girl? I actually don't know. We're not supposed to reveal that, probably, on the podcast.

Robin Heinze:

Probably.

Jamon Holmgren:

We'll let him.

Robin Heinze:

We'll let him.

Jamon Holmgren:

I don't actually know. Robin is a senior software engineer at Infinite Red, is located in Portland, Oregon, and specializes in React Native. This episode is sponsored by Infinite Red. Infinite Red is a premier React Native design and development agency. We don't do Flutter. Located fully remote in the US and Canada. If you're looking for React Native expertise, not Flutter, for your next React Native project, not Flutter, hit us up. You can learn more on our website, infinite.red/react-native. See, this is why you shouldn't skip the sponsored by. You can learn more on our website, infinite.red/flutter. I mean, react-native. And don't forget to mention that you heard about us through the React Native Radio podcast.

Robin Heinze:

Okay. Now, we really need to add a page to our website.

Jamon Holmgren:

/flutter?

Robin Heinze:

Infinite... /flutter, that just tells you to use React Native.

Jamon Holmgren:

I'm going to make a note of that. We are hiring. If you are a React Native developer, not a Flutter developer, located in the US or Canada, go to careers.infinite.red. Let's see how far I can push this joke before people get really annoyed. I bet they already are. All right. The topic today is we react to news, where we discuss the latest news in the React Native community and get the reactions from our hosts, which of course is just me and Robin today.

Robin Heinze:

Not the Flutter community. It's just React Native news.

Jamon Holmgren:

No, exactly. Yeah. We don't really care about the Flutter community's reactions. Before we start, I should mention that I get a lot of my React Native news from Sebastien Lorber, so go sign up for his newsletter, This Week in React. This is not a paid endorsement. I just really like his newsletter. He's a great guy, friend of Infinite Red, so go search for This Week in React, Sebastien Lorber. Fantastic stuff. He also posts his newsletters in our community, community.infinite.red, so you can go check that out. That is about React as well, so if you just want React Native news, go to our very own reactnativenewsletter.com. Over 15,000 subscribers. Actually, I think it's just under 15,000 subscribers. I don't know why I wrote over. It's just under, it's like 14,600 or something. And John Major, who is a co-host on the program sometimes, he's a very busy guy, so not always on here, he has been doing a great job with it. So, go check that out. Derek Greenberg, who is our guest coordinator on the program, is also helping with that, and he is doing a great job.

Robin Heinze:

Yeah. He's been making videos, which is really, really cool.

Jamon Holmgren:

Yeah. Go check those out. They're really cool. The first three things on our list are all about the New Architecture.

Robin Heinze:

Now. Jamon, what do you mean by the New Architecture?

Jamon Holmgren:

Thanks for cuing me up. Go to React Native Radio episode 222 with Kevin Gozali from the Facebook... Sorry, Meta, whatever, React Native core team, and go listen to that if you haven't yet. It's fantastic, and he does a good job of explaining what the New Architecture is and how they're rolling it out, which leads us to the first thing, which is the React Native 0.68 prerelease. We're going to have a whole episode about 0.68, so we're not going to go deep into it right now, but what's important to know about this prerelease?

Robin Heinze:

I couldn't tell you. Don't put that in.

Jamon Holmgren:

Todd's going... What you're supposed to say is, "You can now enable the New Architecture with a flag."

Robin Heinze:

Okay. Okay. Gotcha. You can now enable the New Architecture with a flag?

Jamon Holmgren:

Yeah. Yeah. You can.

Robin Heinze:

Now, is that the whole New Architecture, or just certain pieces of it?

Jamon Holmgren:

I guess what's in there?

Robin Heinze:

Yeah.

Jamon Holmgren:

Yeah. What's in there right now. Obviously, there's more coming, but a fair amount of it's ready. It's in there. It's ready to be used. It's not documented super well, but there will be things coming for documentation for sure. There's a lot of behind-the-scenes stuff happening with the core group that... I don't know how much I'm supposed to say, but in the release group meetings, we've been talking a lot about, for example, what third-party libraries are working well with the New Architecture and which ones still need work on them. For example, React Native Screens has a certain thing with it that needs to be fixed, but it is supporting Fabric, which is of course one piece of the New Architecture. So, yeah, work is happening, and of course now it is available for prerelease. Go check it out, especially if you don't have like some super mission-critical thing. Go in there, enable it, see what crashes, see what happens.

Robin Heinze:

I've heard that the core team is really trying to get more people testing the nightly releases to suss out any bugs before the releases go live, so if you have the capacity, bandwidth, to do that, maybe think about installing some nightly releases and filing some bugs.

Jamon Holmgren:

If you have the fortitude.

Robin Heinze:

The fortitude.

Jamon Holmgren:

The [Finnish 00:10:03], to use a Finnish word. That's definitely something. And we're going to probably work with them to test Ignite on nightlies as well, so that's a whole thing that Gant Laborde and I are working on right now.

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

Yeah, it's an exciting inflection point for the React Native community as a whole to go to the New Architecture, and hopefully, from here on out, we have... Well, I hate to bring this up again, but it is actually something that was a legitimate criticism of React Native versus Flutter, which was the bridge, and this addresses that, so kind of a big deal. Our second thing also has to do with the New Architecture, and it is a work group that's been established, which is...

Robin Heinze:

React Native New Architecture.

Jamon Holmgren:

Yeah. React Native New Architecture under the React WG...

Robin Heinze:

Working Group.

Jamon Holmgren:

Working Group.

Robin Heinze:

Yeah.

Jamon Holmgren:

Yeah. And that's on GitHub, and the about just says, "Workgroup for the New React Native Architecture." It's a discussion-only repository to coordinate and support the rollout of the React Native New Architecture. You can access the working group via the discussions tab, and it's a space where the community can meet and discuss the New Architecture, Fabric renderer, and the TurboModule system, and also Codegen, which they don't mention here, but is part of that as well. There's a lot of stuff going on. There's announcements, deep diving, documentation, libraries, Q&A, releases. And Robin, you're a part of that, actually, right?

Robin Heinze:

Yeah. Just got an invitation a couple days ago. It is technically a closed group by default, but it's open to anybody. You just have to fill out a form, and they'll review it and admit you.

Jamon Holmgren:

But only if you're as cool as Robin, because they haven't accepted me yet.

Robin Heinze:

Yeah. I don't know what their criteria is. I think it's just to weed out intent.

Jamon Holmgren:

Yes, I would... Yeah. And I think there's some value in that, for sure. I have plenty on my plate with being involved with releases and things like that, but yeah, it's a fantastic new... And this is actually one of the coolest things about what the React Native core team is doing. They're involving the community a lot more intensely with this rollout. And do go listen to React Native Radio 222, because Kevin talks more about that.

Robin Heinze:

I should actually go listen to that myself. I don't think I was here for that.

Jamon Holmgren:

Oh, man. It's great, Robin. Yeah, it was fantastic. The only thing that was missing was you.

Robin Heinze:

Aw.

Jamon Holmgren:

But that's okay. We did as well as we could. React Native Screens. That's our third thing here. It supports Fabric, Software Mansion's been doing some fantastic work over there, and they are introducing Fabric to React Native Screens. This is something that... They do have a blog article up about that on the Software Mansion blog, and it allows you to flip the switch and turn on Fabric and allows you to then play around with React Native Screens in Fabric. Why is React Native Screens using Fabric? Why is that an important thing, Robin?

Robin Heinze:

Because React Native Screens interfaces with the native navigation system.

Jamon Holmgren:

Exactly. I didn't prep you for that at all. I just threw you under the bus, and you totally fielded it well. That was great. Yeah, no, that's exactly right. React Native Screens is one of my favorite libraries out there, and I love the fact that it interfaces with the native side of things and allows you to, I guess, write native navigation using JavaScript.

Robin Heinze:

Gives you a more native feel.

Jamon Holmgren:

Yeah.

Robin Heinze:

You said that is a flag. It's not...

Jamon Holmgren:

Yes.

Robin Heinze:

You only turn on Fabric if you're using Fabric in React Native.

Jamon Holmgren:

If you want to use it. Yeah.

Robin Heinze:

Oh, that's awesome.

Jamon Holmgren:

Beyond the New Architecture now, and get reactions about TypeScript.

Robin Heinze:

Yeah, TypeScript 4.6.

Jamon Holmgren:

What are your reactions to the new release of 4.6?

Robin Heinze:

I probably wouldn't have known about it if I wasn't looking for news, but just reading through the changelog...

Jamon Holmgren:

Kind of under the radar.

Robin Heinze:

Yeah. Well, I mean, at this point, TypeScript is so established that the changes are really very incremental and a lot of times very niche. But just reading through the changelog, there's some cool stuff. You can call code before you call super in a class constructor, as long as it doesn't refer to "this," so they're getting a little bit less strict.

Jamon Holmgren:

Which makes sense, because sometimes you can call stuff that doesn't... Like accessing "this," the word this, the keyword this, or whatever, before super in a constructor is a problem, because the constructor needs to set some things up using super.

Robin Heinze:

Right. But previously, in order to prevent that, they just blanket prevented you from running anything before running super, because... I mean, I think that's the way JavaScript does it, and so TypeScript did the same, but now they're a little bit more clever about it, so they'll check to make sure you're not actually referencing "this," and if you're not, then cool, you can run whatever you want.

Jamon Holmgren:

I can imagine this would be useful for debugging, like if you run a console log that doesn't reference "this," and you need to run it.

Robin Heinze:

But the real question is, who's still using classes? I guess people who don't use React.

Jamon Holmgren:

I agree. I agree. Actually, there are probably quite a few people in the audience who are like, "Hey, I'm still using class components."

Robin Heinze:

I forget there's people that write JavaScript and TypeScript that aren't doing React and React Native.

Jamon Holmgren:

I feel like JavaScript classes were kind of a mistake, but I understand why they added them. It was like everybody wanted that. I may have wanted it back in the day. I don't know.

Robin Heinze:

Wait, wait, are you saying they were not original to the language?

Jamon Holmgren:

No, they weren't. JavaScript, when it first came out, and for quite some time, was more... prototypical inheritance was the way that it was designed. It was not designed with class hierarchy inheritance, and it still works that way under the hood. Classes are not like your classical classes. They are just sort of a sugar on top of the prototypical inheritance that JavaScript uses. They look kind of familiar, but if you really think about how they work, they're not the same as Ruby or Python or something like that.

Robin Heinze:

It's the illusion of a class.

Jamon Holmgren:

Mm-hmm. Yeah. But it still uses the prototypes under the hood.

Robin Heinze:

Interesting.

Jamon Holmgren:

I still think that one of JavaScript's strengths is that you can just blast out this object literal and then hang things off of it and sort of do whatever you want with it. And TypeScript really embraces that, because you can apply a type or an interface to any object. Doesn't have to be defined as a class. But inheritance is something that I really avoid as much as possible anyway these days. It's more like, compose things as much as possible, and JavaScript was very much built that way from the beginning.

Robin Heinze:

Yeah. It's funny, because I didn't learn JavaScript until I was learning React Native, and so I've never really used JavaScript outside of the React ecosystem.

Jamon Holmgren:

You literally started with like ES2015.

Robin Heinze:

Yeah.

Jamon Holmgren:

That was your initial JavaScript.

Robin Heinze:

Yeah, so my context for what JavaScript was originally is minimal.

Jamon Holmgren:

Do we have time for an old-time-y story?

Robin Heinze:

Absolutely, we have time.

Jamon Holmgren:

My first real time using JavaScript, I don't know the year, but it was a long time ago, probably 2000... early 2000s. And there's some gray beards in the audience who are like, "Oh, you rookie." I was doing other stuff before then. I was building a website, and I needed... This was just for a friend, and he wanted a dropdown menu, where you hover over the menu. These used to be really popular, but they're much less popular now, where you hover over a menu, and it drops down a list of things to do.

Robin Heinze:

Just a hover, not a click. Right?

Jamon Holmgren:

Exactly.

Robin Heinze:

Yeah.

Jamon Holmgren:

Yeah. You couldn't do that with CSS back in those days. You just couldn't do that. There wasn't a way to do that, so you had to use JavaScript. So, I just searched, and I found something probably on either Stack Overflow, or... Probably before Stack Overflow. It was probably Experts Exchange or one of those other like pre-Stack Overflow, proto-Stack Overflows, back in the day. And I copied and pasted a bunch of code into my website.

Robin Heinze:

Don't do this.

Jamon Holmgren:

And I just edited a couple of things, and it worked. It honestly worked.

Robin Heinze:

They literally have warnings in the JavaScript console now on big websites. Like, if you go to Facebook and you open the console, it's like, "Don't paste stuff here."

Jamon Holmgren:

Yeah. That's true. So, this was just naive, and it was some sort of a very popular dropdown, which was horribly written. When I looked at it as a programmer, even back then, I was like, "This doesn't seem right, but I've never done this language, so maybe it is." Now, looking back, and I'm like, "Wow, that was terrible." But yeah, I managed to make that happen, and it was very Java-esque written JavaScript. So, yeah, that's the first time I used JavaScript, and I had no idea what it was doing. I just dropped it in and went with it.

Robin Heinze:

What year was that?

Jamon Holmgren:

I think it was early 2000s. I don't remember exactly. It would've been sometime back then

Robin Heinze:

Now see, I started coding in 2014, and I was doing Ruby.

Jamon Holmgren:

2014. I started in 1992, I think. Something like that, but it was QBasic and I didn't really get beyond QBasic for a long time. Anyway, we are way far afield here. Editors may have to cut some of that out.

Robin Heinze:

Or not.

Jamon Holmgren:

It's okay.

Robin Heinze:

It's a casual episode.

Jamon Holmgren:

Kind of is.

Robin Heinze:

So, let's see. Further down in the new TypeScript release, a control flow analysis for de-structured discriminated unions. I think this is around inferred types, so if you have... I don't know, it's going to be hard to explain this.

Jamon Holmgren:

This is one of those edge cases you're talking about.

Robin Heinze:

Yeah.

Jamon Holmgren:

This is not something you generally run into. I just noticed that there were a lot of control flow things, not just in this release, but in the previous one as well. They must be really working on that.

Robin Heinze:

Right. It's sort of like gates as you're working, where it's like, "Hey, I recognize that if the value of this property is this, then this other property has to be this, just based on what the data looks like."

Jamon Holmgren:

It kind of reminds me of Sudoku.

Robin Heinze:

Yeah.

Jamon Holmgren:

You've played Sudoku.

Robin Heinze:

Oh, yeah.

Jamon Holmgren:

You're like, "If this is over here, then this other one must be something else."

Robin Heinze:

It's funny you brought up Sudoku, because I just this week started playing a new iPhone game called Nonogram, which reminds me a lot of Sudoku. It's similar. It's more visual, but it's a lot of that sort of deduction. Like, "Okay, well, if this is here, then that means this has to be at least covering this much." It's... Yeah. Very, very...

Jamon Holmgren:

Do you think that if you are attracted to those types of games, that something like TypeScript is also kind of hits those same... I don't know.

Robin Heinze:

Yeah.

Jamon Holmgren:

Endorphins or something?

Robin Heinze:

I think probably.

Jamon Holmgren:

Dopamine?

Robin Heinze:

Get your dopamine where you can. Use TypeScript.

Jamon Holmgren:

There's also some recursion depth checks around generics in properties. They improved that. If you know what that means, then you'll be excited. If you don't, then whatever. JSDoc improvements. I'm actually kind of excited about that, and everybody's like, "Who uses JSDoc?" But I was actually building... I'm still building a role-playing game with my brothers, and since they're not TypeScript experts, I thought, "Well, I'll just write it in JavaScript." We don't even have like a package or a compiler or any of that. There's no build pipeline whatsoever. We literally just run the code that we write, which is weird these days, and I'm using JSDoc to provide types. And it's actually pretty cool. I actually like JSDoc a lot. It's pretty cool.

Robin Heinze:

So JSDoc is part of TypeScript?

Jamon Holmgren:

TypeScript understands JSDoc and will then type check against it.

Robin Heinze:

Oh, okay. I gotcha.

Jamon Holmgren:

So, you can annotate something...

Robin Heinze:

I was like, "Why wouldn't they call it TSDoc?" But it is.

Jamon Holmgren:

Right.

Robin Heinze:

It's a JavaScript thing, and TypeScript is smart about reading it.

Jamon Holmgren:

Yeah. It's a .js. It's a .js file. It's not .ts. But then, you can turn on TypeScript allowJs, and then it'll go in there, and it'll look through, and there are these comments, and it'll be like, "This variable is a string." @type {string}. And then, it will actually then enforce that that's a string and worn just like TypeScript. But there's actually some things that JSDoc does that TypeScript can't and will never be able to do, according to one of the core members I talked to.

Robin Heinze:

Didn't you run across something like that just recently?

Jamon Holmgren:

I did. Yeah. Let me try to explain it really quickly. This is just really another aside in an episode full of asides. I guess it is. We're reacting, right? This is my reaction.

Robin Heinze:

Yes. Our genuine reaction.

Jamon Holmgren:

Let's say that you create an object literal, with the curlies, right? And you're just like, "const Jamon = {" and then maybe you have a name, which is a string, and you have an age, which is an integer, or a number, I guess. And maybe you have something else that's like children, and then that might be an array. And then, in the array, then you would want maybe additional people, or some data. Right? Well, how do you type just one property of that? You could literally write that out and have TypeScript infer what the types are, which is great. But what if you want to enforce that age is always a number? Not just infer it.

Robin Heinze:

But just age?

Jamon Holmgren:

Yeah. Just age. Right.

Robin Heinze:

You want it to infer that name is a string, but-

Jamon Holmgren:

Exactly. Infer whatever name is.

Robin Heinze:

Assert that age is a number and let it infer the rest. You can't do that in TypeScript.

Jamon Holmgren:

And if you say "as number," then that coerces, which is not quite what you want.

Robin Heinze:

Right. Because you lose your type checking, because it's just saying, "Whatever I give you for this, it's a number."

Jamon Holmgren:

Pretend like it's a number.

Robin Heinze:

Just don't look, it's a number, I swear.

Jamon Holmgren:

It's a number, I swear. Exactly. Which will then type the object properly, but then you're not actually checking that what you pass in...

Robin Heinze:

Right. You could put a string in there, and then TypeScript would still be happy.

Jamon Holmgren:

Exactly. "As number." So, JSDoc lets you just put the type right above the property, and it will enforce that it's a number and infer that it's a number at the same time. It will actually then say, "This is a number." That is something that TypeScript doesn't do, which came in really handy when we were creating this game, because I didn't want to have to type every object out. Sometimes, I just want to infer what they are and move on, and that's... Because then, I could do like, "type character = typeof MyCharacter." Typeof is really nice for that.

Robin Heinze:

That's good to know. I think I mostly have used JSDoc for just literally documenting, like, "This is what this component does, and these are the props that you can pass."

Jamon Holmgren:

Yeah, yeah, exactly. Now, even if allowJs isn't on, now with the newest version of TypeScript, you can get suggestions and checks now, so that's kind of cool. Just in your editor, so that's cool. Plenty more in the announcement. Go check that out. We'll put it in the show notes. Let's talk about Flipper.

Robin Heinze:

Flipper.

Jamon Holmgren:

Flipper will be available. Flipper. We need to do a whole episode on Flipper, by the way.

Robin Heinze:

We should. I've just started really using Flipper more, so I think it'd be interesting to talk about what all it can do.

Jamon Holmgren:

You were doing some performance stuff.

Robin Heinze:

Yeah. Looking at some flame graphs, which...

Jamon Holmgren:

That sounds fun.

Robin Heinze:

We'll explain what a flame graph is in a future episode of React Native Radio.

Jamon Holmgren:

Stay tuned. It will be available for web and Node.js apps now, not just for mobile apps.

Robin Heinze:

Oh, nice.

Jamon Holmgren:

They announced that last month. That's very cool. Any reactions to that?

Robin Heinze:

Previously, you could only use React DevTools or similar, and now you have the entirety of Flipper and its suite of plugins and tools.

Jamon Holmgren:

Yeah, that's great. I wonder if web developers will use this, or if it's more like React Native developers who just don't want to switch tools?

Robin Heinze:

I would guess more of the latter. I think web developers are pretty set up with tools already, but this is a nice... Especially since you're seeing a lot more cross-platform, monorepo, web native type of projects that start with React Native developers building web rather than the other way around. This is a way for React Native developers to keep using their preferred tools.

Jamon Holmgren:

Speaking of monorepos, thanks for that, that brings us to our next one.

Robin Heinze:

Set you right up on a pedestal there. Set you right up.

Jamon Holmgren:

Exactly. I can just... Up on a tee. I can hit it. Ignite 7.9 and 7.10, which is out now, but that's a smaller release. 7.9 specifically supports PNPM and monorepos, because now it supports symlinks, as long as you don't use Expo. If you use Expo, then sorry, you're on your own. But if you are using Ignite directly without passing in the --expo flag, it will automatically come with symlink support, which allows you to use PNPM instead of Yarn, because that uses symlinks. Much faster than Yarn. And I kind of like it, but also it's not as standard, so you may run into some edge cases and stuff. But we actually did quite a bit of work to make Ignite work with that, and that also is very helpful if you're doing a monorepo like Nx or Lerna or any of those other options out there. I have publicly been kind of anti...

Robin Heinze:

Mm-hmm. I wish it had been around. I wish it had been around when we were building a monorepo and were fighting against Metro.

Jamon Holmgren:

Exactly. Now, some of this actually came... we actually used one of the tools from rnx-kit, which we just talked about in React Native Radio 227 with Tommy Nguyen and Adam Foxman, Better React Native Tooling. They're working on rnx-kit, and part of that is the symlink support, so check out RNR 227 to hear more about that. But Ignite 7.9 now has support for symlinks, and more coming as well, but that's kind of the big one right now.

Robin Heinze:

Fun fact, at least three of the most recent Ignite releases are courtesy of yours truly, and not in a good way. I kept having to fix...

Jamon Holmgren:

You should have just stopped there.

Robin Heinze:

I kept-

Jamon Holmgren:

You should have just taken credit.

Robin Heinze:

I should have. I kept having to fix stuff that I broke, so...

Jamon Holmgren:

That's how I inflate my commit count as well. Revert. Revert. It was totally an understandable problem. I've done it many times myself. The last thing we have here is called glassmorphism. What's that?

Robin Heinze:

You want the wrong answers only?

Jamon Holmgren:

Sure.

Robin Heinze:

Because it sounds like... I don't know. It's... No, nevermind. I don't have anything. I thought there was going to be something funny there that just didn't materialize.

Jamon Holmgren:

There has to be.

Robin Heinze:

It sounds like transfiguration. It's like what wizards learn how to do in order to make glass change shape. I don't know.

Jamon Holmgren:

You're right. Yeah. There is something there. I don't know what, I'm not smart enough to figure... Gant's going to be... he's going to be listening to this episode, and he'll have some hilarious joke in his mind, so everybody in the audience, just imagine Gant making a funny joke, and laugh, and then we'll move on.

Robin Heinze:

Sounds good.

Jamon Holmgren:

But really, what is glassmorphism? what are we talking about here?

Robin Heinze:

As far as I know, it's a cool little UI style that looks like a pane of frosted glass moving over top of something.

Jamon Holmgren:

That goes over the top of something?

Robin Heinze:

Yeah.

Jamon Holmgren:

Yeah. That's pretty cool. And that's React Native Skia.

Robin Heinze:

Right. React Native Skia is library by Shopify, right?

Jamon Holmgren:

Mm-hmm.

Robin Heinze:

And it implements the Skia graphics library, which I didn't know a ton about until reading up for this, but it powers a lot. It's the graphics engine behind Chrome, ChromeOS, Flutter.

Jamon Holmgren:

Mm-hmm.

Robin Heinze:

Relevant. Flutter, Firefox. So, it's a pretty big deal.

Jamon Holmgren:

It's a very cool library. There's a lot of power there.

Robin Heinze:

You can now create a glassmorphism in React Native using React Native Skia.

Jamon Holmgren:

We're definitely going to be doing an episode about React Native Skia. Maybe we'll have some of the maintainers on or something like that and talk more about it and see what's going on there. I do also have some plans on React Native Live. Little shout out for React Native Live, go to rn.live, which is my Twitch stream.

Robin Heinze:

It's very fun.

Jamon Holmgren:

Go check that out, because I am going to also have one of the maintainers on there as well, in one of these days, so go check that out.

Robin Heinze:

I love hanging out, listening, and watching React Native Live. I'll put it on the background.

Jamon Holmgren:

I appreciate that.

Robin Heinze:

I don't always...

Jamon Holmgren:

Chat?

Robin Heinze:

Enter the chat. Sometimes I do. If I'm working on something else, I sometimes don't, but I just like to have it on, because it's... I don't know. It's just watching you do open source a lot or talking to somebody. It's casual. It's not...

Jamon Holmgren:

Yeah. It's super casual. Yeah. Basically, my philosophy there is if I have to prepare too much for it, then it's too much work, and I'm not going to do it, so...

Robin Heinze:

Well, you're doing it twice a week. You can't be giving...

Jamon Holmgren:

Exactly.

Robin Heinze:

Basically conference talk twice a week.

Jamon Holmgren:

It's like three hours twice a week, six hours, and I'm not going to prep for that. The prep is in the stream.

Robin Heinze:

Literally. That's part of the stream.

Jamon Holmgren:

It's part of the stream.

Robin Heinze:

That's the whole point.

Jamon Holmgren:

"What are we talking about? How do I get to... Okay." It's a lot of that, but it's fun. I love it. It's so much fun. All right. Well, you know what? This meandering episode, of course, brought you by Infinite Red, and if you'd like to nerd out more about React Native, check out, of course, my Twitch stream. You can also go to youtube.infinite.red and see the same stream. You can join our Slack community, community.infinite.red. We have almost 2,000... I think it's 1,992, or something like that, React Native developers in the React Native channel in there, plus a lot more in other channels, but it's primarily a React Native community. Where can people find you to complain about your take on Flutter, Robin?

Robin Heinze:

I will be staying far away from Flutter, but you can find me on Twitter at @robin_heinze.

Jamon Holmgren:

And you can find me @jamonholmgren. You can find our Twitter for the show @ReactNativeRdio. As always, thanks to our producer and editor, Todd Werth, our assistant editor and episode release coordinator, Jed Bartausky, our social media coordinator, Missy Warren, our designer, Justin Huskey, and our guest coordinator, Derek Greenberg. All those people work at Infinite Red and have other jobs, by the way. They're taking time out of their busy days to produce this episode, and we really, really appreciate it. Thanks to our sponsor, Infinite Red. Check us out at infinite.red/react-native. Thanks to you listening today. Make sure to subscribe. Make sure to send this to a friend who loves Flutter or doesn't, either way. This isn't even about Flutter. I don't know why I'm saying that. A reminder that Infinite Red is hiring React Native engineers. If you're a senior level React Native engineer located in the US or Canada, go to careers.infinite.red. We'll see you all next time.