• 6 min read
We made a decision to make some changes in React Native Starter. After the final changes, we realized that we made a new product. So now we want to tell you about a complete new React Native Starter. We know that a few years from now we will look back and develop some new ideas and make some new versions of React Native Starter. As we understand this is the only way to make the product better and better. We are always reevaluating our own decisions to follow the best practices. React Native is going to imply some big changes in the future and so do we. But for now, let us tell you what decisions we made during the big update and why we made them. We took a second look at the architecture and functionality. We managed to cut development time and thus the cost of a new mobile app. We strongly believe that this is the most important criteria for evaluating the necessity of the changes that were made. Each decision that we made was out of the intention of either reducing the numbers of critical errors or making the process of integration easier and faster.
We want to share with you the theoretical foundations of the decisions that we made. And of course, we want to remind you that we do appreciate your emails, comments and commits on GitHub. Thank you for your immense and thought-provoking feedback on the first version of the React Native Starter.
We try to provide as much scalable solution as possible. Using Expo in the first version caused some problems with comprehensive applications. Very large application builds (25+ MB), the lack of native modules and poor support are only a few examples of disadvantages of using Expo. Sometimes for developing a very complex app, you need to use the native code. And Expo doesn't give you the possibility to adjust your project with Objective-C or Java. Thanks to your feedback we decided not to use Expo in version 2.0. And the consequences of this decision is the loss of backward capability. In other words, this is a completely new React Native Starter.
To speed up the development as much as possible we added Plop generator. React Native Starter has a modular architecture (for more information visit our documentation). When you start developing your mobile app with a starter kit you probably want to add your custom components and modules. With Plop, all the required files and imports generated by the means of a single command. You can just type plop, give the answers to certain questions and that is it. You can create a new component or module in seconds using only one command. Sounds like magic, is it?
If you don’t like tests that you definitely should! One of the main goals of our starter kit is to help you to create a stable code as it can be. You have two options for writing tests. You can use either unit testing with Jest or Enzyme or you can use 2e2 tests with detox. Let's say a couple of words about each of them. Jest and Enzyme can make unit testing. It is libraries that test your components and functions by writing very simple unit tests. The Enzyme allows you to make snapshot testing. If you are not familiar with this type of testing you can read about it here
2e means end to end testing. Application is tested layer by layer and interface by interface etc. You test it separately to see a comprehensive UX image. You have an option to write user stories. Let us give you an example. The test for login process contains five steps:
These tests are written using detox jest-wrapper, an app is opened in the simulator and tested against your stories. If you do it this way you will be able to catch many user-interface issues.
React Native Starter has a modular architecture that helps you speed up the development process and support scalable applications. Starter Kit is built around Redux and thus helps you to reason about the state of your application. As a consequence, you create easily maintainable and error-free programs. For more information please visit our documentation on architecture
What are the plans for the future? We want to analyze the feedback from the community. We expect lots of new insights to make more changes in the future. Plus we want to implement some changes that React Native itself will have in the future.
Also, we want to have a collection of mobile apps built on top of our product. We going to write some case studies so you going to hear from us in the near future.