Skip to content

g-todorov/ReactNativeXStateExample

Repository files navigation

React Native with xState

This is an opinionated guide on how to orchestrate your React Native application with xState.

It is described in the following series:

1️⃣ Initial project setup
2️⃣ Navigation optimizations
3️⃣ Notification center
4️⃣ Authentication
5️⃣ Onboarding

Basic architecture

flowchart TB
    subgraph wrapper[" "]
        direction TB
        subgraph Root
            direction LR
            NavRef("fa:fa-cogs Navigation Ref") ---> AppM("App Machine")
            NavRef("fa:fa-cogs Navigation Ref") ---> RootNav("fa:fa-code Root Navigator")
            AppM("fa:fa-cog App Machine") <--useApp--> RootNav("fa:fa-code Root Navigator")
        end
        subgraph authenticating
            direction LR
            MAuthenticating("fa:fa-cogs Machine") <--useNavigator--> NavAuthenticating("fa:fa-code Navigator")
        end
        subgraph authenticated
            direction LR
            MAuthenticated("fa:fa-cogs Machine") <--useNavigator--> NavAuthenticated("fa:fa-code Navigator")
        end
        subgraph List
            direction LR
            MList("fa:fa-cogs Machine") <--useSelector--> SList("fa:fa-code Screen")
        end
        subgraph Home
            direction LR
            MHome("fa:fa-cogs Machine") <--useSelector--> SHome("fa:fa-code Screen")
        end
        subgraph SignIn
            direction LR
            SScreen("fa:fa-code Screen")
        end
    end
    Root --authenticatingNavigatorRef--> authenticating
    Root --authenticatedNavigatorRef--> authenticated
    authenticating -.sendParent.-> Root
    authenticating --signInActorRef--> SignIn
    authenticated --homeActorRef--> Home
    authenticated --listActorRef--> List
Loading

Working on the application

Note: Make sure you have completed the React Native - Environment Setup instructions till "Creating a new application" step, before proceeding.

Step 1: Start the Metro Server

First, you will need to start Metro, the JavaScript bundler that ships with React Native.

To start Metro, run the following command from the root of your React Native project:

# using npm
npm start

# OR using Yarn
yarn start

Step 2: Start your Application

Let Metro Bundler run in its own terminal. Open a new terminal from the root of your React Native project. Run the following command to start your Android or iOS app:

For Android

# using npm
npm run android

# OR using Yarn
yarn android

For iOS

# using npm
npm run ios

# OR using Yarn
yarn ios

If everything is set up correctly, you should see your new app running in your Android Emulator or iOS Simulator shortly provided you have set up your emulator/simulator correctly.

This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.

Step 3: Modifying your App

Now that you have successfully run the app, let's modify it.

  1. Open App.tsx in your text editor of choice and edit some lines.

  2. For Android: Press the R key twice or select "Reload" from the Developer Menu (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes!

    For iOS: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes!

Congratulations

You've successfully run and modified your React Native App!

About

Example React Native app architecture with xState 5.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published