Part 07 · Production Labs · 7.3

8 lab React production UI

Dùng Order + Payment API của Part 16 làm domain xuyên suốt. Mỗi lab phải chứng minh loading, error, empty, partial, unauthorized và accessibility — không chỉ nộp screenshot happy path.

Quy ước bàn giao: mỗi lab gồm code chạy được, test tự động, README quyết định/trade-off và evidence trước–sau khi sửa. Dữ liệu test phải tái hiện được race/failure, không phụ thuộc thao tác may mắn.

Lab 01 · Render và identity laboratory

Xây danh sách order có reorder, insert/delete, row-local draft, focus và expanded state. Cố ý dùng index key, random key, nested component declaration và mutation trong render để quan sát lỗi dưới Strict Mode.

Việc phải làm

Acceptance: reorder không đổi draft/focus sang order khác; Strict Mode không tạo side effect từ render; test fail trên bản lỗi và pass sau khi sửa.

Lab 02 · State model và typed form

Xây Order form, so sánh controlled/uncontrolled field, rồi dùng reducer và discriminated state cho idle, editing, submitting, success, error.

Việc phải làm

Acceptance: input không đổi controlled mode; pending/error/success có semantic status; double click/Enter không tạo hai command; server validation vẫn authoritative.

Lab 03 · Effect và race clinic

Tạo một detail/search screen có effect loop, stale closure, missing subscription cleanup và response về sai thứ tự. Trước tiên ghi test tái hiện, sau đó loại Effect không cần thiết và sửa request lifecycle.

Việc phải làm

Acceptance: debounce có flush/cancel semantics rõ; response cũ không overwrite order mới; không leak timer/listener; exhaustive-deps không bị suppress; network trace chứng minh cancellation hoặc stale-result guard.

Lab 04 · Context, custom Hook và external store

Thiết kế ownership cho auth, theme và order draft. Profile một provider object rộng gây rerender, rồi split theo responsibility/change frequency. Viết useOnlineStatususeOrderSubscription.

Việc phải làm

Acceptance: Profiler cho thấy consumer không liên quan giảm render; unsubscribe hoạt động; unchanged store giữ snapshot identity; SSR/hydration không mismatch.

Lab 05 · Server state và optimistic mutation

Cấu hình query key, cache freshness, prefetch và invalidation cho order detail/list. Thực hiện create/cancel order optimistic với rollback/reconcile và idempotency key.

Việc phải làm

Acceptance: không duplicate command khi retry; optimistic row có pending/failure state; rollback/reconcile deterministic; cache không collision giữa tenant/filter/page.

Lab 06 · Routing, errors, security và accessibility

Tạo nested routes/loaders/actions/error boundaries cho order list/detail/payment. Bao phủ unauthorized, forbidden, not found và recoverable server error; giữ title, focus và scroll semantics.

Việc phải làm

Acceptance: deep link/reload/back-forward đúng; error boundary phục hồi đúng region; injected HTML không execute; accessibility tree và manual keyboard flow đạt.

Lab 07 · Performance và delivery

Dùng React Profiler và browser Performance trace tìm wide rerender, expensive list, Context churn, layout work và duplicate bundle. Chỉ áp optimization sau khi lưu baseline.

Việc phải làm

Acceptance: nộp trace/Profile trước–sau, metric và cách tái hiện; optimization không làm sai state/focus/a11y; production build đạt budget đã định.

Lab 08 · SSR, hydration và test pyramid

SSR/stream/hydrate một route Order, cố ý tạo mismatch bằng time, random và browser-only branch rồi sửa bằng deterministic data, useId hoặc client boundary đúng chỗ.

Việc phải làm

Acceptance: không suppress hydration mismatch bừa; server/client initial output khớp; deep link hoạt động từ clean browser; release version quan sát và rollback được.

Rubric đánh giá

MứcTiêu chí bắt buộcEvidence
1 · FunctionalComponents chạy đúng happy path và code có thể reproduce.Demo + smoke tests
2 · Production-readyState/effect/data/error/a11y đúng, failure states có tests.Automated suite + boundary fixtures
3 · SeniorRace, recovery, performance, hydration và security có quyết định/trade-off.Trace, metrics, threat/failure notes, rollback plan