Development

React.js Professional Course

Larger React apps: routing, data loading, and components that stay maintainable.

★★★★★4.8 · Based on 94 learners88 lessons · 22 hr

React.js Professional Course is for someone who has built a small React screen and wants the next layer: routing, shared state, and data loading that does not tangle the components. It assumes the React.js Development course or equivalent practice.

Course syllabus

  1. 01. Feature folders

    • Folders and component boundaries

      A screen owns its pieces, and a shared control does not own the screen's data.

      15 min
    • One folder for the feature

      The list, the detail, and the form sit together.

      17 min
    • What other routes may import

      They import the page, not the private pieces beside it.

      13 min
    • Props are the surface

      The child receives what it may use, and the parent keeps the rest.

      16 min
    • A view that only displays

      It renders the props and does not know the URL or the request.

      18 min
    • The page knows the route

      The page component reads the path and starts the load.

      14 min
    • A helper used by one feature

      The function stays in that folder until a second feature needs it.

      18 min
    • Split a file that has two jobs

      If the name needs and, it is two modules.

      12 min
  2. 02. Routes and links

    • One router for the app

      A single map sends each path to a page.

      17 min
    • Pages and links

      Every screen has a path, and the navigation uses those paths.

      15 min
    • A layout route that stays mounted

      The shell remains while the child route changes.

      16 min
    • Mark the link for the current path

      The active item is a style on the real link.

      13 min
    • A page for a path you do not have

      An unknown URL renders a deliberate page.

      15 min
    • A section with nested routes

      The section layout and the inner page are two levels.

      17 min
    • Send an old path to the path you kept

      A redirect is a route with a destination, not a special case in a click handler.

      13 min
    • Navigate through the router

      The URL changes, and the tree stays in agreement with it.

      16 min
  3. 03. The id and the query

    • Read the id from the path

      The detail page takes the id from the URL.

      18 min
    • An id that is not in the path

      You do not guess a record when the param is missing.

      14 min
    • Put a filter in the search string

      A refresh keeps the filter because it is in the query.

      18 min
    • Change the query and keep the path

      The page stays put while the search string updates.

      12 min
    • Treat a param as a string until you check it

      The router gives you text, not a trusted id.

      17 min
    • Back should restore the list

      The list query is still in the history entry.

      15 min
    • Build paths in one function

      Links and redirects call the same helper.

      16 min
    • The open record is the id in the URL

      Any component that needs the current item reads the route.

      13 min
  4. 04. Waiting, empty, and failure

    • The page starts the request

      The screen that renders the data is the one that asks for it.

      15 min
    • Draw waiting, a result, or a failure

      Each outcome has markup, and only one of them shows.

      17 min
    • Loading and empty states

      A spinner, zero rows, and an error are three different screens.

      13 min
    • Zero rows is a result

      The empty view says there are no records and what would add one.

      16 min
    • Say that the load failed

      The person gets a sentence and a way to try the request again.

      18 min
    • Keep the current rows during a refetch

      A refresh does not blank the list while the next response is on the way.

      14 min
    • Drop a response for a previous id

      If the route changed, the older request must not render.

      18 min
    • Pass status into the view

      The display component does not fetch the list itself.

      12 min
  5. 05. List and detail

    • Use the record id as the key

      The key stays stable when the list reorders.

      17 min
    • The row is a link to the detail path

      Opening an item is navigation, so the URL can be shared.

      15 min
    • The detail loads by id

      Do not rely on an object that only existed in the list's memory.

      16 min
    • An id the server does not know

      The page says the record is missing.

      13 min
    • Keep the editor off the list

      The form has its own route or its own state.

      15 min
    • Ask for a page of rows

      The first load has a limit you chose.

      17 min
    • The new record shows up on the list

      After a save, the list includes what the server stored.

      13 min
    • Highlight the row that matches the path

      The selected id is the one in the URL.

      16 min
  6. 06. State two screens share

    • Leave a toggle in the component that draws it

      Panel open state does not belong in a store for the whole app.

      18 min
    • Lift a value when siblings both use it

      The parent holds it and passes it down.

      14 min
    • Lifting state and context

      Context carries a value many routes read, and local state stays where it is.

      18 min
    • Place the provider above those routes

      A provider inside one page cannot supply the next page.

      12 min
    • Read the context through a named function

      Callers use a hook with a name, not a scattered lookup.

      17 min
    • Keep the context value stable

      A new object on every render wakes every consumer.

      15 min
    • Leave the fetched list on the page that fetched it

      A second screen shares it only when it truly must.

      16 min
    • Put restorable choices in the URL

      A filter in memory disappears on refresh.

      13 min
  7. 07. Forms that send a draft

    • Forms and predictable updates

      The draft, the request, and the saved record are three values.

      15 min
    • Hold the draft in one object

      Each field writes into that object.

      17 min
    • The inputs show the draft

      The screen matches the object before you send it.

      13 min
    • Submit the object you hold

      The request body is the draft, not a fresh read of the DOM.

      16 min
    • Ignore a second submit while the request runs

      The button stays quiet until the status returns.

      18 min
    • Show field errors the server named

      A rejected body maps messages onto those fields.

      14 min
    • Replace the draft only after a success

      A failure leaves what the person typed.

      18 min
    • Start an edit from a copy of the record

      The form does not mutate the object the list is rendering.

      12 min
  8. 08. The list after a write

    • Use the id from the create response

      The server's id is the one the routes will use.

      17 min
    • Update the list from that response

      Insert the record or refetch, and do it in a place you can find.

      14 min
    • Leave the draft in place when the save fails

      The person can correct a field and send again.

      15 min
    • Remove the id you deleted

      The list drops the row, and the detail route treats it as gone.

      12 min
    • Open the new record's path after create

      The URL becomes the id you just stored.

      14 min
    • Update the one copy the screens read

      A second shadow object will drift.

      16 min
    • Do not refetch over an unsaved draft

      A reload of the form must not wipe an edit in progress.

      12 min
    • Name the function that applies a response

      The update lives in one function, called from the save.

      15 min
  9. 09. Slots and composition

    • A layout renders its child route

      The shell does not import every page.

      18 min
    • A header receives the title

      It does not fetch the record to learn the name.

      13 min
    • Two looks, one button

      Primary and quiet are props on the same component.

      17 min
    • The dialog's open flag stays local

      The parent opens it, and the dialog does not publish a global flag.

      11 min
    • Split a component that is mostly booleans

      Separate components for separate cases.

      16 min
    • The row markup is a component

      The map renders that component and passes the record.

      14 min
    • Pass an element when you need a slot

      A child covers the case before a custom render function.

      15 min
    • Promote a component when a second feature needs it

      Until then it stays next to the first feature.

      12 min
  10. 10. A route that fails

    • A boundary catches a render error

      The parent shows a fallback instead of a blank tree.

      14 min
    • A failed request stays in request state

      You already branch on it, so you do not throw for a missing record.

      16 min
    • Wrap the route, not the whole app

      One page can fail while the shell remains.

      12 min
    • The fallback has a way back

      A sentence, and a link to a path that still works.

      15 min
    • A bad import is still a bug

      The boundary is not a cover for a missing module.

      18 min
    • Keep the detail in the log

      The screen shows a sentence, and the console keeps the error.

      13 min
    • Reset when the path changes

      The next route starts without the previous failure.

      17 min
    • Retry belongs on the request

      A network failure uses the error state and asks again.

      11 min
  11. 11. One feature from URL to save

    • Say what the feature lets someone do

      Create a record, then open it again later.

      16 min
    • Add the feature folder

      Pages, the form, and the function that calls the API.

      14 min
    • Add the paths

      A list path, a detail path, and a path for the form if it is separate.

      15 min
    • Load with three visible outcomes

      Waiting, a result, and a failure.

      12 min
    • Share only what a second route must read

      Everything else stays in the component that uses it.

      14 min
    • Save the draft and update the list

      The response lands in the data the list renders.

      16 min
    • Include the failures

      A missing id, rejected fields, and a request that does not return.

      12 min
    • Walk the path out loud

      Which file reads the URL, which file sends the body, and which file paints the error.

      15 min

Lecture videos stay with the course. Playback for enrolled students will open once payments are available. Video links are not published on this page.