Svelte fournit des versions réactives de différentes classes natives comme
[`Map`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Map),
[`Set`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Set) et
[`URL`](https://developer.mozilla.org/fr/docs/Web/API/URL), qui peuvent être utilisées exactement
comme leur version native, ainsi qu'un certain nombre d'utilitaires permettant de bien gérer la
réactivité.
```js
// @noErrors
import {
MediaQuery,
SvelteDate,
SvelteMap,
SvelteSet,
SvelteURL,
SvelteURLSearchParams,
createSubscriber
} from 'svelte/reactivity';
```
## MediaQuery
Disponible à partir de la version 5.7.0
Crée une media query et fournit une propriété `current` qui reflète si oui ou non celle-ci
correspond.
Servez-vous en avec précaution — pendant le rendu côté serveur, il n'y a aucun moyen de connaître la
valeur correcte, causant potentiellement des problèmes de contenu lors de l'hydratation.
Si vous pouvez utiliser une media query en CSS pour obtenir le même résultat, faites-le.
```svelte
{large.current ? 'écran large' : 'écran pas large'}
```
```dts
class MediaQuery extends ReactiveValue {/*…*/}
```
- `query` Une chaîne de caractères de media query
- `fallback` Valeur de secours pour le serveur
## SvelteDate
Une version réactive de l'objet natif
[`Date`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Date). Lire
une `SvelteDate` (que ce soit via des méthodes comme `date.getTime()` ou `date.toString()`, ou via
des choses comme
[`Intl.DateTimeFormat`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))
dans un [effet](/docs/svelte/$effect) ou un [dérivé](/docs/svelte/$derived) va déclencher sa
ré-évaluation lorsque la valeur de la date change.
```svelte
The time is {formatter.format(date)}
```
```dts
class SvelteDate extends Date {/*…*/}
```
```dts
constructor(...params: any[]);
```
## SvelteMap
Une version réactive de l'objet natif
[`Map`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Map).
Lire le contenu d'une `SvelteMap` (en itérant, ou en lisant `map.size`, ou en utilisant
`map.get(...)`. ou `map.has(...)` comme dans [l'exemple de
morpion](/playground/0b0ff4aa49c9443f9b47fe5203c78293) ci-dessous) dans un
[effet](/docs/svelte/$effect) ou un [dérivé](/docs/svelte/$derived) va déclencher sa ré-évaluation
si nécessaire lors de la mise à jour de la map.
Notez que les valeurs au sein d'une map réactive ne sont _pas_ rendues [profondément
réactives](/docs/svelte/$state#Deep-state).
```svelte
## SvelteSet
Une version réactive de l'objet natif
[`Set`](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Set).
Lire le contenu d'un `SvelteSet` (en itérant, ou en lisant `set.size`, ou en utilisant
`set.has(...)` comme dans [l'exemple](/playground/53438b51194b4882bcc18cddf9f96f15) ci-dessous) dans un
[effet](/docs/svelte/$effect) ou un [dérivé](/docs/svelte/$derived) va déclencher sa ré-évaluation
si nécessaire lors de la mise à jour du set.
Notez que les valeurs au sein d'un map réactif ne sont _pas_ rendues [profondément
réactives](/docs/svelte/$state#Deep-state).
```svelte
{#each ['🙈', '🙉', '🙊'] as monkey}
{/each}
{#if monkeys.has('🙈')}
## SvelteURL
Une version réactive de l'objet natif
[`URL`](https://developer.mozilla.org/fr/docs/Web/API/URL). Lire des propriétés d'une `SvelteURL`
(comme `url.href` ou `url.pathname`) dans un [effet](/docs/svelte/$effect) ou un
[dérivé](/docs/svelte/$derived) va déclencher sa ré-évaluation si nécessaire lors de la mise à jour
de l'url.
La propriété `searchParams` est une instance de
[SvelteURLSearchParams](/docs/svelte/svelte-reactivity#SvelteURLSearchParams).
[Exemple](/playground/5a694758901b448c83dc40dc31c71f2a):
```svelte
```
```dts
class SvelteURL extends URL {/*…*/}
```
```dts
get searchParams(): SvelteURLSearchParams;
```
## SvelteURLSearchParams
Une version réactive de l'objet natif
[`URLSearchParams`](https://developer.mozilla.org/fr/docs/Web/API/URLSearchParams). Lire le contenu
d'un `SvelteURLSearchParams` (en itérant, ou en appelant `params.get(...)` ou `params.getAll(...)`
comme dans l'[exemple](/playground/b3926c86c5384bab9f2cf993bc08c1c8) ci-dessous) dans un
[effet](/docs/svelte/$effect) ou un [dérivé](/docs/svelte/$derived) va déclencher sa ré-évaluation
si nécessaire lors de la mise à jour des paramètres de recherche.
```svelte
?{params.toString()}
{#each params as [key, value]}
{key}: {value}
{/each}
```
```dts
class SvelteURLSearchParams extends URLSearchParams {/*…*/}
```
Renvoie une fonction `subscribe` qui intègre des systèmes externes basés sur des évènements dans la
réactivité de Svelte.
C'est particulièrement utile pour intégrer des APIs comme `MediaQuery`, `IntersectionObserver`, ou
`WebSocket`.
Si `subscribe` est appelée au sein d'un effet (y compris indirectement, par exemple dans un getter),
le callback `start` sera appelé avec une fonction `update`. À chaque fois que `update` est appelée,
l'effet est ré-exécuté.
Si `start` renvoie une fonction de nettoyage, elle sera exécutée lors de la destruction de l'effet.
Si `subscribe` est appelée dans plusieurs effets, `start` ne sera appelé qu'une seule fois tant que
les effets sont actifs, et la fonction de "destruction" renvoyée ne sera appelée que lorsque tous
les effets concernées seront détruits.
On comprend mieux cette fonctionnalité avec un exemple. Voici l'implémentation de
[`MediaQuery`](/docs/svelte/svelte-reactivity#MediaQuery) :
```js
// @errors: 7031
import { createSubscriber } from 'svelte/reactivity';
import { on } from 'svelte/events';
export class MediaQuery {
#query;
#subscribe;
constructor(query) {
this.#query = window.matchMedia(`(${query})`);
this.#subscribe = createSubscriber((update) => {
// lorsque l'évènement `change` se produit, rejoue tout effet qui lit `this.current`
const off = on(this.#query, 'change', update);
// arrête d'écouter lorsque tous les effets sont détruits
return () => off();
});
}
get current() {
// This makes the getter reactive, if read in an effect
this.#subscribe();
// renvoie l'état courant de la query, que l'on soit ou non dans un effet
return this.#query.matches;
}
}
```