Part 07 · Render · 7.1.01

Trigger → render → commit và component identity

Render gọi component để tính UI description; commit áp thay đổi DOM. Render có thể lặp, interrupt hoặc bị discard nên phải thuần và không gây side effect.

Invariant: cùng props/state/context phải tạo cùng description; network, DOM mutation, timer và global mutation không nằm trong render.

1. Trigger, render và commit

Initial root render hoặc state update trigger work; parent render thường khiến descendants được xét. React gọi component trong render phase, so element tree/type/key, rồi commit DOM và chạy layout/passive effects theo lifecycle.

trigger -> render calculation -> reconciliation -> commit DOM -> effects

2. Purity và Strict Mode

Component không mutate object có trước, DOM, network hoặc global trong render. Strict Mode development cố ý gọi thêm render/effect lifecycle paths để lộ impurity và cleanup defects; đây không phải production “render bug” cần vô hiệu hóa.

3. State identity: position, type và key

State gắn với position + component type + key. Đổi type/key reset subtree; stable key từ domain data preserve đúng item. Index key làm state drift khi reorder/delete; random key remount toàn bộ mỗi render.

ChangeState outcomeUse
Same type/key/positionPreserveNormal update
New keyReset subtreeIntentional form/session reset
Index/random keyDrift/remountAvoid for mutable lists
Nested component definitionNew type per renderMove definition to module scope

4. Reconciliation evidence

React không deep-diff arbitrary component state/objects. Element type/key/tree quyết định reuse; props equality chỉ tham gia memoization. Dùng React DevTools Profiler, mount/unmount logs và state-preservation tests để chứng minh identity behavior.

Interview answer: “Keys are identity, not display labels. I use stable domain keys to preserve the intended state and change a key only when I deliberately want a subtree reset.”
Tài liệu: React Render and Commit · Rendering Lists · Preserving and Resetting State · React StrictMode