React
1 Introduction to React
1-1 What is React?
1-2 History and Evolution of React
1-3 Key Features of React
1-4 Setting Up the Development Environment
2 JSX and Components
2-1 Introduction to JSX
2-2 Writing JSX Syntax
2-3 Creating Components
2-4 Functional vs Class Components
2-5 Props and State
3 React State Management
3-1 Understanding State
3-2 Managing State in Functional Components
3-3 Managing State in Class Components
3-4 Lifting State Up
3-5 Context API
4 React Hooks
4-1 Introduction to Hooks
4-2 useState Hook
4-3 useEffect Hook
4-4 useContext Hook
4-5 Custom Hooks
5 React Router
5-1 Introduction to React Router
5-2 Setting Up React Router
5-3 Route, Link, and NavLink
5-4 Nested Routes
5-5 Programmatic Navigation
6 Handling Events in React
6-1 Introduction to Events
6-2 Handling Events in Functional Components
6-3 Handling Events in Class Components
6-4 Synthetic Events
6-5 Event Bubbling and Capturing
7 Forms and Controlled Components
7-1 Introduction to Forms in React
7-2 Controlled Components
7-3 Handling Form Submission
7-4 Form Validation
7-5 Uncontrolled Components
8 React Lifecycle Methods
8-1 Introduction to Lifecycle Methods
8-2 Component Mounting Phase
8-3 Component Updating Phase
8-4 Component Unmounting Phase
8-5 Error Handling
9 React and APIs
9-1 Introduction to APIs
9-2 Fetching Data with useEffect
9-3 Handling API Errors
9-4 Caching API Responses
9-5 Real-time Data with WebSockets
10 React Performance Optimization
10-1 Introduction to Performance Optimization
10-2 React memo and PureComponent
10-3 useCallback and useMemo Hooks
10-4 Lazy Loading Components
10-5 Code Splitting
11 React Testing
11-1 Introduction to Testing in React
11-2 Writing Unit Tests with Jest
11-3 Testing Components with React Testing Library
11-4 Mocking Dependencies
11-5 End-to-End Testing with Cypress
12 Advanced React Patterns
12-1 Higher-Order Components (HOC)
12-2 Render Props
12-3 Compound Components
12-4 Context and Provider Pattern
12-5 Custom Hooks for Reusability
13 React and TypeScript
13-1 Introduction to TypeScript
13-2 Setting Up TypeScript with React
13-3 TypeScript Basics for React
13-4 TypeScript with Hooks
13-5 TypeScript with React Router
14 React and Redux
14-1 Introduction to Redux
14-2 Setting Up Redux with React
14-3 Actions, Reducers, and Store
14-4 Connecting React Components to Redux
14-5 Middleware and Async Actions
15 React and GraphQL
15-1 Introduction to GraphQL
15-2 Setting Up GraphQL with React
15-3 Querying Data with Apollo Client
15-4 Mutations and Subscriptions
15-5 Caching and Optimistic UI
16 React Native
16-1 Introduction to React Native
16-2 Setting Up React Native Development Environment
16-3 Building a Simple App
16-4 Navigation in React Native
16-5 Styling and Animations
17 Deployment and Best Practices
17-1 Introduction to Deployment
17-2 Deploying React Apps to GitHub Pages
17-3 Deploying React Apps to Netlify
17-4 Deploying React Apps to AWS
17-5 Best Practices for React Development
Navigation in React Native Explained

Navigation in React Native Explained

Key Concepts

React Navigation

React Navigation is a popular library for handling navigation in React Native applications. It provides a way to move between screens, manage the navigation stack, and customize the navigation experience.

Stack Navigator

The Stack Navigator is a type of navigator that manages screens in a stack. Each new screen is pushed onto the stack, and users can navigate back to previous screens by popping them off the stack.

Example:

        import { createStackNavigator } from '@react-navigation/stack';

        const Stack = createStackNavigator();

        function App() {
            return (
                <NavigationContainer>
                    <Stack.Navigator>
                        <Stack.Screen name="Home" component={HomeScreen} />
                        <Stack.Screen name="Details" component={DetailsScreen} />
                    </Stack.Navigator>
                </NavigationContainer>
            );
        }
    

Tab Navigator

The Tab Navigator is used to create a tab-based navigation interface. It allows users to switch between different screens by tapping on tabs at the bottom or top of the screen.

Example:

        import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';

        const Tab = createBottomTabNavigator();

        function App() {
            return (
                <NavigationContainer>
                    <Tab.Navigator>
                        <Tab.Screen name="Home" component={HomeScreen} />
                        <Tab.Screen name="Settings" component={SettingsScreen} />
                    </Tab.Navigator>
                </NavigationContainer>
            );
        }
    

