# Valori, snapshots e submission

<PageBadges />

## Valori iniziali e override

Utilizzare `initialValues` per il record in fase di modifica. `overrideValues` ha la precedenza e sono utili
per i valori host autorevoli come uno stato fornito da un'applicazione.

Per il restauro completo, preferire `initialSnapshot`:

```jsx
<FormRenderer
  schema={schema}
  initialSnapshot={{
    raw_values: saved.raw_values,
    repeatable: saved.repeatable,
    timestamps: saved.timestamps,
  }}
  onSnapshotChange={(snapshot, change) => {
    if (change.dirty) queueDraft(snapshot)
  }}
  onSubmit={saveRecord}
/>
```

Un primo snapshot sostituisce `initialValues` per i valori dei campi grezzi.
voci ripetibili e timestamp client/server come uno stato coerente.

## Osservare drafts

`onSnapshotChange(snapshot, change)` viene chiamato per primo con `{ kind: "seed", dirty: false }`. Più tardi
modifiche utente utilizzare `{ kind: "change", dirty: boolean }`.

Il snapshot contiene:

```js
{
  raw_values: {},
  repeatable: {},
  timestamps: {
    created_at_client: null,
    updated_at_client: null,
    created_at_server: null,
    updated_at_server: null,
  },
}
```

## Invia record

`onSubmit(record, meta)` riceve il record strutturato descritto in
[Output e record](/it/core/output-records). `meta` contiene `rawValues`, `repeatable`, `timestamps`,
e `validationSummary`.

Se `onSubmit` restituisce una promessa, una sovrapposizione configurata con `autoCloseOverlayOnSubmit` chiude solo
dopo che la promessa si risolve. Un rifiuto lo lascia aperto. Utilizzare `submitBlockedReason` per l'applicazione
requisiti al di fuori di schema e `externalDirty` per lo stato dell'applicazione al di fuori di renderer.
