State batching (Gộp trạng thái) là cơ chế tối ưu hiệu năng của React. Thay vì re-render ngay lập tức mỗi khi bạn gọi setState, React sẽ "gộp" nhiều lệnh setState lại với nhau và chỉ kích hoạt một lần re-render duy nhất.
Sự khác biệt giữa React 17 và 18:
- React 17: Chỉ thực hiện batching bên trong các event handlers của React (như onClick, onChange). Nếu bạn gọi setState bên trong setTimeout, Promise, hoặc native event handlers, React sẽ KHÔNG gộp chúng lại, dẫn đến nhiều lần re-render không cần thiết.
- React 18 (Automatic Batching): React tự động gộp tất cả các state updates bất kể chúng nằm ở đâu (kể cả trong setTimeout hay Promise).
(Mẹo: Nếu vì lý do nào đó bạn muốn ép React không gộp state và update DOM ngay lập tức, bạn có thể bọc code trong flushSync()).