Doorgaan naar hoofdinhoud

De huidige staat uit een draft halen

[Onofficiële Beta-vertaling]

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

Immer biedt een named export current die een kopie maakt van de huidige staat van de draft. Dit is erg handig voor debugging (aangezien deze objecten geen Proxy-objecten zijn en niet als zodanig gelogd worden). Referenties naar current kunnen veilig uit een produce-functie gelekt worden. Met andere woorden: current geeft een momentopname van de huidige staat van een draft.

Objecten gegenereerd door current werken vergelijkbaar met objecten die door produce zelf zijn gemaakt.

  1. Ongewijzigde objecten worden structureel gedeeld met de originele objecten.

  2. Als er geen wijzigingen aan een draft zijn gemaakt, geldt over het algemeen original(draft) === current(draft), maar dit is niet gegarandeerd.

  3. Toekomstige wijzigingen aan de draft worden niet doorgevoerd in het object geproduceerd door current (behalve bij referenties naar niet-draftbare objecten).

  4. In tegenstelling tot produce zullen objecten gemaakt door current niet bevroren worden.

Gebruik current met mate, het kan een potentieel kostbare operatie zijn, vooral bij gebruik van ES5.

Let op: current kan niet worden aangeroepen op objecten die geen drafts zijn.

Voorbeeld​

Het volgende voorbeeld toont het effect van current (en original):

const base = {
x: 0
}

const next = produce(base, draft => {
draft.x++
const orig = original(draft)
const copy = current(draft)
console.log(orig.x)
console.log(copy.x)

setTimeout(() => {
// this will execute after the produce has finished!
console.log(orig.x)
console.log(copy.x)
}, 100)

draft.x++
console.log(draft.x)
})
console.log(next.x)

// This will print
// 0 (orig.x)
// 1 (copy.x)
// 2 (draft.x)
// 2 (next.x)
// 0 (after timeout, orig.x)
// 1 (after timeout, copy.x)