I also don't want to hide that React Native is a fast moving target,
we got new versions being published almost every month.
Breaking changes do happen and of course, I'll do my very best to keep this course updated to let you
know about changes and how to adjust your code but sometimes, you just have to go back to an app you
built six months ago and you have to change something there because something changed in the latest
version of React Native
and in order to continue working on your app, you need to change something in the code which used to
work before,
that's normal,
that will happen, not all the time, not every month but it will happen. Also in React Native,
you typically have a high dependency on third-party packages.
Now the good thing is when working with expo, that's only partly true because expo already itself is
such a wrapper with a lot of cool features built in,
therefore you have a high dependency on expo when working with that but you don't have to find dozens
of other third-party packages to access the camera, to work with Bluetooth or anything like that.
If you're building a bareboned React Native app, that would be different,
there only a basic set of features is built right into React Native
and for most things that you want to add to your native app, you would have to reach out to other community
managed packages to make them work
and even with expo, we'll need a couple of third-party packages to have everything we want.
And that is something you have, you have that dependency and that of course means that if those packages
change or aren't maintained anymore, you have to find alternatives or you have to update your code,
so that's something you just also have to be aware of. And React Native simply also has some bugs, not
crucial ones,
you can build basically any app you want with React Native but sometimes, things just don't work as you
would expect them to work and you need to get creative, find workarounds and so on
and in this course I will also show you some of these strange things React Native has but in general,
when building React Native apps, you have to be willing to stay updated, to use Google, to dive into issue
discussions and to simply try things out. With expo you have a pretty smooth development experience
but still, the road can be bumpy from time to time. Now that might all sound pretty bad,
so shouldn't you learned React Native then? Well let's have a look at the alternatives.
Of course one alternative always is that you build real native apps with the Android framework for Java
or Kotlin or with Swift, ObjectiveC for iOS.
You can do that but of course the downside is you have to learn these languages and the huge advantage
of working in one project and sharing a lot of code will be totally lost. In React Native apps,
sure, you will probably need to adjust your code to the platform you're running on from time to
time but the vast majority of your codebase can be shared and can be reused without any adjustments.
If you're using the native platform languages, then you definitely have to work in two totally different
projects and you won't be able to reuse a lot of code. Alternative too is that you build a progressive
web app,
that's a normal web app that utilizes some features that make it look and feel like a mobile app but
it's not distributed through the app stores and it relies on users using a browser that supports the
features you're using and if that's not the case, your app doesn't run that well.
The third alternative is that you use Ionic or a similar solution, Ionic is tool or a framework that
allows you to build real native apps which you distribute through the app stores with web technologies. In
the end, Ionic takes a normal web app and wraps it into a native app, so it doesn't compile anything, it
just wraps it and that's a nice approach,
I like Ionic actually and it can be perfect for a lot of apps but of course, a possible downside is that
performance can be worse because you just have a wrapped web app,
you have no compiled native app and that's something you do have with React Native of course and since
we overall got tools and we can acquire knowledge that helps us overcome the challenges React Native sometimes
poses, React Native is an awesome way of building native apps. You can share a code, you get great performance,
you can distribute it through the app stores, that's pretty nice.
Now one side note, you also got alternatives like Flutter or Native Script, those alternatives follow
a similar approach as React Native does, you get a compiled app there, they simply use different programming
languages, different frameworks and attached, you'll find a link to a comparison video where I compare all
these alternatives in case you're interested in a bit of a deeper dive into that topic
there.