Could you introduce your app in a few sentences?
My app allows you to search the official Korean government’s (the National Institute of Korean Language) Korean learners’ language database. It's available in ten languages. It offers a lot of useful info such as pronunciation, parts of speech, usage examples, origin language info, idioms, related words, etc. They have so much great language information, but the website is clunky and there were no apps available.
It’s available on both iOS and Android
I made it alone as a personal project. I was bummed that there was no app available when I was studying Korean, so I decided I was going to make one myself.
What made you decide to use/switch to React Native?
Since I had already had prior experience with React, it seemed like a no-brainer to go ahead with React Native.
How did you transition to React Native?
I started from only knowing basic React, and built the app from the ground up. It was extremely daunting at first. Just figuring out where and how to start was a struggle. It was really tempting to keep telling myself that it would be better to do smaller projects and that I needed the practice first. That seemed like a slippery slope to never actually starting, so I just dove right in.
Have your tried other cross platform technologies before using React Native?
No, nothing before React Native.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
It felt like I was constantly hitting walls and running into new issues. It was a lot of frustration followed by catharsis once you eventually finally solve the issue at hand.
Early on, I had issues from upgrading to Xcode 10 after I’d already started, and trying to figure out how to get my project to build properly. Luckily the React Native community is quite active and I was able to figure out how to run the project in Xcode using the legacy build system.
I was also forced to quickly become familiar with manually linking libraries and figuring out exactly where linking issues were taking place.
I also ran into the performance bottleneck of the single JS thread and the RN bridge. With my app, I’m doing a lot of client-side parsing of data. I was originally parsing way too much at once, so I ran into huge performance hits and the UI would be unresponsive during this. I solved this with a combination of pagination and React Native’s
InteractionManager. I had to figure out exactly what was needed for each moment and parse only exactly that much. Only after the user has received control would I either start parsing more data in chunks in the background, or allow the user to choose to load more.
How has adopting React Native affected developer productivity?
As I mentioned earlier, I originally expected to have to make the Android and iOS apps separately, so just by bypassing that, React Native has been wonderful.
The sheer number of libraries / components that the RN community has made also make development that much easier.
Which tools, libraries and frameworks are part of your development process with React Native?
I’m using VScode which I really enjoy.
Mobx / mobx state tree has also been much more pleasant to work with compared to redux.
I also started using Reactotron, which I would wholeheartedly recommend to everyone. It just makes debugging so much easier with detailed logging, error tracing, and being able to keep track of the app state.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
Nothing in particular. I mostly would first start with any official docs or examples, and just googling. Whenever I’m stuck, just searching usually leads to articles, or sometimes Youtube videos that help explain whatever concept I might be stuck on. Being able to articulate issues into searches is vital.
What are some things that you don’t like about React Native or that need to be improved?
Breaking changes with every new release or the occasional package update. This isn’t exclusive to React Native, but it definitely is prevalent.
Anything else you would like to mention?
I’d recommend anyone who wants to jump into RN development just take the plunge. Don’t wait until you feel ready, or after you’ve done this or that project first. With every problem, unknown, or error that I faced, I came out having learned so much and became a better developer because of it. Don’t forget that every problem is a learning opportunity, and it helps if you start approaching them as such. Just take it task by task, and try not to get intimidated by how daunting a problem may seem.
I’d also recommend to any learners to take on a project that you’re passionate about or at least have a general interest in. I moved to Korea a few years ago to study the language, then started to study programming. I decided that I was going to make an app that I wish had existed during my Korean studies. If I continued to just do generic project after generic project, I probably would have burnt out long ago.
I made the first commit on my app at the end of June, and had the initial release in October. I was working part-time and spending the rest of my free time (mostly) programming and learning in the process. I’m now currently employed as a React Native developer full-time at a tech company here in Korea. To anyone just starting their path towards self-teaching just keep at it, find a project you care about, and to just try your best. No developer is perfect, and nobody knows everything.
If anyone wants to reach out, they can find me on github