Mobile Apps · MBC-18

Intermediate React Native

Intermediate React Native is a follow-on course using Expo that covers layouts for every screen size, reusable components and themes, state with useReducer and Context, validated forms with React Hook Form and Zod, and nested drawer, tab and stack navigation. It suits developers who have built a first React Native app, and you leave able to build a news app connected to a Node.js API.

Updated
From 5,850 THB / person 6,500 −10% excl. VAT 7% · group rates available
PDFDownload the course outline
  • Duration18 hours · 3 days
  • FormatOnsite / live online
  • Next roundOn request
  • CertificateIncluded

Course overview

Once you can build a first React Native app, the next challenge is making it look good on every screen size, splitting it into reusable components, handling state that is getting more complex, building forms that really validate data and setting up layered navigation without confusion. These skills are the gap between a sample app and one that is ready for real users.

This new edition builds on Basic React Native with Expo and uses Expo SDK 57, React Native 0.86 and TypeScript. Learners design advanced layouts, create reusable components and themes, manage state with useReducer and Context, build forms with React Hook Form and Zod, combine drawer, tab and stack navigation with Expo Router, load data from an API, store data on the device and use the camera and location, finishing with a news app workshop connected to a Node.js API. (3 days, 6 hours per day, 18 hours in total, Intermediate level.)

What you’ll gain

  • Design advanced layouts with Flexbox and positioning that adapt to screen sizes on Android and iOS
  • Build reusable components and themes, and pass data between parent and child in a structured way
  • Manage complex state with useReducer and share app-wide data with Context
  • Build forms with validation and error messages using React Hook Form and Zod
  • Set up nested drawer, tab and stack navigation with Expo Router
  • Load data from a REST API through custom hooks and store data on the device
  • Use the device camera, images and location through the Expo SDK
  • Build a news app with login, category views and search through a Node.js API

Who this course is for

  • Learners who have completed Basic React Native with Expo or can already build a first React Native app
  • React web developers who want to build more complex Android and iOS apps
  • Developers who want to strengthen their skills before Advanced React Native with Expo
  • Students and anyone who wants to build mobile apps with JavaScript and TypeScript

Prerequisites

  • Completion of Basic React Native with Expo, or able to create an Expo project and use core components and basic navigation
  • Able to write JavaScript or TypeScript and understand components, props and useState
  • Familiar with REST APIs and the JSON data format
  • An Android phone or iPhone for testing (building for iOS requires a Mac with Xcode)

Curriculum

Course Details

This course is a 2026 edition that replaces the previous Intermediate React Native course and sits between Basic React Native with Expo and Advanced React Native with Expo. It has been rewritten for Expo SDK 57, React Native 0.86 and Expo Router. It runs for 3 days, 6 hours per day (18 hours in total, 09:00-16:00), as lectures alternating with labs and workshops throughout. Intermediate level. It suits people who can build a first React Native app and want to tackle more complex apps. Learners practise layouts, components, state, forms and layered navigation before combining them in a news app connected to a Node.js API, and take home a lab guide and source code.

Day 1 Layouts, Components and State

Section 1: Lab: Reviewing Core Components and the Expo Project

  • Create a TypeScript project with create-expo-app and explore the file structure
  • View, Text, expo-image, Pressable, Alert and StyleSheet
  • Platform-specific code with Platform.select and .ios or .android files
  • Fast Refresh and debugging with React Native DevTools
  • Lab: a profile screen that renders differently per platform

Section 2: Lab: Advanced Layout Design

  • More complex Flexbox: flex, wrap, gap and alignment
  • Absolute and relative positioning for badges, floating buttons and overlapping images
  • Support different screen sizes with useWindowDimensions and landscape
  • Safe area insets and KeyboardAvoidingView
  • Lab: a dashboard screen that adapts to screen size

Section 3: Lab: Welcome and Onboarding Screens

  • Add a Thai font with expo-font and configure the splash screen
  • Swipeable onboarding pages with a horizontal FlatList and page indicator
  • Gradient backgrounds and illustrations
  • Basic animation with the React Native Animated API
  • Remember that the user has seen onboarding and skip it next time

Section 4: Lab: Reusable Components and Themes

  • Design props with TypeScript, defaults and children
  • Parent-child relationships and passing callbacks back up
  • Components with variants such as primary buttons, secondary buttons and cards
  • A central theme for colours, spacing and type, with dark mode via useColorScheme
  • Lab: a small UI kit for the app

Section 5: Lab: Managing State with useReducer and Context

  • Lift state up to the parent and coordinate several components
  • Validate state changes and write reusable state updates
  • useReducer: reducers, actions and dispatch
  • Context for app-wide data such as the theme and the signed-in user
  • Lab: a shopping cart with useReducer and Context
Day 2 Forms and Layered Navigation

