Adding JavaScript To A Page & How React Projects Differ 
  React Projects Use a Build Process 
  Revisiting Variables & Values 
  Revisiting Functions & Parameters 
  Exercise: Working with Functions 
  More on the Arrow Function Syntax 
  Revisiting Objects & Classes 
  Arrays & Array Methods like map() 
  Destructuring in Function Parameter Lists 
  Revisiting Control Structures 
  Manipulating the DOM - Not With React! 
  Using Functions as Values 
  Defining Functions Inside Of Functions 
  Reference vs Primitive Values 
  Next-Gen JavaScript - Summary 
  It's All About Components! [Core Concept] 
  Setting Up The Starting Project 
  JSX & React Components [Core Concept] 
  Creating & Using a First Custom Component 
  A Closer Look: Components & File Extensions 
  Building & Using a Component 
  How React Handles Components & How It Builds A "Component Tree" [Core Concept] 
  Using & Outputting Dynamic Values [Core Concept] 
  Setting HTML Attributes Dynamically & Loading Image Files 
  Outputting Dynamic Content 
  Making Components Reusable with Props [Core Concept] 
  Alternative Props Syntaxes 
  Best Practice: Storing Components in Files & Using a Good Project Structure 
  Storing Component Style Files Next To Components 
  Component Composition: The special "children" Prop [Core Concept] 
  Reacting to Events [Core Concept] 
  Passing Functions as Values to Props 
  Passing Custom Arguments to Event Functions 
  Configuring Event Handlers 
  Best Practices & Event Handling 
  How NOT to Update the UI - A Look Behind The Scenes of React [Core Concept] 
  Managing State & Using Hooks [Core Concept] 
  Deriving & Outputting Data Based on State 
  Rendering Content Conditionally 
  CSS Styling & Dynamic Styling 
  Outputting List Data Dynamically 
  Conditional Content & Dynamic Lists 
  You Don't Have To Use JSX! 
  When Should You Split Components? 
  Splitting Components By Feature & State 
  Problem: Props Are Not Forwarded To Inner Elements 
  Forwarding Props To Wrapped Elements 
  Working with Multiple JSX Slots 
  Setting Component Types Dynamically 
  Setting Default Prop Values 
  Creating Flexible Components 
  Onwards To The Next Project & Advanced Concepts 
  Not All Content Must Go Into Components 
  Closer Look: public/ vs assets/ for Image Storage 
  New Project: First Steps Towards Our Tic-Tac-Toe Game 
  Concept Repetition: Splitting Components & Building Reusable Components 
  Concept Repetition: Working with State 
  Component Instances Work In Isolation! 
  Conditional Content & A Suboptimal Way Of Updating State 
  Best Practice: Updating State Based On Old State Correctly 
  User Input & Two-Way-Binding 
  Rendering Multi-Dimensional Lists 
  Best Practice: Updating Object State Immutably 
  Lifting State Up [Core Concept] 
  Avoid Intersecting States! 
  Prefer Computed Values & Avoid Unnecessary State Management 
  Deriving State From Props 
  Sharing State Across Components 
  Reducing State Management & Identifying Unnecessary State 
  Disabling Buttons Conditionally 
  Outsourcing Data Into A Separate File 
  Lifting Computed Values Up 
  Deriving Computed Values From Other Computed Values 
  Tic-Tac-Toe Game: The "Game Over" Screen & Checking for a Draw 
  Why Immutability Matters - Always! 
  When NOT To Lift State Up 
  An Alternative To Lifting State Up 
  Final Polishing & Improving Components 
  Module Introduction & Starting Project 
  Splitting CSS Code Across Multiple Files 
  Styling React Apps with Vanilla CSS - Pros & Cons 
  Vanilla CSS Styles Are NOT Scoped To Components! 
  Styling React Apps with Inline Styles 
  Dynamic & Conditional Inline Styles 
  Dynamic Styling with Inline Styles 
  Dynamic & Conditional Styling with CSS Files & CSS Classes 
  Dynamic Styling with CSS Classes 
  Scoping CSS Rules with CSS Modules 
  Introducing "Styled Components" (Third-party Package) 
  Creating Flexible Components with Styled Components 
  Dynamic & Conditional Styling with Styled Components 
  Styled Components: Pseudo Selectors Nested Rules & Media Queries 
  Creating Reusable Components & Component Combinations 
  Introducing Tailwind CSS For React App Styling 
  Adding & Using Tailwind CSS In A React Project 
  Tailwind: Media Queries & Pseudo Selectors 
  Dynamic & Conditional Styling with Tailwind 
  Migrating The Demo App to Tailwind CSS 
  Tailwind CSS: Pros & Cons 
  Module Introduction & Starting Project 
  Repetition: Managing User Input with State (Two-Way-Binding) 
  Introducing Refs: Connecting & Accessing HTML Elements via Refs 
  Manipulating the DOM via Refs 
  Accessing DOM Elements with "refs" 
  Adding Challenges to the Demo Project 
  Setting Timers & Managing State 
  Using Refs for More Than "DOM Element Connections" 
  Managing Other Values with Refs 
  Forwarding Refs to Custom Components 
  Exposing Component APIs via the useImperativeHandle Hook 
  More Examples: When To Use Refs & State 
  Sharing State Across Components 
  Enhancing the Demo App "Result Modal" 
  Closing the Modal via the ESC (Escape) Key 
  Introducing & Understanding "Portals" 
  Module Introduction & Starting Project 
  Adding a "Projects Sidebar" Component 
  Styling the Sidebar & Button with Tailwind CSS 
  Adding the "New Project" Component & A Reusable "Input" Component 
  Styling Buttons & Inputs with Tailwind CSS 
  Splitting Components to Split JSX & Tailwind Styles (for Higher Reusability) 
  Managing State to Switch Between Components 
  Collecting User Input with Refs & Forwarded Refs 
  Handling Project Creation & Updating the UI 
  Validating User Input & Showing an Error Modal via useImperativeHandle 
  Styling the Modal via Tailwind CSS 
  Making Projects Selectable & Viewing Project Details 
  Handling Project Deletion 
  Adding "Project Tasks" & A Tasks Component 
  Managing Tasks & Understanding Prop Drilling 
  Clearing Tasks & Fixing Minor Bugs 
  Understanding Prop Drilling & Project Overview 
  Prop Drilling: Component Composition as a Solution 
  Introducing the Context API 
  Creating & Providing The Context 
  Linking the Context to State 
  A Different Way Of Consuming Context 
  What Happens When Context Values Change? 
  Migrating the Entire Demo Project to use the Context API 
  Outsourcing Context & State Into a Separate Provider Component 
  Introducing the useReducer Hook 
  Dispatching Actions & Editing State with useReducer 
  Module Introduction & Starting Project 
  What's a "Side Effect"? A Thorough Example 
  A Potential Problem with Side Effects: An Infinite Loop 
  Using useEffect for Handling (Some) Side Effects 
  Not All Side Effects Need useEffect 
  useEffect Not Needed: Another Example 
  Preparing Another Use-Case For useEffect 
  Using useEffect for Syncing With Browser APIs 
  Understanding Effect Dependencies 
  Preparing Another Problem That Can Be Fixed with useEffect 
  Introducing useEffect's Cleanup Function 
  The Problem with Object & Function Dependencies 
  useEffect's Cleanup Function: Another Example 
  Module Introduction & Starting Project 
  A First Component & Some State 
  Deriving Values Outputting Questions & Registering Answers 
  Shuffling Answers & Adding Quiz Logic 
  Working with Effect Dependencies & useCallback 
  Using Effect Cleanup Functions & Using Keys for Resetting Components 
  Highlighting Selected Answers & Managing More State 
  Splitting Components Up To Solve Problems 
  Moving Logic To Components That Actually Need It ("Moving State Down") 
  Setting Different Timers Based On The Selected Answer 
  React Builds A Component Tree / How React Works Behind The Scenes 
  Analyzing Component Function Executions via React's DevTools Profiler 
  Avoiding Component Function Executions with memo() 
  Avoiding Component Function Executions with Clever Structuring 
  Understanding the useCallback() Hook 
  Understanding the useMemo() Hook 
  React Uses A Virtual DOM - Time To Explore It! 
  Why Keys Matter When Managing State! 
  More Reasons For Why Keys Matter 
  Using Keys For Resetting Components 
  State Scheduling & Batching 
  Optimizing React with MillionJS 
  How (Not) To Connect To A Database 
  Starting Project & Dummy Backend API 
  Preparing the App For Data Fetching 
  How NOT To Send HTTP Requests (And Why It's Wrong) 
  Sending HTTP Requests (GET Request) via useEffect 
  Transforming Fetched Data 
  Extracting Code & Improving Code Structure 
  Sending Data with POST Requests 
  Using Optimistic Updating 
  Deleting Data (via DELETE HTTP Requests) 
  Module Introduction & Starting Project 
  What Are Forms & What's Tricky About Them? 
  Managing & Getting User Input via State & Generic Handlers 
  Getting User Input via Refs 
  Getting Values via FormData & Native Browser APIs 
  Validating Input on Every Keystroke via State 
  Validating Input Upon Lost Focus (Blur) 
  Validating Input Upon Form Submission 
  Validating Input via Built-in Validation Props 
  Mixing Custom & Built-in Validation Logic 
  Building & Using a Reusable Input Component 
  Outsourcing Validation Logic 
  Creating a Custom useInput Hook 
  Using Third-Party Form Libraries 
  Module Introduction & Starting Project 
  Planning the App & Adding a First Component 
  Fetching Meals Data (GET HTTP Request) 
  Adding a "MealItem" Component 
  Formatting & Outputting Numbers as Currency 
  Creating a Configurable & Flexible Custom Button Component 
  Getting Started with Cart Context & Reducer 
  Finishing & Using the Cart Context & Reducer 
  Adding a Reusable Modal Component with useEffect 
  Opening the Cart in the Modal via a New Context 
  Working on the Cart Items 
  Adding a Custom Input Component & Managing Modal Visibility 
  Handling Form Submission & Validation 
  Sending a POST Request with Order Data 
  Adding a Custom HTTP Hook & Avoiding Common Errors 
  Handling HTTP Loading & Error States 
  Another Look At State In React Apps 
  MUST READ: Redux createStore() is (not) deprecated 
  Exploring The Core Redux Concepts 
  Creating a Redux Store for React 
  Using Redux Data in React Components 
  Dispatching Actions From Inside Components 
  Redux with Class-based Components 
  Attaching Payloads to Actions 
  Working with Multiple State Properties 
  How To Work With Redux State Correctly 
  Redux Challenges & Introducing Redux Toolkit 
  Connecting Redux Toolkit State 
  Migrating Everything To Redux Toolkit 
  Working with Multiple Slices 
  Reading & Dispatching From A New Slice 
  Redux & Side Effects (and Asynchronous Code) 
  Refresher / Practice: Part 1/2 
  Refresher / Practice: Part 2/2 
  Using Firebase as a Backend 
  Frontend Code vs Backend Code 
  Using useEffect with Redux 
  A Problem with useEffect() 
  Handling Http States & Feedback with Redux 
  Using an Action Creator Thunk 
  Getting Started with Fetching Data 
  Finalizing the Fetching Logic 
  Exploring the Redux DevTools 
  Routing: Multiple Pages in Single-Page Applications 
  Project Setup & Installing React Router 
  Exploring an Alternative Way of Defining Routes 
  Navigating between Pages with Links 
  Showing Error Pages with errorElement 
  Working with Navigation Links (NavLink) 
  Navigating Programmatically 
  Defining & Using Dynamic Routes 
  Adding Links for Dynamic Routes 
  Understanding Relative & Absolute Paths 
  Working with Index Routes 
  Onwards to a new Project Setup 
  Time to Practice: Problem 
  Time to Practice: Solution 
  Data Fetching with a loader() 
  Using Data From A Loader In The Route Component 
  Where Should loader() Code Be Stored? 
  When Are loader() Functions Executed? 
  Reflecting The Current Navigation State in the UI 
  Returning Responses in loader()s 
  Which Kind Of Code Goes Into loader()s? 
  Error Handling with Custom Errors 
  Extracting Error Data & Throwing Responses 
  The json() Utility Function 
  Dynamic Routes & loader()s 
  The useRouteLoaderData() Hook & Accessing Data From Other Routes 
  Working with action() Functions 
  Submitting Data Programmatically 
  Updating the UI State Based on the Submission Status 
  Validating User Input & Outputting Validation Errors 
  Reusing Actions via Request Methods 
  Behind-the-Scenes Work with useFetcher() 
  Deferring Data Fetching with defer() 
  Controlling Which Data Should Be Deferred 
  Upgrading from React Router v5 
  Installing & Using Tanstack Query - And Seeing Why It's Great! 
  Understanding & Configuring Query Behaviors - Cache & Stale Data 
  Dynamic Query Functions & Query Keys 
  The Query Configuration Object & Aborting Requests 
  Enabled & Disabled Queries 
  Changing Data with Mutations 
  Fetching More Data & Testing the Mutation 
  Acting on Mutation Success & Invalidating Queries 
  A Challenge! The Solution 
  Disabling Automatic Refetching After Invalidations 
  Enhancing the Demo App & Repeating Mutation Concepts 
  React Query Advantages In Action 
  Updating Data with Mutations 
  Using the Query Key As Query Function Input 
  React Query & React Router 
  Creating a NextJS Project 
  Understanding File-based Routing & React Server Components 
  Adding Another Route via the Filesystem 
  Working with Pages & Layouts 
  Reserved File Names Custom Components & How To Organize A NextJS Project 
  Configuring Dynamic Routes & Using Route Parameters 
  Onwards to the Main Project: The Foodies App 
  Revisiting The Concept Of Layouts 
  Adding a Custom Component To A Layout 
  Styling NextJS Project: Your Options & Using CSS Modules 
  Optimizing Images with the NextJS Image Component 
  Using More Custom Components 
  Populating The Starting Page Content 
  Preparing an Image Slideshow 
  React Server Components vs Client Components - When To Use What 
  Using Client Components Efficiently 
  Outputting Meals Data & Images With Unknown Dimensions 
  Setting Up A SQLite Database 
  Fetching Data By Leveraging NextJS & Fullstack Capabilities 
  Using Suspense & Streamed Responses For Granular Loading State Management 
  Handling "Not Found" States 
  Loading & Rendering Meal Details via Dynamic Routes & Route Parameters 
  Throwing Not Found Errors For Individual Meals 
  Getting Started with the "Share Meal" Form 
  Getting Started with a Custom Image Picker Input Component 
  Adding an Image Preview to the Picker 
  Improving the Image Picker Component 
  Introducing & Using Server Actions for Handling Form Submissions 
  Storing Server Actions in Separate Files 
  Creating a Slug & Sanitizing User Input for XSS Protection 
  Storing Uploaded Images & Storing Data in the Database 
  Managing the Form Submission Status with useFormStatus 
  Adding Server-Side Input Validation 
  Working with Server Action Responses & useFormState 
  Building For Production & Understanding NextJS Caching 
  Triggering Cache Revalidations 
  Don't Store Files Locally On The Filesystem! 
  Bonus: Storing Uploaded Images In The Cloud (AWS S3) 
  About the NextJS Pages Router 
  Creating a NextJS Project 
  Analyzing the Created Project 
  Adding Nested Paths & Pages (Nested Routes) 
  Creating Dynamic Pages (with Parameters) 
  Extracting Dynamic Parameter Values 
  Onwards to a bigger Project! 
  Preparing the Project Pages 
  Outputting a List of Meetups 
  Adding the New Meetup Form 
  The "_app.js" File & Layout Wrapper 
  Using Programmatic (Imperative) Navigation 
  Adding Custom Components & CSS Modules 
  How Pre-rendering Works & Which Problem We Face 
  Data Fetching for Static Pages 
  More on Static Site Generation (SSG) 
  Exploring Server-side Rendering (SSR) with "getServerSideProps" 
  Working with Params for SSG Data Fetching 
  Preparing Paths with "getStaticPaths" & Working With Fallback Pages 
  Sending Http Requests To Our API Routes 
  Getting Data From The Database 
  Getting Meetup Details Data & Preparing Pages 
  Deploying Next.js Projects 
  Using Fallback Pages & Re-deploying 
  Animating with CSS Transitions 
  Animating with CSS Animations 
  Introducing Framer Motion 
  Framer Motion Basics & Fundamentals 
  Animating Between Conditional Values 
  Animating Element Disappearances / Removal 
  Making Elements "Pop" With Hover Animations 
  Nested Animations & Variants 
  Animating Staggered Lists 
  Animating Colors & Working with Keyframes 
  Orchestrating Multi-Element Animations 
  Combining Animations With Layout Animations 
  Animating Shared Elements 
  Re-triggering Animations via Keys 
  Installing & Using TypeScript 
  Working with Array & Object Types 
  Understanding Type Inference 
  Understanding Type Aliases 
  Functions & Function Types 
  A Closer Look At Generics 
  Creating a React + TypeScript Project 
  Working with Components & TypeScript 
  Working with Props & TypeScript 
  Time to Practice: Exercise Time! 
  Form Submissions In TypeScript Projects 
  Working with refs & useRef 
  Working with "Function Props" 
  Managing State & TypeScript 
  Time to Practice: Removing a Todo 
  The Context API & TypeScript 
  Bonus: Exploring tsconfig.json 
  What Is React & Why Would You Use It? 
  React Projects - Requirements 
  Understanding How React Works 
  Building A First Custom Component 
  Outputting Dynamic Values 
  Passing Data to Components with Props 
  CSS Styling & CSS Modules 
  Exercise & Another Component 
  Preparing the App For State Management 
  The Special "children" Prop 
  State & Conditional Content 
  Adding a Shared Header & More State Management 
  Updating State Based On Previous State 
  Adding a Backend to the React SPA 
  Sending a POST HTTP Request 
  Handling Side Effects with useEffect() 
  Understanding & Adding Routing 
  Working with Layout Routes 
  Refactoring Route Components & More Nesting 
  Data Fetching via loader()s 
  Submitting Data with action()s 
  About these [BONUS / OPTIONAL] sections 
  What Are Components? And Why Is React All About Them? 
  React Code Is Written In A "Declarative Way"! 
  Creating a new React Project 
  Analyzing a Standard React Project 
  Exercise: Working with JSX Code 
  Building a First Custom Component 
  Exercise: Building a First Component 
  Writing More Complex JSX Code 
  Outputting Dynamic Data & Working with Expressions in JSX 
  Time to Practice: React & Component Basics 
  Exercise: Passing Data via "props" 
  Alternative Ways of Passing & Receiving / Handling "props" 
  Adding "normal" JavaScript Logic to Components 
  Splitting Components Into Multiple Components 
  The Concept of "Composition" ("children props") 
  Exercise: Component Composition 
  Organizing Component Files 
  An Alternative Function Syntax 
  Learning Check: React Basics Components Props & JSX 
  Listening to Events & Working with Event Handlers 
  Exercise: Listening to Events 
  How Component Functions Are Executed 
  Exercise: Working with "State" 
  A Closer Look at the "useState" Hook 
  State can be updated in many ways! 
  Working with Multiple States 
  Using One State Instead (And What's Better) 
  Updating State That Depends On The Previous State 
  Exercise: Using State with Form Inputs 
  Exercise: Updating State Based On Older State 
  Alternative: Creating A Shared Handler Function 
  Time to Practice: Working with Events & State 
  Child-to-Parent Component Communication (Bottom-up) 
  Controlled vs Uncontrolled Components & Stateless vs Stateful Components 
  Learning Check: Working with Events & State 
  The First Practice Project & Your Tasks 
  Splitting the App Into Components 
  Outputting Results Conditionally 
  Introducing the Second Project 
  Adding a "User" Component 
  Adding a re-usable "Card" Component 
  Adding a re-usable "Button" Component 
  Managing the User Input State 
  Adding Validation & Resetting Logic 
  Adding a Users List Component 
  Managing a List Of Users via State 
  Adding The "ErrorModal" Component