Blog
Debounce vs Throttle: When to Use Each (and Why It Matters)
Debounce and throttle both limit how often a function runs, but they solve different problems. Learn when to use each, how to build them as React hooks, and the mistakes that trip up most developers.
Stop Fetching Data Sequentially When It Could Be Parallel
Fetching independent data one request at a time is one of the most common — and most expensive — performance mistakes in React apps. Here's how to spot it and fix it with Promise.all.
You Probably Don't Need Redux Yet
Most React apps don't need global state libraries at the start. Server state, local state, and context cover almost everything — here's when to actually reach for Zustand or Redux.
When to Replace Multiple useState with useReducer
Multiple useState calls that change together, handlers calling three setters in a row, state that gets out of sync — these are the signs it's time to reach for useReducer.
New way of passing ref to child in React 19
React 19 simplifies ref forwarding by treating ref as a normal prop. Learn how this change reduces boilerplate and improves component ergonomics.
Composition vs Compound Components in React
Understand the key differences between composition and compound component patterns in React, and when to use each approach for building reusable UI.