Section 6: Lab: Input and Form Components

  • TextInput variants: email, password, numeric and multi-line
  • Switch, list pickers and DateTimePicker for choosing dates and times
  • Modals and a simple bottom sheet with custom display directions
  • Handle focus, keyboard buttons and dismissing the keyboard
  • Lab: an appointment form with date and time selection

Section 7: Lab: Validation with React Hook Form and Zod

  • Why use a form library, and how controlled inputs work
  • Define rules with a Zod schema and share the same types with TypeScript
  • Show error messages under fields and a submitting state
  • Extract field components for reuse in other forms
  • Lab: validated login and registration forms

Section 8: Lab: Navigation with Expo Router

  • Review file-based routing and _layout files
  • Stack: customise headers, navigation bar buttons and modal screens
  • Pass parameters between screens and read them with useLocalSearchParams
  • Tabs with icons, badges and hidden tabs
  • Group screens with groups and redirect based on sign-in state

Section 9: Workshop: Combining Drawer, Tabs and Stack

  • Install the drawer for Expo Router and the required libraries
  • Structure an outer drawer, tabs in the middle and stacks for detail screens
  • Build drawer menus and per-tab headers without doubling up
  • Open new screens from the drawer and pass values across layers
  • Test that it works correctly on Android and iOS
Day 3 Data, Device Features and a News App

Section 10: Lab: Loading API Data with Custom Hooks

  • Call a REST API with fetch and async/await using typed data
  • Build a custom hook for data, loading and error states
  • Cancel outdated requests with AbortController
  • Paging with onEndReached and pull to refresh
  • Lab: a product list that loads more as you scroll

Section 11: Lab: Storing Data on the Device

  • Store settings and favourites with AsyncStorage
  • Store tokens securely with expo-secure-store
  • Load saved data at launch and show a screen while waiting
  • Lab: remember the sign-in state and the chosen theme

Section 12: Lab: Camera, Images and Location

  • Request permissions and explain the reason to users properly
  • Pick images from the gallery or take photos with expo-image-picker
  • Read the current location with expo-location
  • Simple on-device alerts with local notifications
  • Lab: an edit-profile screen with a photo and location

Section 13: Workshop: A News App Connected to a Node.js API

  • Prepare a REST API with Node.js and Express
  • Register and log in through the API and store the token
  • Show the latest news by time and news by category
  • News detail screen, news search and saved stories
  • Structure the app with the drawer, tabs and stacks built earlier

Section 14: Testing on Real Phones and Next Steps

  • Expo Go versus a development build, and when to use each
  • Build an Android test app with an EAS Build preview profile
  • Fix common problems on Android and iOS
  • Present your work and the path to the advanced course

Schedule & training options

For individuals — public rounds

No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770

For organisations — in-house / private

  • Tailor the content to your team’s tools and projects
  • Your dates, at your office or live online
  • Quotation with tax ID for procurement
Corporate training quote

Instructors

Frequently asked questions

How does useReducer differ from useState, and when should you use it?

useState suits values that change simply, such as text in an input or an open or closed flag. useReducer gathers state changes into a reducer function that takes the current state and an action and returns the new state, while the component just calls dispatch with the action type. It suits state with several related values or many ways to change, such as a shopping cart, makes the logic easier to check and test, and combines with Context to share data across the app.

How do you pass data between parent and child components in React Native?

A parent passes data down to a child through props, such as text, images or styles, typed with TypeScript, so one component can be reused with different data. To send data back up, the parent passes a callback function as a prop and the child calls it with the value, for example when a button is pressed or text is typed. The state then lives in one place, the parent, and every child shows the same data.

How do you combine a drawer, tabs and stacks in one app with Expo Router?

Expo Router builds navigation from the folder structure, and each folder's _layout file sets which navigator it uses. A common approach is a drawer as the outer layer for the main menu, a tabs folder inside it, and a stack in each tab for detail screens. Pass values between screens as parameters read with useLocalSearchParams, and decide which layer shows the header so headers do not double up.

Why does this course use Expo instead of the React Native CLI?

The React Native documentation recommends starting new apps with a framework such as Expo, because it provides file-based routing, maintained libraries for device features and build tools that cut down native project setup. Learners can spend more time writing the app and can still add native code later when needed. What you learn about components, state and layout applies to React Native in any setup.

Who is the Intermediate React Native course for, and what should I know beforehand?

It suits anyone who wants to build Android and iOS apps with JavaScript or TypeScript and take their React Native skills a step further before the advanced level. You should have completed Basic React Native with Expo or have equivalent knowledge: creating an Expo project, using the core components and setting up basic navigation, plus familiarity with REST APIs and JSON.

What will I be able to do after the Intermediate React Native course?

You will be able to build layouts for different screen sizes, create welcome and onboarding screens, write reusable components and themes, manage state with useReducer and Context, build validated forms with React Hook Form and Zod, combine a drawer, tabs and stacks, load API data, store data on the device, use the camera and location, and build a news app connected to a Node.js API. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.