Doorgaan naar hoofdinhoud

createDraft / finishDraft

[Onofficiële Beta-vertaling]

Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →

egghead.io lesson 11: Creating async producers (and why you shouldn’t)

createDraft en finishDraft​

createDraft en finishDraft zijn twee low-level functies die vooral nuttig zijn voor bibliotheken die abstracties bovenop Immer bouwen. Ze voorkomen dat je telkens een functie moet aanmaken om met drafts te werken. In plaats daarvan kun je een draft aanmaken, aanpassen, en op een later tijdstip afronden, waarna de volgende immutable staat wordt geproduceerd.

Daarnaast kunnen createDraft / finishDraft worden gebruikt voor asynchrone updates aan drafts:

import {createDraft, finishDraft} from "immer"

const user = {
name: "michel",
todos: []
}

const draft = createDraft(user)
draft.todos = await (await window.fetch("http://host/" + draft.name)).json()
const loadedUser = finishDraft(draft)

Let op: Dit is een anti-patroon! Haal eerst data op voor je de user draft. Anders worden updates aan de gebruiker tijdens het async proces niet meegenomen in de draft.

Let op: finishDraft accepteert een patchListener als tweede argument, vergelijkbaar met produce, om patches vast te leggen.

Waarschuwing: over het algemeen raden we aan produce te gebruiken in plaats van de createDraft / finishDraft combinatie. produce is minder foutgevoelig en maakt een duidelijkere scheiding tussen mutabiliteit en immutabiliteit in je codebase.