Skip to main content
CF

React and Typescript: Build a Portfolio Project

29h 21m 48s
English
Free

Kick off your learning experience with an introduction on how to use React and Typescript together. Not familiar with Typescript? No problem! A lightning fast - but comprehensive - tutorial is included!

Once you're ready with React and Typescript, you'll dive into our big project. You are going to build an interactive browser-based coding environment. It's like a Jupyter Notebook, but for Javascript, with many additional features added in. Yes, this is what you are going to build in this course! You will solve incredible challenges around bundling and transpiling code directly in the browser. This is a task normally done by running Webpack and Babel at your terminal! You will execute users' code safely in the browser just like how famous services like CodeSandBox and CodePen do. Finally, you'll deploy this project using a multi-package architecture to NPM, where your friends and employers can easily download and run your project.

During this entire project, I will show you a variety of different solutions to an incredible number of problems. I will show you step-by-step how to solve each problem. You will also see many concerns around performance and security addressed.

At the end of the course, you will have an amazing portfolio project with excellent looks and functionality. You will understand every line of code, and be able to explain every bit to potential employers.

Here's a partial list of the topics that will be covered in this course:


  • Master the use of React, Redux, and Typescript together
  • Build a complex and interesting app using a package-based architecture
  • Understand the challenges of in-browser code transpiling and and processing
  • Secure your app against potential security exploits
  • Safely execute user-provided code directly in the browser
  • Run a code editor directly in the browser - the same editor used by VSCode!
  • Leverage Web Assembly to run a code bundler directly in the browser at lightning-fast speeds
  • Use the internals of Redux to manually test out your business logic
  • Discover dozens of tricks to build a sleek UI
  • Deploy your app to the NPM registry, where others can easily use it
  • I built this course to help you apply your React skills. Sign up today and build an incredible app that will prove your knowledge.

About the Authors

Stephen Grider

Stephen Grider thumbnail

Stephen Grider is one of the longest-running and most prolific instructors on Udemy, with a catalog covering essentially every major JavaScript framework, plus Docker, Kubernetes, AWS, and the broader full-stack development landscape. His teaching style is patient and project-oriented — most of his courses are structured around building a substantial application from scratch rather than working through disconnected tutorial examples.

The catalog covers React, Redux, Next.js, Vue, Angular, GraphQL, Node.js, Docker / Kubernetes, AWS infrastructure, React Native and Flutter for mobile, the algorithm / data-structure interview prep track, and the modern TypeScript / Bun / Rust adjacent material that working JavaScript developers increasingly encounter. Few independent instructors have maintained Stephen's breadth this consistently for this long.

The CourseFlix listing under this source carries over 25 Stephen Grider courses spanning that range. Material is paid; Stephen Grider courses are typically sold individually on Udemy. Courses are aimed primarily at developers picking up a specific technology through working through a complete project.

Udemy

Udemy thumbnail

Udemy is the largest open marketplace for online courses on the internet. Founded in 2010 by Eren Bali, Oktay Caglar, and Gagan Biyani and headquartered in San Francisco, the company went public on the Nasdaq in 2021 under the ticker UDMY. The platform hosts well over two hundred thousand courses across software development, IT and cloud, data science, design, business, marketing, and creative skills, taught by tens of thousands of independent instructors. Roughly seventy million learners use it worldwide, and the corporate arm — Udemy Business — supplies a curated subset of that catalog to enterprise customers.

Because Udemy is a marketplace rather than a single editorial publisher, the catalog is uneven by design. The strongest material lives in the long-form, project-based courses authored by working engineers — full-stack JavaScript, React, Node.js, Python data science, AWS, Docker and Kubernetes, mobile development with Flutter and React Native, and cloud certification preparation. The CourseFlix listing under this source is the slice of that catalog that has been mirrored here for offline-friendly viewing, organized by topic and updated as new releases land. Pricing on Udemy itself swings dramatically with the site's near-permanent sales, which is why the platform is best treated as a deep reference catalog: pick instructors with strong reviews and a track record of updating their material rather than buying on the headline price alone.

