setCount(c => c + 1)).items.push(x), user.name = "x") instead of creating a new array/object — React compares references to decide whether to re-render, so an in-place mutation looks unchanged to it and silently fails to trigger a re-render.key props on list items, or using the array index as a key for a list that can reorder or have items removed from the middle — causes state to leak between the wrong rows, not just a visual glitch.useMemo/useCallback/React.memo everywhere by default, on renders that were never actually slow — the dependency array itself has to stay correct forever, which is its own maintenance cost.TypeScript is what most real React codebases are actually written in today — see TypeScript Fundamentals for the type-system side of the same ecosystem. Practice these exact patterns — state, effects, and closures — as runnable exercises in the code lab.