- Getting Started (00:28)
- What is React (4:32)
- Setting Up the Development Environment (3:37)
- Your First React App (6:33)
- Hello World (5:25)
- Custom Configs (3:11)
- Full-stack Architecture (2:44)
- Course Structure (2:24)
- Start Redux?
- ES6 Refresher (00:48)
- Introduction (1:43)
- Let vs Var vs Const (3:52)
- Objects (2:45)
- The this Keyword (2:49)
- Binding this (2:36)
- Arrow Functions (4:15)
- Arrow Functions and this (4:14)
- Array.map Method (3:36)
- Object Destructuring (2:29)
- Spread Operator (4:02)
- Classes (3:45)
- Inheritance (4:03)
- Modules (4:11)
- Named and Default Exports (5:15)
- Components (01:17)
- Introduction (1:38)
- Setting Up the Project (2:06)
- Your First React Component (5:20)
- Specifying Children (4:16)
- Embedding Expressions (4:50)
- Setting Attributes (5:45)
- Rendering Classes Dynamically (4:18)
- Rendering Lists (3:58)
- Conditional Rendering (6:04)
- Handling Events (2:49)
- Binding Event Handlers (4:36)
- Updating the State (2:14)
- What Happens When State Changes (2:04)
- Passing Event Arguments (3:04)
- Setting Up the Vidly Project (5:38)
- Exercises (3:25)
- Building the Movies Component (7:18)
- Deleting a Movie (5:18)
- Conditional Rendering (3:26)
- Summary (0:36)
- Composing Components (01:19)
- Introduction (0:45)
- Composing Components (3:45)
- Passing Data to Components (3:11)
- Passing Children (3:10)
- Debugging React Apps (4:09)
- Props vs State (2:24)
- Raising and Handling Events (4:52)
- Updating the State (4:38)
- Single Source of Truth (3:55)
- Removing the Local State (6:47)
- Multiple Components in Sync (5:53)
- Lifting the State Up (5:36)
- Stateless Functional Components (2:29)
- Destructuring Arguments (2:00)
- Lifecycle Hooks (1:38)
- Mounting Phase (5:34)
- Updating Phase (4:20)
- Unmounting Phase (1:26)
- Exercise- Decrement Button (1:05)
- Solution - Decrement Button (4:53)
- Exercise- Like Component (1:44)
- Solution- Like Component (12:26)
- Summary (0:42)
- Pagination, Filtering, and Sorting (01:47)
- Introduction (1:08)
- Exercise- Pagination Component (1:01)
- Pagination- Component Interface (3:47)
- Pagination- Displaying Pages (6:48)
- Pagination- Handling Page Changes (5:49)
- Pagination- Paginating Data (6:14)
- Pagination- Type Checking with PropTypes (4:56)
- Exercise- ListGroup Component (1:24)
- Filtering- Component Interface (5:32)
- Filtering- Displaying Items (3:57)
- Filtering- Default Props (2:06)
- Filtering- Handling Selection (4:20)
- Filtering- Implementing Filtering (2:59)
- Filtering- Adding All Genres (3:39)
- Sorting- Extracting MoviesTable (5:19)
- Sorting- Raising the Sort Event (3:28)
- Sorting- Implementing Sorting (5:13)
- Sorting- Moving Responsibility (5:15)
- Sorting- Extracting TableHeader (7:44)
- Sorting- Extracting TableBody (3:12)
- Sorting- Rendering Cell Content (8:02)
- Sorting- Unique Keys - Final (2:58)
- Sorting- Adding the Sort Icon (3:57)
- Sorting- Extracting Table (3:51)
- Sorting- Extracting a Method (3:18)
- Destructuring Arguments (0:58)
- Summary (0:51)
- Routing (00:53)
- Introduction (0:33)
- Setup (1:46)
- Adding Routing (4:15)
- Switch (2:26)
- Link (4:20)
- Route Props (2:10)
- Passing Props (2:35)
- Route Parameters (3:32)
- Optional Parameters (2:06)
- Query String Parameters (3:51)
- Redirects (3:06)
- Programmatic Navigation (2:20)
- Nested Routing (4:35)
- Exercises- NavBar and Routing (1:43)
- Adding React Router (1:26)
- Adding Routes (4:57)
- Adding the NavBar (4:39)
- Linking to the MovieForm (4:42)
- Summary (0:31)
- Forms (01:34)
- Introduction (0:38)
- Building a Bootstrap Form (5:34)
- Handling Form Submission (2:00)
- Refs (3:58)
- Controlled Elements (4:32)
- Handling Multiple Inputs (2:49)
- Common Errors (2:28)
- Extracting a Reusable Input (3:57)
- Validation (2:56)
- A Basic Validation Implementation (3:11)
- Displaying Validation Errors (3:42)
- Validation on Change (4:19)
- Joi (4:33)
- Validating a Form Using Joi (4:43)
- Validating a Field Using Joi (5:22)
- Disabling the Submit Button (1:11)
- Code Review (3:13)
- Extracting a Reusable Form (4:51)
- Extracting Helper Rendering Methods (8:18)
- Register Form (1:42)
- Code Review (1:10)
- Exercise 2- Movie Form (3:18)
- Code Review (8:24)
- Exercise 3- Search Movies (1:22)
- Code Review (5:12)
- Calling Backend Services (01:42)
- Introduction (1:13)
- JSON Placeholder (2:54)
- Http Clients (2:56)
- Getting Data (5:26)
- Creating Data (4:52)
- Lifecycle of a Request (2:50)
- Updating Data (4:14)
- Deleting Data (1:35)
- Optimistic vs Pessimistic Updates (4:24)
- Expected vs Unexpected Errors (6:40)
- Handling Unexpected Errors Globally (7:54)
- Extracting a Reusable Http Service (3:43)
- Extracting a Config Module (1:36)
- Displaying Toast Notifications (2:56)
- Logging Errors (5:47)
- Extracting a Logger Service (4:25)
- Vidly Backend (1:50)
- Installing MongoDB on Mac (3:58)
- Installing MongoDB on Windows (5:39)
- Setting Up the Node Backend (2:44)
- Disabling Authentication (4:01)
- Exercise- Connect Movies Page to the Backend (1:56)
- Adding Http and Log Services (2:38)
- Replacing FakeGenreService (3:23)
- Replacing FakeMovieService (5:48)
- Extracting a Config File (1:54)
- Exercise- Connect Movie Form to the Backend (0:56)
- Populating the Form (3:45)
- Refactoring (2:30)
- Saving the Movie (2:40)
- Refactoring (2:36)
- Authentication and Authorization (01:41)
- Introduction (0:49)
- Registering a New User (2:37)
- Submitting the Registration Form (4:30)
- Handling Registration Errors (1:58)
- Logging in a User (1:43)
- Submitting the Login Form (2:23)
- Handling Login Errors (1:51)
- Storing the JWT (3:04)
- Logging in the User upon Registration (5:37)
- JSON Web Tokens (JWT) (3:59)
- Getting the Current User (4:18)
- Displaying the Current User on NavBar (4:48)
- Logging out a User (2:44)
- Refactoring (10:03)
- Calling Protected API Endpoints (4:10)
- Fixing Bi-directional Dependencies (2:43)
- Authorization (6:30)
- Showing or Hiding Elements based on the User (2:40)
- Protecting Routes (2:50)
- Extracting ProtectedRoute (5:55)
- Redirecting after Login (5:40)
- Exercise (0:19)
- Hiding the Delete Column (4:19)
- Deployment (00:35)
- Introduction (0:38)
- Environment Variables (4:58)
- Production Builds (2:48)
- Getting Started with Heroku (2:06)
- MongoDB in the Cloud (2:35)
- Adding Code to a Git Repository (3:05)
- Deploying to Heroku (3:01)
- Viewing Logs (2:40)
- Setting Environment Variables on Heroku (4:37)
- Preparing the Font-end for Deployment (4:09)
- Deploying the Front-end (2:38)
- Advanced Topics (01:04)
- Introduction (0:31)
- Source Code
- Setting Up the Development Environment (3:13)
- Higher Order Components (2:04)
- Implementing a Higher Order Component (8:35)
- Hooks (3:06)
- The useState Hook (8:30)
- The useEffect Hook (5:46)
- Custom Hooks (3:04)
- Fetching Data with Hooks (4:37)
- Context (2:10)
- Context in Class Components (9:46)
- Context in Functional Components (3:33)
- Updating the Context (7:06)
- Consuming Multiple Contexts (2:24)
- Thank You!
- What to Learn Next