Watch Online 380 lessons

  • Space or K: play or pause
  • J: rewind 10 seconds
  • L: forward 10 seconds
  • Left Arrow: rewind 5 seconds
  • Right Arrow: forward 5 seconds
  • Up Arrow: volume up
  • Down Arrow: volume down
  • M: mute or unmute
  • F: toggle fullscreen
  • T: toggle theater mode
  • I: toggle mini player
  • 0 to 9: seek to 0 to 90 percent of the video
  • Shift plus N: next video
  • Shift plus P: previous video
0:00 0:00
#Lesson TitleDuration
1How to Get Help 00:56
2Be Sure to Watch this Video! 01:40
3Generating TypeScript-Enabled Projects 01:35
4File Extensions and Starting Up React 04:35
5Changes with TypeScript 02:34
6The Big Difference with Props 03:54
7Explicit Component Type Annotations 05:51
8Annotations with Children 05:48
9State with TypeScript 04:42
10Type Inference with State 05:42
11Quick Finish to the Example 00:56
12More on State 04:20
13Type Unions in State 05:42
14Inline Event Handlers 03:19
15Typing Standalone Event Handlers 02:41
16Handling Drag Events Too! 03:45
17TypeScript with Class Components 09:04
18Applying Types to Refs 05:36
19More on Refs 04:31
20App Overview 02:05
21Project Setup 01:50
22Redux Store Design 08:54
23Reducer Setup 08:17
24Annotating the Return Type 01:27
25Typing an Action 01:55
26Separate Interfaces for Actions 04:22
27Applying Action Interfaces 04:23
28Adding an Action Type Enum 05:42
29A Better Way to Organize Code 03:38
30Adding Action Creators 04:28
31Adding Request Logic 03:16
32Applying Typings to Dispatch 02:47
33Setting Up Exports 04:20
34Wiring Up to React 03:25
35Oops... Initial State! 01:04
36Reminder on Event Types 03:01
37Calling an Action Creator 03:06
38Binding Action Creators 04:22
39Selecting State 04:17
40Awkward Typings Around React-Redux 04:47
41Creating a Typed Selector 04:01
42Consuming Store State 03:03
43Quick Wrapup 03:25
44App Overview 06:16
45Three Big Challenges 06:03
46Transpiling Options 06:09
47Remote Transpiling 02:58
48Module Systems 04:31
49Behind the Scenes with Webpack 07:10
50Webpack with ES Modules 02:41
51One Small Change 02:42
52Options for Bundling 06:50
53So Which Approach? 04:02
54A Webpack Replacement 02:49
55A Demo App 01:07
56Project Setup 02:55
57Basic Form Elements 04:55
58Understanding ESBuild 06:08
59Initializing ESBuild 03:41
60Using Refs for Arbitrary Values 03:11
61Transpiling Works! 04:43
62Troubles with Bundling in the Browser 05:57
63Issues with NPM 04:56
64Solution with Unpkg 04:33
65ESBuild Can Bundle! 05:22
66Deep Dive on Bundling 10:50
67Filters and Namespaces 03:01
68Adding a Tiny Test Package 02:31
69Dynamically Fetching Modules 08:24
70Generating the Unpkg URL 02:00
71Issues with Multi-File Packages 04:21
72Solving Relative Paths 06:43
73Using the URL Constructor 03:58
74Failing Nested Requires 10:41
75Resolving Nested Paths 07:50
76It Works! 05:48
77Defines During Bundling 05:59
78Bonus! Package Versioning 02:47
79Crazy Numbers of Requests 03:12
80Implementing a Caching Layer 03:56
81Caching with Key-Value Pairs 06:32
82Fixing a TypeScript Error 06:05
83Bundling User Input 04:36
84Breaking Up Resolve Logic With Filters 06:26
85Refactoring to Multiple Plugins 05:45
86Loading CSS Files 01:51
87Configuring the Correct Loader 04:17
88Small Shortcoming with ESBuild 02:40
89Tricking ESBuild's CSS Handling 05:59
90Escaping CSS Snippets 05:11
91Separate Load Filters 05:35
92Extracting Common Caching Logic 04:19
93A Better Way of Loading WASM 03:27
94Executing User Code 06:08
95Big Issues with Code Execution 06:47
96How Do Others Solve This? 01:44
97Displaying IFrames 02:54
98Different Execution Context 02:50
99Crossing Context 03:19
100Sandboxing an IFrame 03:42
101Breaking Access with Different Domains 04:12
102How Do IFrames Fix Anything? 03:25
103The Full Flow - How CodePen and CodeSandbox Work 04:37
104Do We Need Separation? 04:30
105Middle Ground Approach 07:21
106IFrames with SrcDocs 07:50
107Execution Using SrcDoc 04:26
108Running Unescaped Code 09:46
109Indirect Communication Between Frames 05:40
110Passing Code to the IFrame 07:04
111It Works! 03:00
112Highlighting Errors 06:29
113Issues with Repeat Execution 03:09
114Resetting the IFrame Contents 03:50
115Warning Fixup 00:52
116Issues with Eager Bundling 05:59
117Quick Revert 00:45
118Open Source Editor Options 02:43
119Displaying an Editor 05:55
120Configuring the Editor 03:51
121Crazy Monaco Editor Type Defs 08:45
122A Few More Options 04:21
123Setting the Initial Value 03:43
124Handling Editor Change Events 05:51
125Adding a Type Definition 04:00
126Adding Prettier to Our Editor 04:03
127Automatic Code Formatting 05:52
128Adding a CSS Library 03:19
129Floating the Format Button 05:24
130Fixing Syntax Highlighting 16:10
131Refactoring Out a Preview Component 08:16
132Extracting Bundling Logic 08:05
133Fixing a Few Warnings 03:24
134Multiple Editors and Preview Windows 05:22
135Adding Resizable Panes 03:18
136Setting Up React-Resizable 05:44
137Setting a Resize Handle 05:42
138Adding a Bunch of CSS 01:38
139Expanding the Resizer Horizontally 04:28
140Expanding the Code Editor 04:43
141Fixing the Resize Issue 05:40
142Constraining Vertical Resizes 03:32
143Resizing Horizontally 01:59
144Strategies for Prop Definitions 04:35
145Applying Horizontal Resize Props 03:46
146Getting Preview to Expand 05:24
147A Small Workaround 01:46
148Updating the After Selector 01:06
149An Oddity Around the Resizer 00:47
150On Resize Events 03:20
151Updating Resizer Props 04:29
152Improving Resize Performance 02:15
153Why Width Jumps? 03:28
154Synchronizing Width State 07:20
155Adding Debouncing Logic 04:47
156Clearing the Timeout 02:30
157Adding an Execution Timeout 03:18
158Error Handling 01:31
159Extracting Reusable Error Handling Logic 03:03
160Handling Async Errors 04:38
161Capturing Bundling Errors 04:03
162Printing the Captured Error 05:01
163Plan for the Text Cell 03:45
164A Few Issues with the Markdown Editor 05:40
165Toggling the Markdown Editor Mode 05:26
166Conditional Toggling 05:27
167Why the Broken Cursor? 02:49
168Solving Class Name Conflicts 02:49
169Fixing the Divider Height 01:43
170Restyling the Resizer Bar 04:49
171Applying the Dark Theme 00:51
172Adding State to the Editor 02:39
173Last Touch of Styling 01:13
174Redux Design 04:55
175Initial Scaffolding 04:56
176Action Interface Definitions 07:32
177Defining What a Cell Is 04:09
178Cells Reducer Setup 05:49
179Adding a Few Reducer Cases 02:22
180Creating and Exporting the Store 03:16
181React to Redux Connection 02:00
182Action Creator Return Type Annotations 05:14
183Easy Action Creator Implementations 05:43
184Handling Cyclical Imports 03:47
185Defining Direction 01:14
186Update Cell Logic 06:17
187Simple Updates with Immer 07:11
188Removing a Cell 03:37
189Swapping Cell Placement 06:34
190Inserting New Cells 09:46
191Small Gotcha with Immer 05:50
192Manual Testing of a Redux Store 06:27
193Back to React 03:50
194Creating a Typed Selector 03:15
195Selecting an Ordered List 02:45
196Rendering the List of Cells 03:44
197Cell Type Rendering 04:06
198Reminder on the Action Creator Helper 05:09
199Extracting Local State 07:44
200Extracting State from Text Cell 07:07
201The Action Bar Component 06:51
202Adding Icon Buttons 07:03
203Applying Custom CSS 04:46
204Last Touch of Styling 06:35
205Adding New Cells 05:13
206Displaying Add Cell 04:30
207Resolving the Key Warning 01:02
208Styling Add Cell 03:32
209A Touch More Styling 07:25
210Forcing Add Cell Visibility 07:16
211Understanding CSS Transition Curves 05:15
212Adding Vertical Spacing 03:35
213Why is Add Cell Weird 04:45
214Three Possible Solutions 10:59
215Refactoring the Redux Side 05:44
216Refactoring the React Side 04:35
217Should There Be a Bundles Reducer? 09:21
218Here's the Plan 02:55
219Defining Bundling Action Types 03:44
220Initial Reducer Implementation 04:29
221Finishing Up the Reducer 02:48
222Adding the Action Creator 07:00
223React Wire Up 08:03
224Adjusting the Reducer State 04:50
225Solving a Small Warning with useMemo 07:32
226Adding Eager Bundling 05:32
227Getting an Initial Bundle 03:23
228Showing a Loading Message 03:21
229Styling the Progress Bar 04:34
230Can We Estimate Bundle Duration? 03:55
231Fading In the Progress Bar 07:18
232Fixing the Background 05:59
233Referencing Code from Previous Cells 04:15
234Method of Implementation 03:52
235Calculating Cumulative Code 05:44
236Executing the Cumulative Code 02:59
237Adding a Show Function 04:44
238Showing Complex Values 02:44
239Showing a JSX Element 04:53
240Import Name Collisions 02:30
241Avoiding Naming Collisions 04:32
242Showing a React Component 02:57
243Selective Calls to Show 02:46
244Implementing a Show Function No-Op 03:56
245Extracting a Hook 04:09
246A Touch of CSS 01:50
247Fixing Edge Snaps 03:01
248The Path Moving Forward 03:19
249Planning Local Architecture 05:16
250An Easy Solution 05:00
251What's the App Look Like in the Future? 10:32
252Package Based Development 08:13
253Introducing Lerna 05:29
254Disclaimer on Lerna 01:51
255Lerna Setup 02:47
256Adding Modules with Lerna 08:24
257Linking Packages 06:11
258Adding TypeScript Support 08:07
259Adding TypeScript to the CLI 02:18
260Finishing TS Support 02:18
261Parallel Start Scripts 04:07
262Reading Command Line Arguments 07:43
263Using Commander to Build a CLI 07:43
264Specifying Command Line Options 05:57
265Communication from the CLI to the API 07:50
266What's that Directory Argument? 03:00
267Calculating File Paths 05:31
268The Local API 03:14
269Adding Dependencies and Running Express 04:23
270Error Handling Where? 04:27
271Wrapping Express Listen with a Promise 04:24
272Error Handling Solution 04:29
273Accessing the React App 02:48
274Connecting the Proxy 04:59
275Building a Production Bundle 02:36
276Understanding Package Links 12:09
277What's the Path 06:07
278Which Method Do We Use? 03:15
279Determining Our Execution Environment 05:03
280A Quick Test 02:00
281Creating the Cells Router 06:06
282Writing Cells to a File 04:44
283Reading File Contents 03:13
284Default Cell Values 01:28
285Adding a JSON Parser 00:47
286Adding Fetch Cell Logic to Redux 06:25
287The Fetch Cells Action Creator 03:50
288Handling Fetch Cell Types 04:47
289Saving a List of Cells 07:47
290When to Call Fetch? 05:15
291Saving a List of Cells 02:50
292Adding a Persist Middleware 06:31
293Detecting When to Save 05:51
294Debouncing Save Logic 02:14
295The Path to NPM Publishing 02:26
296Bootstrapping the Project 03:51
297A Touch More Setup 02:15
298Getting Ready to Publish 04:59
299Configuring the CLI 03:54
300Publishing to NPM 01:58
301NPM Organizations 04:43
302Declaring Scoped Packages 03:03
303Refactoring Package Names 04:21
304Auditing Dev Dependencies 06:28
305Adding Build Scripts 03:55
306The Case for Bundling 04:03
307Running ESBuild 06:00
308Creating a Repository 01:52
309Publishing with Lerna 01:06
310Does it Work? 01:49
311Next Steps 04:45
312TypeScript Overview 06:20
313Environment Setup 08:00
314A First App 04:44
315Executing TypeScript Code 05:04
316One Quick Change 03:36
317Catching Errors with TypeScript 07:23
318Catching More Errors! 05:16
319Course Overview 03:37
320Types 05:13
321More on Types 05:54
322Examples of Types 04:50
323Where Do We Use Types? 00:50
324Type Annotations and Inference 02:04
325Annotations with Variables 04:54
326Object Literal Annotations 06:54
327Annotations Around Functions 05:57
328Understanding Inference 03:52
329The Any Type 07:48
330Fixing the "Any" Type 01:50
331Delayed Initialization 03:06
332When Inference Doesn't Work 04:38
333More on Annotations Around Functions 04:57
334Inference Around Functions 06:09
335Annotations for Anonymous Functions 01:43
336Void and Never 02:50
337Destructuring with Annotations 03:36
338Annotations Around Objects 07:06
339Arrays in TypeScript 05:06
340Why Typed Arrays? 04:31
341Multiple Types in Arrays 02:58
342When to Use Typed Arrays 00:55
343Tuples in TypeScript 04:06
344Tuples in Action 05:29
345Why Tuples? 03:21
346Interfaces 01:27
347Long Type Annotations 04:43
348Fixing Annotations with Interfaces 04:37
349Syntax Around Interfaces 03:32
350Functions In Interfaces 04:47
351Code Reuse with Interfaces 04:16
352General Plan with Interfaces 03:13
353Classes 03:48
354Basic Inheritance 03:04
355Class Method Modifiers 06:42
356Fields in Classes 06:19
357Fields with Inheritance 04:19
358Where to Use Classes 01:11
359App Overview 02:46
360Bundling with Parcel 04:55
361Project Structure 03:20
362Generating Random Data 05:30
363Type Definition Files 05:18
364Using Type Definition Files 06:21
365Export Statements in TypeScript 05:07
366Defining a Company 04:44
367Adding Google Maps Support 07:39
368Google Maps Integration with TypeScript 04:07
369Exploring Type Definition Files 12:47
370Hiding Functionality 06:29
371Why Use Private Modifiers? Here's Why 08:26
372Adding Markers 09:19
373Duplicate Code 02:46
374One Possible Solution 06:39
375Restricting Access with Interfaces 05:36
376Implicit Type Checks 03:27
377Showing Popup Windows 06:48
378Updating Interface Definitions 07:12
379Optional Implements Clauses 06:07
380App Wrapup 08:09

Related courses

Frequently asked questions

What is React and Typescript: Build a Portfolio Project about?
Kick off your learning experience with an introduction on how to use React and Typescript together. Not familiar with Typescript? No problem! A lightning fast - but comprehensive - tutorial is included!
Who teaches this course?
It is taught by Stephen Grider, Udemy. You can find more courses by these instructors on the corresponding source pages.
How long is the course?
It contains 380 lessons with a total runtime of 29 hours 21 minutes. Every lesson is available to watch online at your own pace.
Is it free to watch?
Yes — this is a free online course on CourseFlix. You can watch every lesson without a paid subscription.
Where can I watch it online?
The course is available to watch online on CourseFlix at https://courseflix.net/course/react-and-typescript-build-a-portfolio-project. The page hosts every lesson with the integrated video player; no download is required.