{"data":{"content":{"fields":{"slug":"/agenda/workshop-agenda","type":"agenda"},"frontmatter":{"title":"Workshop Agenda"},"html":"<p>This workshop is typically run as a one- or two-day session. The slides and materials remain the same between the two. Obviously we can’t cover quite as much information in a one-day session, so sections we won’t be covering are marked below.</p>\n<h1>Agenda</h1>\n<h2>Project setup and build tooling</h2>\n<p>A preliminary discussion for some general build tools and terminology. From this foundational basis, it will become apparent how these disparate pieces of build tooling coalesce to form a modern React application.</p>\n<ul>\n<li>NodeJS</li>\n<li>\n<p>NPM</p>\n<ul>\n<li><em>Yarn</em></li>\n</ul>\n</li>\n<li>\n<p>create-react-app</p>\n<ul>\n<li>webpack</li>\n<li>jest</li>\n<li>Basic project structure</li>\n</ul>\n</li>\n</ul>\n<hr>\n<p>Lab 1 - Project setup</p>\n<hr>\n<h2>React, Components, State, and Props</h2>\n<p>We will begin by illustrating some foundational goals of React and the problems that React is trying to solve. We’ll segue into components (functional and class-based), including concepts such as lifecycle methods, expression bindings, state, and props.</p>\n<ul>\n<li>\n<p>What is JSX?</p>\n</li>\n<li>\n<p>Functional components and what is a pure component</p>\n</li>\n<li>\n<p>Class-based components</p>\n<ul>\n<li>render method</li>\n<li>lifecycle methods</li>\n</ul>\n</li>\n<li>\n<p>Expression bindings</p>\n</li>\n<li>\n<p>Props</p>\n<ul>\n<li>Sending props downward</li>\n<li>children</li>\n<li>Sending props upward</li>\n</ul>\n</li>\n<li>\n<p>State</p>\n<ul>\n<li>What is state?</li>\n<li>Using component state</li>\n<li>Updating state</li>\n</ul>\n</li>\n</ul>\n<hr>\n<p>Lab 2 - Your first React component</p>\n<hr>\n<h2>Routing and Single Page Apps</h2>\n<p>In this section, we’ll deep dive into react-router, and explore how this de-facto declarative routing solution is used in a modern single-page application built with React.</p>\n<ul>\n<li>\n<p>Using the <code class=\"language-text\">BrowserRouter</code></p>\n<ul>\n<li><code class=\"language-text\">Route</code></li>\n<li><code class=\"language-text\">Link</code></li>\n<li>Routing with components</li>\n</ul>\n</li>\n</ul>\n<hr>\n<p>Lab 3 - Routing</p>\n<hr>\n<h2>Introduction to Redux</h2>\n<blockquote>\n<p>Note: One-day workshops will skip this section</p>\n</blockquote>\n<p>Redux is the definitive state-management solution for React. In this section, we’ll explore some concepts of Redux like actions, action creators, reducers, and the store, while <em>briefly</em> describing its relation to a React application</p>\n<ul>\n<li>The central tenets of Redux</li>\n<li>Central, global store</li>\n<li>Actions</li>\n<li>Action creators</li>\n<li>Reducers</li>\n</ul>\n<h2>React + Redux</h2>\n<blockquote>\n<p>Note: One-day workshops will skip this section</p>\n</blockquote>\n<p>In this section, we’ll tie together the concepts of React <em>and</em> Redux using the library react-redux, as well as some more advanced topics like async action creators (for data fetching and other async actions), as well as when it makes sense to integrate Redux into your application.</p>\n<ul>\n<li>When to integrate Redux</li>\n<li>Setting up React + Redux</li>\n<li>Async action creators</li>\n<li>Middleware</li>\n</ul>\n<hr>\n<p>Lab 4 - React + Redux</p>\n<hr>\n<h2>Context</h2>\n<p>React components can build localized containers to share state, without resorting to a global-level solution like Redux.</p>\n<ul>\n<li>What is Context?</li>\n<li>How does it compare to Redux?</li>\n<li>When should I use it?</li>\n</ul>\n<h2>Forms</h2>\n<p>How do we prompt and collect information from the user? We’ll cover Forms, including how to build, validate, and process user input.</p>\n<ul>\n<li>Form solutions</li>\n<li>Building a simple form</li>\n<li>Power of in-page validation</li>\n</ul>\n<hr>\n<p>Lab 5 - Forms</p>\n<hr>\n<h2>Hooks</h2>\n<p>Advanced component patterns let us supercharge functional components. We’ll discuss how you can integrate your components with context, state, and other strata.</p>\n<h2>Special topics</h2>\n<p>Time-permitting, we’ll cover more advanced/niche topics like next-gen React features, static typing, design patterns, and popular third-party libraries. We try to set aside a few hours to tailor the discussion towards topics of interest, so let us know if you have subjects/libraries you’d like us to cover. We’re here to help, and want to deliver the most meaningful and valuable content we can!</p>\n<h2>Capstone</h2>\n<p>We’ve reached the end! One last lab to cover the breadth of the covered topics. If we run out of time this is a good exercise to work at home.</p>\n<hr>\n<p>Lab 5 - Capstone</p>\n<hr>\n<h2>Prerequisites</h2>\n<ul>\n<li>Working understanding of JavaScript is essential</li>\n<li>Familiarity with ES2015, but not necessarily full understanding</li>\n<li>Some experience with build tooling is a plus, as is familiarity with the Node/NPM ecosystem</li>\n<li>Some experience with other frameworks (e.g. AngularJS, Angular, Vue, or even React)</li>\n</ul>\n<h2>Technical requirements</h2>\n<ul>\n<li>Latest NodeJS LTS</li>\n<li>NPM (comes with NodeJS)</li>\n<li>Yarn is a <em>nice to have</em> but is not required—although we would strongly recommend it!</li>\n</ul>\n<p>We’ll send out an e-mail a week or so before the workshop with various links and instructions for setting up your computer. The less time we spend debugging specific environment issues, the more time we’ll have for actual content 😄</p>"}},"pageContext":{"next":{},"slug":"/agenda/workshop-agenda"}}