Drawer Navigator

The Drawer Navigator provides a side menu that can be opened by swiping from the edge of the screen or by tapping a button. It is commonly used for navigation in apps with a large number of screens.

Example:

        import { createDrawerNavigator } from '@react-navigation/drawer';

        const Drawer = createDrawerNavigator();

        function App() {
            return (
                <NavigationContainer>
                    <Drawer.Navigator>
                        <Drawer.Screen name="Home" component={HomeScreen} />
                        <Drawer.Screen name="Settings" component={SettingsScreen} />
                    </Drawer.Navigator>
                </NavigationContainer>
            );
        }
    

Screen Options

Screen options allow you to customize the appearance and behavior of screens in your navigation. This includes settings like header title, header style, and whether the screen should have a back button.

Example:

        <Stack.Screen
            name="Details"
            component={DetailsScreen}
            options={{
                title: 'Details',
                headerStyle: {
                    backgroundColor: '#f4511e',
                },
                headerTintColor: '#fff',
                headerTitleStyle: {
                    fontWeight: 'bold',
                },
            }}
        />
    

Navigation Prop

The navigation prop is passed to every screen component in your navigation. It contains methods for navigating between screens, such as navigate, goBack, and push.

Example:

        function HomeScreen({ navigation }) {
            return (
                <View>
                    <Text>Home Screen</Text>
                    <Button
                        title="Go to Details"
                        onPress={() => navigation.navigate('Details')}
                    />
                </View>
            );
        }
    

Navigation Events

Navigation events allow you to listen to navigation actions, such as when a screen is focused or blurred. This can be useful for triggering side effects like fetching data or updating the UI.

Example:

        useFocusEffect(
            React.useCallback(() => {
                console.log('Screen was focused');
                return () => {
                    console.log('Screen was unfocused');
                };
            }, [])
        );
    

Nested Navigation

Nested navigation involves combining different types of navigators within each other. For example, you might use a Tab Navigator inside a Stack Navigator to create a complex navigation structure.

Example:

        function App() {
            return (
                <NavigationContainer>
                    <Stack.Navigator>
                        <Stack.Screen name="Home" component={HomeTabs} />
                        <Stack.Screen name="Details" component={DetailsScreen} />
                    </Stack.Navigator>
                </NavigationContainer>
            );
        }

        function HomeTabs() {
            return (
                <Tab.Navigator>
                    <Tab.Screen name="Feed" component={FeedScreen} />
                    <Tab.Screen name="Messages" component={MessagesScreen} />
                </Tab.Navigator>
            );
        }
    

Passing Parameters

You can pass parameters between screens using the navigation prop. This allows you to send data from one screen to another, such as an item ID or user information.

Example:

        function HomeScreen({ navigation }) {
            return (
                <View>
                    <Text>Home Screen</Text>
                    <Button
                        title="Go to Details"
                        onPress={() => navigation.navigate('Details', { itemId: 86 })}
                    />
                </View>
            );
        }

        function DetailsScreen({ route }) {
            const { itemId } = route.params;
            return (
                <View>
                    <Text>Details Screen</Text>
                    <Text>Item ID: {itemId}</Text>
                </View>
            );
        }
    

Navigation State

The navigation state represents the current state of the navigation, including the current route and the navigation stack. You can access and manipulate the navigation state using the navigation prop.

Example:

        const state = navigation.dangerouslyGetState();
        console.log(state);
    

Custom Navigation

Custom navigation involves creating your own navigation components or modifying existing ones. This allows you to create unique navigation experiences that fit your app's design.

Example:

        function CustomHeader({ navigation }) {
            return (
                <View>
                    <Button title="Menu" onPress={() => navigation.openDrawer()} />
                    <Text>Custom Header</Text>
                </View>
            );
        }
    

Navigation Best Practices

Best practices for navigation in React Native include:

Real-world Examples

Real-world examples of navigation in React Native include:

Analogies

Think of navigation in React Native as a journey through different rooms in a house. Each room (screen) has a door (navigator) that allows you to move between them. The stack navigator is like a hallway where each room is stacked on top of the previous one, the tab navigator is like a set of rooms connected by a hallway with doors at the end, and the drawer navigator is like a hidden room that slides out from the side.

Another analogy is a book with different chapters (screens). The stack navigator is like reading the book from beginning to end, the tab navigator is like flipping between different sections of the book, and the drawer navigator is like a hidden index that slides out to help you find specific chapters.