(11/25) Week 14 - Testing Components (Recorded)
- Upcoming next week: Quiz 2
- Slides
- Completed demo: Writing tests for the
StarRating
component (see commits on 11/20) - Documentation: Jest JavaScript Testing Framework
- Documentation: React Testing Library
- Extra credit assignment (due 12/2 at 5pm)
(11/18) Week 13 - Pessimistic vs. Optimistic UI, Reusable Component Patterns
- Upcoming on 12/2: Quiz 2
- Review final project requirements
- Slides
- Completed demo: Pessimistic vs. Optimistic UI
- Completed demo: Building a reusable
StarRating
component (see commits on 11/13) - Documentation: Font Awesome with React
- Assignment 8 (due 11/25 at 5pm)
(11/11) Week 12 - Veteran's Day
- No class
(11/4) Week 11 - Building a CRUD application
- Completed demo (see commits after 10/14/2024)
- Review practical exam
- Documentation: Proxying API Requests in Development
- Documentation: React Router
useNavigate()
- Documentation: React Toastify
- Assignment 7 (due 11/11 at 5pm)
(10/28) Week 10 - Practical Exam
(10/21) Week 9 - REST APIs, JSON Server, and fetch()
(part 2)
- Review Assignment 6 solution
- 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
- Documentation: JSON Server
- Making requests to static JSON files in Create React App
- Practical Exam (Week 10, 10/28 at 5pm)
(10/14) Week 8 - Client-side routing (part 1)
- Completed demo
- Documentation: React Router
- Assignment 6 (due 10/21 at 5pm)
- Practical Exam (Week 10, 10/28 at 5pm)
- Review Quiz 1
(10/7) Week 7 - Building an autocomplete input with debouncing
- Review Assignment 4 solution
- 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
- Assignment 5 (due 10/14 at 5pm)
(9/30) Week 6 - Quiz 1, Forms, controlled components
(9/23) Week 5 - Component props and data flow, Promises (Part 2), fetch()
- No class. Link to a pre-recorded lecture will be sent out via email.
- Review Assignment 3 solution
- Demo: Refactoring the Pokemon demo from Week 4 to use components and
fetch()
- Callbacks, Promises, and
fetch
- Making AJAX requests with
fetch()
- Completed demo
- React documentation: Passing Props to a Component
- Upcoming: Quiz 1 on
9/239/30 - No assignment. For extra practice, try refactoring assignment 3 to use
fetch()
and components with props.
(9/16) Week 4 - Working with arrays, rendering lists, conditional rendering, Surge
- Review Assignment 2 solution
- 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
- Assignment 3 (due 9/23 at 5pm)
- Upcoming: Quiz 1 on
9/239/30
(9/9) Week 3 - Introduction to JavaScript Frameworks with React
- Class will be held exclusively over Zoom
- TA introduction
- Slack overview
- Review Assignment 1 solution
- Slides: An Introduction to JavaScript Frameworks
- Completed demo
- Download RunJS - The JavaScript playground for your desktop
- Classes and objects in JavaScript
- Assignment 2 (due 9/16 at 5pm)
(9/2) Week 2 - Labor Day (No class)
- No class
(8/26) Week 1 - Course Introduction, Asynchronous vs. Synchronous, JSON, AJAX, Promises (Part 1), XSS
- Slides: Course Introduction
- Slides: Asynchronous vs. Synchronous, AJAX, JSON, Promises
- Install Prettier
- Install JSON Viewer Chrome extension
- 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
jquery
account. Render thename
anddescription
of 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
let ul = document.createElement("ul");
. To set the text of a node, you can use thetextContent
property (e.g.node.textContent = 'something'
). - Completed demo
- Assignment 1 (due 9/9 at 5pm)
- Demo: Submitting assignments on GitHub Classroom
- Overview of Git and GitHub
- Recommended reading: Understanding JavaScript Promises (free version)
- Recommended reading: Understanding JavaScript Promises (full version)