Need advice about which tool to choose?Ask the StackShare community!

Create React Native App

97
204
+ 1
0
Expo

716
676
+ 1
66
Add tool

Create React Native App vs Expo: What are the differences?

Create React Native App and Expo are two popular tools used in mobile app development with React Native. They both aim to simplify the process of building cross-platform mobile applications using React Native. Let's explore the key differences between Create React Native App and Expo.

  1. Configuration and Setup: Create React Native App is a command-line tool that helps set up a new React Native project with minimal configuration. It offers a simple and lightweight approach, giving developers more control over the project setup and dependencies. On the other hand, Expo is a comprehensive development platform that comes with a suite of pre-configured tools and libraries out of the box. It provides a quick and streamlined setup, allowing developers to get started with React Native development without the need to configure multiple dependencies.

  2. Development Workflow: Create React Native App relies on the React Native CLI for building and running the app, making it more suitable for developers who prefer a traditional development workflow. It provides flexibility to add native modules and customize the native code if needed. Expo, on the other hand, offers a managed workflow that abstracts away much of the native development complexities. It allows developers to build and test apps using a web-based development environment, and some features may require using Expo's APIs.

  3. Access to Native Modules: In Create React Native App, developers have direct access to the native code, enabling them to use custom native modules or third-party libraries that might not be available through JavaScript. This gives developers more flexibility and control over the app's capabilities. Expo, on the other hand, comes with a limited set of native modules out of the box. While it provides a wide range of built-in functionalities, developers may face limitations when trying to use certain custom native modules not supported by Expo.

  4. Ejecting: Create React Native App allows developers to "eject" the project, which means moving away from its minimal configuration and exposing the underlying native code. This step is irreversible, but it grants full control over the native modules and build configurations. Expo, on the other hand, doesn't support full ejecting. While it offers the "ExpoKit" option to customize some native modules, developers cannot fully eject and modify every aspect of the native code.

  5. Publishing and Distribution: Expo offers additional benefits for distribution, providing over-the-air (OTA) updates and easy sharing of app builds with stakeholders without going through app stores. Create React Native App requires standard app store deployment for updates and distribution.

In summary, Create React Native App offers more flexibility and control, making it suitable for projects that require extensive customization and native module integration. On the other hand, Expo provides a more streamlined development experience and is an excellent choice for rapidly building and testing apps with a rich set of built-in features and ease of distribution.

Advice on Create React Native App and Expo
Needs advice
on
ExpoExpoReact NativeReact Native
and
ReduxRedux
in

Hello guys, I am new here. So, if I posted without specific guidelines, please ignore.

Basically, I am an iOS developer and developing native apps for the last three years. Recently, I started learning React Native to develop apps for both platforms. If anyone out there knows any useful resources that will become a better react native developer.

#newbie

See more
Replies (1)
Javier Silva Ortíz
Senior Full Stack Developer at Aleph Engineering · | 6 upvotes · 305.8K views
Recommends
on
ReduxRedux

Well, the first resource I would recommend you is my upcoming book by Packt Publishing, "Professional React Native", but it's due late January next year :) . Now jokes aside (the book's real by the way :) ), the easiest way to build a iOS/Android/Web app with React Native is to do: npm install -g expo-cli expo init some-project cd some-project expo eject

You might have heard of Expo, but trust me, stay away from it. Expo highest value is that it's an already pre-configured 3 platforms environment, but if you don't eject then you're vendor-locked to what Expo has to offer in iOS and Android, which is very poor compared to going full React Native on these platforms, they can't even handle Google Sign In properly and by the way, even if your app is 10 lines of code your app size will be over 40 MB if you don't eject, yep it's that bad, plus the performance is regular and the loading times slow, not to mention that you're stuck with their build service which the free tier makes you wait for hours for a free build slot. It's important to note that when ejecting you don't lose the Web, you simply do expo start --web to start your dev environment and expo build:web to build a static website that you can serve with any web server. Regarding state management, don't bother with "lifting state up" philosophies mixed with Context API to manage your state, lifting state is a great pattern and helps your codebase, Context is great to avoid prop-drilling, but NEVER mix them to achieve app-wide state management, for that, simply go for Redux or MobX, the hype is all about Redux, but I consider MobX far better in many aspects. However, as you're getting new into this I would recommend you start with Redux AND PLEASE grab yourself npm install @manaflair/redux-batch so that you can batch updates and don't bring your app to a crawl. Forget that "connect HOC" thing with React-Redux, don't bother for a second with it, go with Hooks and useSelector and useDispatch and the likes, it will make your code SO much cleaner and smaller. Adopt clean and new Hooks philosophy, avoid writing class components as much as possible and write function components augmented with Hooks.

