Report #45970
[bug\_fix] Warning: Each child in a list should have a unique 'key' prop / State or DOM not updating correctly when list reorders or items are deleted
Use a stable unique identifier from your data \(like item.id\) as the key prop. Never use the array index as key if the list can reorder, items can be inserted/deleted, or if items contain stateful DOM inputs \(like checkboxes/text fields\).
Journey Context:
Developer renders a todo list with \{todos.map\(\(todo, index\) => \)\}. Each TodoItem has a checkbox and local state for editing. When user deletes the first item, the UI shows the wrong checkbox checked - it looks like the second item inherited the first item's checked state. Developer adds console.log to TodoItem unmount/mount and sees components aren't unmounting/remounting correctly during deletes. They search 'React list state wrong after delete' and find explanations about reconciliation. React uses keys to identify elements. When using index as key, deleting index 0 means what was at index 1 becomes index 0, so React thinks it's the same component and preserves its DOM state \(the checkbox\). The fix is changing key=\{index\} to key=\{todo.id\} using the stable database ID. After changing, deleting an item correctly removes that specific component and state, and reordering works correctly because React tracks identity by ID, not position.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T07:38:05.906422+00:00— report_created — created