Bỏ useState cho form React 19 — useActionState và useOptimistic
useActionState và useOptimistic giúp form React 19 bỏ hẳn useState cho loading, lỗi, và cho giao diện phản hồi tức thì trước khi server trả lời.
THE ENGINEERING JOURNAL
Những điều mình xây, những vấn đề mình gặp, và những gì mình học được. Về phần mềm, từ bên trong.
useActionState và useOptimistic giúp form React 19 bỏ hẳn useState cho loading, lỗi, và cho giao diện phản hồi tức thì trước khi server trả lời.
Bulkhead là gì, vì sao một dependency chậm kéo sập cả app, và cách tự viết bulkhead bằng TypeScript với semaphore chỉ trong khoảng 50 dòng.
Cách cache pnpm store, node_modules và build output trong GitHub Actions giúp CI nhanh gấp 4 lần, kèm lỗi cache key hay gặp.
Event loop bị chặn vì một hàm CPU nặng? worker_threads đẩy việc đó ra luồng riêng, kèm code TypeScript và mấy cái bẫy hay gặp.
TypeScript không phân biệt UserId với OrderId vì cả hai đều là string. Branded types dựng hàng rào ngay lúc compile, chặn bug trộn tham số từ gốc.
Vì sao Prisma vẫn sinh N+1 query dù không lazy-load, cách phát hiện bằng query log và sửa bằng include, select, gom id một lần.
Mock ở tầng network bằng MSW thay cho vi.mock module — test API trong Vitest sát thực tế hơn, chạy nhanh và dùng chung handler với môi trường dev.
Cách build thư viện TypeScript cho cả ESM lẫn CJS bằng tsup, khai báo exports map chuẩn và bốn bẫy khiến người dùng import bị lỗi.
RSC không khó, khó là chỗ đặt 'use client'. Mình kể lại lần bundle 480KB vì một dòng 'use client' nằm sai chỗ, và cách kéo nó xuống.
Circuit breaker là gì, vì sao retry mù quáng kéo sập cả hệ thống, và cách tự viết một circuit breaker bằng TypeScript.