🎯 What you'll practice: Planning and verifying an optimised dashboard combining Lessons 14–15.
1-B 2-A 3-A 4-B | 5 = lazy 6 = Suspense 7 = course cards with progress bars, card wrapped in React.memo, useMemo for filtered/sorted list, useCallback for handlers, at least one lazy-loaded route 8 = That the memoized cards do NOT re-render when their own props haven't changed while typing 9 = Without memo, every parent re-render (like a filter-box keystroke updating state) re-renders all its children by default, even ones whose props didn't change | 10 = const CourseCard=memo(({title,progress})=><div>{title} — {progress}%</div>); const Settings=lazy(()=>import("./Settings")); function Dashboard(){const [courses,setCourses]=useState([]);const [filter,setFilter]=useState("");const filtered=useMemo(()=>courses.filter(c=>c.title.includes(filter)),[courses,filter]);return <>{filtered.map(c=><CourseCard key={c.id} {...c}/>)}<Suspense fallback={<p>Loading...</p>}><Settings/></Suspense></>;}