A React Native mobile application for exploring countries around the world using the RestCountries API.
This project demonstrates modern React Native development with TypeScript, Redux Toolkit, and performance optimizations.
Country Explorer allows users to:
- Browse all countries worldwide
- Search countries by name
- Filter countries by region
- View detailed country information
- Navigate between border countries
- Explore countries on an interactive world map
The application is built using modern React Native architecture with a focus on performance and maintainability.
The project follows a feature-based modular architecture.
src
│
├── api
│ └── countriesApi.ts
│
├── components
│ ├── CountryCard.tsx
│ ├── RegionFilter.tsx
│ ├── SearchBar.tsx
│ └── SkeletonLoader.tsx
│
├── features
│ └── countries
│ ├── CountryListScreen.tsx
│ ├── CountryDetailScreen.tsx
│ ├── MapScreen.tsx
│ ├── countriesSlice.ts
│ └── countriesService.ts
│
├── navigation
│ └── RootNavigator.tsx
│
├── hooks
│ ├── useCountries.ts
│ └── useTheme.ts
│
├── store
│ └── store.ts
│
├── utils
│ ├── helpers.ts
│ ├── storage.ts
│ └── theme.ts
│
└── App.tsx
Data is fetched from the RestCountries API.
https://restcountries.com/v3.1/all
The API provides:
- Country name, population, region, capital
- Languages, currency, borders
- Geographic coordinates, flag images
No API key required.
Main screen displaying all countries with:
- Search by name
- Filter by region
- High-performance FlatList rendering
Each item shows:
- Country flag
- Country name
- Population
- Region
Comprehensive country information:
- Flag, official name, capital
- Population, region, subregion
- Languages, currency, area
- Border countries (clickable for navigation)
Uses React Native Maps to display countries:
- Interactive map markers
- Region zooming
- Marker selection
- Navigation to country details
- FlatList virtualization for large datasets
- Memoization with React.memo, useMemo, useCallback
- Efficient data loading and caching
- Optimized re-rendering strategies
- Skeleton loading states for better UX
The application uses MMKV storage for local caching:
- Fetch country data from API
- Store locally for offline access
- Load cached data when offline
Benefits:
- Instant app startup
- Offline browsing
- Reduced API calls
Clone the repository:
git clone https://github.com/yourusername/country-explorer.git
cd country-explorerInstall dependencies:
npm installRun iOS:
npx pod-install
npm run iosRun Android:
npm run androidCore
- React Native
- TypeScript
State Management
- Redux Toolkit
Navigation
- React Navigation
Networking
- Axios
Storage
- MMKV
Animations
- React Native Reanimated
Testing
- Jest
- React Native Testing Library
Run tests:
npm testRun tests in CI mode:
npm run test:cinpm start- Start Expo development servernpm run android- Run on Androidnpm run ios- Run on iOSnpm run prebuild- Clean prebuildnpm test- Run tests in watch modenpm run test:ci- Run tests in CI modenpm run lint- Run ESLint
The Country Explorer app has been implemented with core features including country browsing, search, filtering, and detailed views. The app includes theme support (light/dark mode), skeleton loading states, and optimized performance features.
Built as a demonstration of modern React Native development practices and architecture.
MIT License


