Doorgaan naar hoofdinhoud

Installatie

[Onofficiรซle Beta-vertaling]

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

Immer kan als directe dependency worden geรฏnstalleerd en werkt in elke ES5-omgeving:

  • Yarn: yarn add immer

  • NPM: npm install immer

  • CDN: Het beschikbare globale object is immer

    • Unpkg: <script src="https://unpkg.com/immer"></script>
    • JSDelivr: <script src="https://cdn.jsdelivr.net/npm/immer"></script>
    • โš ๏ธ Controleer bij gebruik van een CDN de URL in je browser om te zien naar welke versie deze verwijst. Zo voorkom je dat gebruikers per ongeluk een nieuwere versie krijgen bij toekomstige updates. Gebruik daarom een URL zoals: https://unpkg.com/immer@6.0.3/dist/immer.umd.production.min.js. Vervang production.min door development in de URL voor een development build.

Kies je Immer-versieโ€‹

Dit gedeelte is alleen van toepassing op versie 6 en later

Om Immer zo klein mogelijk te houden, zijn niet-essentiรซle functies optioneel gemaakt en moeten ze expliciet worden ingeschakeld. Hierdoor nemen ongebruikte functies geen ruimte in wanneer je je applicatie voor productie bundelt.

De volgende functies kunnen worden ingeschakeld:

FeatureDescriptionMethod to call
Array Methods optimizationOptimizes array method handling for improved performance with array-heavy operationsenableArrayMethods()
ES2015 Map and Set supportTo enable Immer to operate on the native Map and Set collections, enable this featureenableMapSet()
JSON Patch supportImmer can keep track of all the changes you make to draft objects. This can be useful for communicating changes using JSON patchesenablePatches()

Als je bijvoorbeeld produce op een Map wilt gebruiken, moet je deze functie eenmalig bij het opstarten van je applicatie inschakelen:

// In your application's entrypoint
import {enableMapSet} from "immer"

enableMapSet()

// ...later
import {produce} from "immer"

const usersById_v1 = new Map([
["michel", {name: "Michel Weststrate", country: "NL"}]
])

const usersById_v2 = produce(usersById_v1, draft => {
draft.get("michel").country = "UK"
})

expect(usersById_v1.get("michel").country).toBe("NL")
expect(usersById_v2.get("michel").country).toBe("UK")

Standaard Immer begint bij ~3KB gzipped. Elke ingeschakelde plugin voegt daar ~1-2 KB aan toe. De uitsplitsing is als volgt:

Import size report for immer:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ (index) โ”‚ just this โ”‚ cumulative โ”‚ increment โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ import * from 'immer' โ”‚ 6908 โ”‚ 0 โ”‚ 0 โ”‚
โ”‚ produce โ”‚ 4183 โ”‚ 4183 โ”‚ 0 โ”‚
โ”‚ enableMapSet โ”‚ 4971 โ”‚ 4980 โ”‚ 797 โ”‚
โ”‚ enablePatches โ”‚ 5335 โ”‚ 6097 โ”‚ 1117 โ”‚
โ”‚ enableArrayMethods โ”‚ 4768 โ”‚ 6659 โ”‚ 562 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
(this report was generated by npmjs.com/package/import-size)

Immer op oudere JavaScript-omgevingen?โ€‹

Standaard probeert produce proxies te gebruiken voor optimale prestaties. Op oudere JavaScript-engines zoals Microsoft Internet Explorer of React Native (bij < v0.59 of bij gebruik van de Hermes-engine in React Native < 0.64 op Android) is Proxy echter niet beschikbaar. In die gevallen valt Immer terug op een ES5-compatibele implementatie die identiek werkt, maar iets langzamer is.

  • Sinds versie 6 moet ondersteuning voor de fallback-implementatie expliciet worden ingeschakeld via enableES5().

  • Versie 10 laat de fallback-implementatie volledig vallen en werkt niet in browsers/engines zonder Proxy-ondersteuning.