See more
Decisions about Create React Native App and Expo

Our stack roughly divides into three major components, the front-end, back-end and the data storage.

For the front-end, we have decided to go with React Native via Expo. This allows us to target both Android and iOS with a single codebase. Expo provides "managed workflows" and an SDK that will simplify development and deployment.

For the back-end, we have decided to use Python. Python is the language of choice for machine learning (ML). It has extensive support for traditional ML algorithms (e.g. random forests) via Scikit-Learn and the SciPy ecosystem. On top of this, our industry partner has provided us their current solution written in Python. We decided to expose the back-end as a REST API using FastAPI. This allows us to nicely separate concerns from the rest of the codebase. FastAPIs use of static type hints, validation with Pydantic, and automated documentation allows us to build better APIs faster.

For data storage we decided to use a MongoDB Atlas, a NoSQL database. We decided to use a NoSQL database because we need to store large amounts of data (e.g data from the wearable IMUs). Moreover, due to the ever changing nature of a startup we require flexibility. NoSQL databases are schema-free which enables us to modify our schema as we see fit.

We plan on using GitHub Actions (GA) to orchestrate our CI/CD. Given GAs broad support of languages and workflows, it's hard to go wrong with this decision. We will also be using GitHub for version control and project management, so having everything in one place is convenient.

The major components of our CI/CD for the backend will consist of black for autoformatting, flake8 for linting, pytest for unit-testing, and mypy for static type checking and codecov for coverage reporting. We plan to use separate Docker containers to package the back-end and front-end components and use Docker Compose to launch the app. This allows us to better separate concerns, manage dependencies, and ensure our app is deployable anywhere.

See more
Manage your open source components, licenses, and vulnerabilities
Learn More
Pros of Create React Native App
Pros of Expo
    Be the first to leave a pro
    • 15
      Free
    • 13
      Hot Reload
    • 9
      Easy to learn
    • 9
      Common ios and android app setup
    • 6
      Open Source
    • 6
      Streamlined
    • 5
      Builds into a React Native app
    • 2
      PWA supported
    • 1
      Plugins for web use with Next.js

    Sign up to add or upvote prosMake informed product decisions

    What is Create React Native App?

    Create React Native App allows you to work with all of the Components and APIs in React Native, as well as most of the JavaScript APIs that the Expo App provides.

    What is Expo?

    It is a framework and a platform for universal React applications. It is a set of tools and services built around React Native and native platforms that help you develop, build, deploy, and quickly iterate on iOS, Android, and web apps.

    Need advice about which tool to choose?Ask the StackShare community!

    What companies use Create React Native App?
    What companies use Expo?
    Manage your open source components, licenses, and vulnerabilities
    Learn More

    Sign up to get full access to all the companiesMake informed product decisions

    What tools integrate with Create React Native App?
    What tools integrate with Expo?

    Sign up to get full access to all the tool integrationsMake informed product decisions

    What are some alternatives to Create React Native App and Expo?
    React Native
    React Native enables you to build world-class application experiences on native platforms using a consistent developer experience based on JavaScript and React. The focus of React Native is on developer efficiency across all the platforms you care about - learn once, write anywhere. Facebook uses React Native in multiple production apps and will continue investing in React Native.
    Create React App
    Create React apps with no build configuration.
    JavaScript
    JavaScript is most known as the scripting language for Web pages, but used in many non-browser environments as well such as node.js or Apache CouchDB. It is a prototype-based, multi-paradigm scripting language that is dynamic,and supports object-oriented, imperative, and functional programming styles.
    Python
    Python is a general purpose programming language created by Guido Van Rossum. Python is most praised for its elegant syntax and readable code, if you are just beginning your programming career python suits you best.
    Node.js
    Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
    See all alternatives