Could you introduce your app in a few sentences?
Memorize By Heart is a tool used to memorize any text: scripture verses, poems, quotes, learning a language, song lyrics, script lines, speeches, business talks, etc. It’s like Batman’s toolbelt for a faster and more efficient memorization. One tool (out of many) worth mentioning is the recite feature - it lets you recite the text back to the phone, doing speech calculations in the process, and then gives you a score.
My brother Cameron and I started it as a side project after writing a couple previous React Native apps. I am constantly looking for new ideas and new problems to solve. Both Cameron and I were trying to memorize a long document (~700 words) and knew we needed help. The other apps or solutions out there were not that good, so we wrote our own.
After releasing, I added our product on product hunt; it received the 5th position for the day. The next day, Memorize by Heart was #14 on top education apps in the app store. Lifehacker even wrote an article about it.
As of writing, it’s only an iOS app - but Android is coming within this month.
What made you decide to use/switch to React Native?
Have your tried other cross platform technologies before using React Native?
I’ve only tried learning Unity. It’s pretty overwhelming for someone new coming in.
What has your experience been working with React Native in terms of app performance, have you noticed any impacts?
The performance issues that I ran into stemmed from 3 places:
- Unnecessary component re-renders. IMO, this was the easiest to pin down and solve. When I click a button, I only want the effect to rerender, not the entire page. To solve this, it included adding
PureComponents, extracting the features or
Views into their own component, and rearranging the app around.
- Animations. Pro tip - use
nativeDriver: truewhen possible. It takes the weight off of the JS portion and hands it over to the native hardware. It’s way smoother and you’ll mostly get the 60 FPS needed.
- Building out a large view on page transition. This problem still exists in my app. When there is a super large memorization full of hordes of paragraphs, the tools become slow to build on load and slow to respond. Some memorization tools need each word to have an input, styles, and event handlers; building a thousand of those takes a couple seconds. Sometimes the answer is to add a loader. Other times, we just need to think through the Big O notation.
Other than that, React Native performs fine. Those problems listed are more my own coding problems and not React Native.
How has adopting React Native affected developer productivity?
Two words - easy and fast. Not only does React Native have built in components and APIs to use, the community has an increasing amount of libraries to help out the development process. Xcode is a nightmare to use, but with React Native, I use it sparingly.
Which tools, libraries and frameworks are part of your development process with React Native?
Honestly, React Native has the majority of tools built in. Apart from those, I use Atom for my IDE, react-navigation for navigation, react-native-vector-icons and react-native-elements for my go-to libraries. For Memorize By Heart, we use react-native-voice to handle the speech to text. Expo is a great tool to mention as well, even though I’m not using it for Memorize By Heart. I’ve used Expo for previous projects and it is a powerful tool combined with React Native
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
The documentation and Stack Overflow are a great combination. I learn best when I do things on my own. I read the documentation on how to get started and then power through. When I get stuck, Stack Overflow is like a loyal dog that always has your back. If I need to optimize, I go back to the docs. When I read books or watch tutorials, I usually get bored and fall asleep. I know not many people like that approach since it takes persistence and resilience, but I promise it’s faster and you learn more. I recommend teaching what you’ve learned to others as well. That works great with my brother as we teach each other new things we’ve learned.
What are some things that you don’t like about React Native or that need to be improved?
Nothing really. Most things I need, React Native has. Just keep up with native and I’ll be happy :)
Anything else you would like to mention?
We love positive and negative feedback, especially from other developers. Feel free to use our app for optimum memorization.
We have many new features planned for Memorize by Heart. Here are just a few:
- Spaced repetition. This will require push notifications.
- 5 more memorization tools. Maybe gamify them more.
- A memorization “store” to upload and download other people’s memorizations; more of a community feel.
- Make the app free(mium) with in app purchases