Installatie
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 immerNPM:
npm install immerCDN: 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.mindoordevelopmentin de URL voor een development build.
- Unpkg:
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:
| Feature | Description | Method to call |
|---|---|---|
| Array Methods optimization | Optimizes array method handling for improved performance with array-heavy operations | enableArrayMethods() |
| ES2015 Map and Set support | To enable Immer to operate on the native Map and Set collections, enable this feature | enableMapSet() |
| JSON Patch support | Immer can keep track of all the changes you make to draft objects. This can be useful for communicating changes using JSON patches | enablePatches() |
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.