(12/1) Week 15 - Real-time Web Applications with WebSockets (Zoom)
- Slides
- Chat demo: Backend code (Node.js)
- Chat demo: Frontend code (React)
- Documentation: Blobs
- Final project (due Sunday 12/6)
(11/24) Week 14 - Class Cancelled
- Thanksgiving
(11/17) Week 13 - Written Exam, Tech, Money, and the Path to Freedom: Ask Me Anything
(11/10) Week 12 - Testing Components, Pessimistic vs. Optimistic UI (Zoom)
- Slides: Testing
- Completed demo: Writing tests for the
StarRatingcomponent (see commits on 11/20) - Documentation: Jest JavaScript Testing Framework
- Documentation: React Testing Library
- Slides: Pessimistic vs. Optimistic UI
- Completed demo: Pessimistic vs. Optimistic UI
- Assignment 9 (due in 2 weeks on 11/24)
- Written Exam (next week, Week 13, 11/17)
- Next week: Written Exam
- Next week: AMA: Submit any questions through this anonymous Google Form
(11/3) Week 11 - Reusable Component Patterns
- Demo: Building a reusable
StarRatingcomponent (see commits on 11/13) - Documentation: Font Awesome with React
- Deploying to Netlify
- Assignment 8 (due 11/10)
- Written Exam (Week 13, 11/17)
(10/27) Week 10 - Practical Exam
(10/20) Week 9 - REST APIs, JSON Server, fetch() (part 2), CRUD (part 2)
- Slides: REST APIs
- Make sure you install JSON Server version 0.17.4 via
npm install --global json-server@0.17.4 - Demo: JSON Server
- CRUD demo (see commits on 10/19 and 10/20)
- Documentation: JSON Server
- Documentation: Proxying API Requests in Development
- Documentation: React Toastify
- Assignment 7 (due 10/27)
(10/13) Week 8 - Client-side routing (part 1), CRUD (part 1)
- Completed demo (see commits on 10/12)
- Deploying a React app with React Router to Surge
- Documentation: React Router
- Assignment 6 (due 10/20)
- Practical Exam (Week 10, 10/27)
(10/6) Week 7 - Forms, Controlled Components, Building an autocomplete input with debouncing
- Completed forms demo
- Bootstrap documentation: Forms
- Assignment 4 (due 10/13)
- Demo 1: Static autocomplete input
- Demo 2: The
useRef()hook - Demo 3: Building an autocomplete input with debouncing
- React documentation:
useRef() - Create React App environment variables
- Week 7 summary
- Assignment 5 (due 10/13)
(9/29) Week 6 - Component props and data flow, Promises (Part 2), fetch()
- Demo: Refactoring the Pokemon demo from Week 4 to use components and
fetch() - Callbacks, Promises, and
fetch() - Completed demo
- React documentation: Passing Props to a Component
- Mini Assignment 1 (due 10/6)
(9/22) Week 5 - Working with arrays, rendering lists, conditional rendering, Surge
- Working with arrays
- Demo 1: Rendering a list of groceries in React
- Demo 2: Rendering a list of Pokemons from the Pokemon API
- Completed demo
- Deploying React apps made with Create React App to Surge
- React documentation: Rendering Lists
- React documentation: Conditional Rendering
- Week 5 summary
- Assignment 3 (due 9/29)
(9/15) Week 4 - Introduction to JavaScript Frameworks with React
- Slides: An Introduction to JavaScript Frameworks
- Completed demo (see commits)
- Download RunJS - The JavaScript playground for your desktop
- Classes and objects in JavaScript
- Week 4 summary
- Assignment 2 (due 9/22)
(9/8) Week 3 - JSON, AJAX, Promises (Part 1), XSS
- Demo starter
- Demo 1: Fetching and rendering JSON from an AJAX request
- Exercise 1: When the Repos button is clicked, fetch the JSON from https://api.github.com/orgs/jquery/repos, which contains a list of repositories from the
jqueryaccount. Render thenameanddescriptionof each repository in an unordered list within#results. - Demo 2: Sanitize HTML with DOMPurify to prevent XSS attacks
- Demo 3: Rendering using DOM nodes
- Exercise 2: Update the Repos button functionality to render using DOM nodes instead of DOMPurify, as this is a more effective means of preventing XSS attacks. Instead of using a document fragment, your container element can be
const ul = document.createElement("ul");. To set the text of a node, you can use thetextContentproperty (e.g.node.textContent = 'something'). - Completed demo
- Week 3 summary
- Assignment 1 (due 9/15)
(9/1) Week 2 - Labor Day (No class)
- No class
(8/25) Week 1 - Course Introduction, Synchronous vs. Asynchronous
- Slides: Course Introduction
- Technical skills assessment
- Slides: Asynchronous vs. Synchronous, AJAX, JSON, Promises
- Install Prettier
- Install JSON Formatter Chrome extension
- Overview of Git and GitHub
- Demo: Submitting assignments on GitHub Classroom
- Recommended reading: Understanding JavaScript Promises (free version)
- Recommended reading: Understanding JavaScript Promises (full version)

