--- title: Nested contexts and stable identity description: Compose local record contexts and select stable React keys for record lists. order: 20 toc: - id: nested-records title: Nested records - id: optional-provider title: Optional provider - id: stable-keys title: Stable identity --- ## Nested records {#nested-records} Providers can be nested. Fields inside the inner provider read the local record, and the outer record becomes active again outside that boundary. ```tsx ``` Do not use record context as a mutable store. Pass a new record reference when new data arrives, and keep editable values in a form or another state layer. ## Optional provider {#optional-provider} `OptionalRecordProvider` creates a new boundary only when `value` is neither `undefined` nor `null`. A nullish value preserves the nearest parent record, while `0`, `false`, and an empty string still create a new boundary. This is useful for components that accept a prop but can also compose into an existing record view. ```tsx function ProductCard({ product }: { product?: Product }) { return ( ) } ``` ## Stable identity {#stable-keys} `RecordsIterator` uses string, number, and bigint records directly as keys. For object records it reads `id` by default. Other values and objects without an `id` can provide a `recordKey` callback; objects can also provide a field name. It falls back to the array index only when no valid key is available. ```tsx } recordKey="code" /> `${revision.documentId}:${revision.version}`} > ```