Avertissements de compilation
Svelte vous avertit lors de la compilation s’il détecte des erreurs potentielles, comme par exemple du markup non accessible.
Certains warnings peuvent être incorrects dans votre cas d’usage. Vous pouvez désactiver de tels
faux positifs en plaçant un commentaire <!-- svelte-ignore <code> -->
juste au-dessus de la ligne
concernée. Exemple :
<!-- svelte-ignore a11y_autofocus -->
<input autofocus />
Vous pouvez lister plusieurs règles dans un seul commentaire (séparées par des virgules), et ajouter une note explicative (entre parenthèses) en complément :
<!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_static_element_interactions (à cause
de telle ou telle raison) -->
<div onclick>...</div>
a11y_accesskey
Avoid using accesskey
S’assure que l’attribut accessKey
ne soit pas utilisé sur un élément. Les “access keys” sont des
attributs HTML qui permettent aux développeurs web d’assigner des raccourcis clavier aux éléments.
Des conflits entre les raccourcis clavier et les commandes de clavier utilisées par les lecteurs
d’écran et les personnes ne se servant que du clavier créent des complications d’accessibilité. Pour
éviter ces complication, les attributs accessKeys
ne doivent pas être utilisés.
<!-- A11y: Avoid using accesskey -->
<div accesskey="z"></div>
a11y_aria_activedescendant_has_tabindex
An element with an aria-activedescendant attribute should have a tabindex value
Un élément avec aria-activedescendant
doit être accessible via l’utilisation de la touche
Tabulation, il doit donc avoir un tabindex
induit ou un attribut tabindex
.
<!-- A11y: Elements with attribute aria-activedescendant should have tabindex value -->
<div aria-activedescendant="some-id"></div>
a11y_aria_attributes
`<%name%>` should not have aria-* attributes
Certains éléments DOM réservés ne supportent pas les roles, états et propriétés ARIA. C’est souvent
le cas car ils ne sont pas visibles, par exemple meta
, html
, script
, style
. Cette règle
s’assure que ces éléments DOM ne contiennent pas de props aria-*
.
<!-- A11y: <meta> should not have aria-* attributes -->
<meta aria-hidden="false" />
a11y_autocomplete_valid
'%value%' is an invalid value for 'autocomplete' on `<input type="%type%">`
a11y_autofocus
Avoid using autofocus
S’assure que autofocus
n’est pas utilisé sur des éléments. Utiliser l’autofocus sur des éléments
peut engendrer des problèmes d’usage pour les personnes non-voyantes comme mal-voyantes.
<!-- A11y: Avoid using autofocus -->
<input autofocus />
a11y_click_events_have_key_events
Visible, non-interactive elements with a click event must be accompanied by a keyboard event handler. Consider whether an interactive element such as `<button type="button">` or `<a>` might be more appropriate
S’assure que les éléments visibles et non interactifs qui possèdent un gestionnaire d’évènement
onclick
sont accompagnés d’un gestionnaire d’évènement de clavier.
Il est important de se demander si un élément interactif ne serait pas plus approprié, comme un
élément <button type="button">
pour des actions ou un élément <a>
pour les navigations. Ces
éléments ont un sens sémantiquement fort et ont un gestion du clavier intégrée. Par ex. Space
et
Enter
permettent de déclencher un <button>
et Enter
déclenche un élément <a>
.
Si un élément non interactifs est nécessaire, alors onclick
doit être accompagné d’un gestionnaire
onkeyup
ou onkeydown
permettant aux utilisateurs et utilisatrices d’effectuer des actions
équivalentes au clavier. Pour leur permettre de déclencher un évènement de clavier, l’élément doit
être focalisable via un
tabindex
. Alors qu’un
gestionnaire onkeypress
permet de ne pas afficher ce warning, il est bon de noter que keypress
est déprécié.
<!-- A11y: visible, non-interactive elements with an onclick event must be accompanied by a keyboard event handler. -->
<div onclick={() => {}}></div>
Coder votre application avec l’usage au clavier en tête est important pour les personnes ayant des handicaps physiques leur interdisant l’utilisation de souris, les personnes utilisant des lecteurs d’écran, ainsi que pour la compatibilité AT.
a11y_consider_explicit_label
Buttons and links should either contain text or have an `aria-label` or `aria-labelledby` attribute
a11y_distracting_elements
Avoid `<%name%>` elements
S’assure qu’aucun élément “distrayant” ne soit utilisé. Les éléments pouvant être visuellement distrayants peuvent causer des problèmes d’accessibilité pour les personnes ayant des déficits visuels. De tels éléments sont dépréciés, et devraient être évités.
Les éléments suivants sont visuellement distrayants : <marquee>
et <blink>
.
<!-- A11y: Avoid <marquee> elements -->
<marquee></marquee>
a11y_figcaption_index
`<figcaption>` must be first or last child of `<figure>`
a11y_figcaption_parent
`<figcaption>` must be an immediate child of `<figure>`
S’assure que certains éléments DOM ont une structure correcte.
<!-- A11y: <figcaption> must be an immediate child of <figure> -->
<div>
<figcaption>Légende d'image</figcaption>
</div>
a11y_hidden
`<%name%>` element should not be hidden
Certains éléments DOM sont utiles pour les lecteurs d’écran et ne devraient pas être cachés.
<!-- A11y: <h2> element should not be hidden -->
<h2 aria-hidden="true">header invisible</h2>
a11y_img_redundant_alt
Screenreaders already announce `<img>` elements as an image
S’assure que l’attribut alt
d’une image ne contienne pas les mots “image”, “picture” ou “photo”.
Les lecteurs d’écran annoncent déjà les éléments <img>
comme étant une image. Il n’y a pas besoin
d’utiliser les mots image, photo et/ou picture.
<img src="foo" alt="Foo mange un sandwich" />
<!-- aria-hidden, ne sera pas annoncé par un lecteur d'écran -->
<img src="bar" aria-hidden="true" alt="Photo de moi prenant une image en photo" />
<!-- A11y: Screen readers already announce <img> elements as an image. -->
<img src="foo" alt="Photo de foo en train d'être chelou" />
<!-- A11y: Screen readers already announce <img> elements as an image. -->
<img src="bar" alt="Image de moi au bar !" />
<!-- A11y: Screen readers already announce <img> elements as an image. -->
<img src="foo" alt="Image de baz corrigeant un bug" />
a11y_incorrect_aria_attribute_type
The value of '%attribute%' must be a %type%
S’assure qu’uniquement les types corrects d’une valeur soient utilisés pour les attributs aria. Par
exemple, aria-hidden
ne devrait uniquement recevoir un booléen.
<!-- A11y: The value of 'aria-hidden' must be exactly one of true or false -->
<div aria-hidden="yes"></div>
a11y_incorrect_aria_attribute_type_boolean
The value of '%attribute%' must be either 'true' or 'false'. It cannot be empty
a11y_incorrect_aria_attribute_type_id
The value of '%attribute%' must be a string that represents a DOM element ID
a11y_incorrect_aria_attribute_type_idlist
The value of '%attribute%' must be a space-separated list of strings that represent DOM element IDs
a11y_incorrect_aria_attribute_type_integer
The value of '%attribute%' must be an integer
a11y_incorrect_aria_attribute_type_token
The value of '%attribute%' must be exactly one of %values%
a11y_incorrect_aria_attribute_type_tokenlist
The value of '%attribute%' must be a space-separated list of one or more of %values%
a11y_incorrect_aria_attribute_type_tristate
The value of '%attribute%' must be exactly one of true, false, or mixed
a11y_interactive_supports_focus
Elements with the '%role%' interactive role must have a tabindex value
S’assure que les éléments avec un rôle interactif et des gestionnaires d’évènements interactifs soit focalisables ou accessibles via tabulation.
<!-- A11y: Elements with the 'button' interactive role must have a tabindex value. -->
<div role="button" onkeypress={() => {}} />
a11y_invalid_attribute
'%href_value%' is not a valid %href_attribute% attribute
S’assure que les attributs importants pour l’accessibilité aient une valeur valide. Par exemple,
href
ne doit pas être vide, ni avoir la valeur '#'
ou javascript:
.
<!-- A11y: '' is not a valid href attribute -->
<a href="">invalid</a>
a11y_label_has_associated_control
A form label must be associated with a control
S’assure qu’une balise de label ait un texte et un élément de contrôle (input) associé.
Il y a deux manière d’associer un label à un contrôle :
- Entourer un contrôle d’une balise
<label>
- Ajouter un attribut
for
à un label et lui assigner l’ID d’un contrôle sur la page
<label for="id">B</label>
<label>C <input type="text" /></label>
<!-- A11y: A form label must be associated with a control. -->
<label>A</label>
a11y_media_has_caption
`<video>` elements must have a `<track kind="captions">`
Fournir des sous-titres aux média est essentiel pour que les personnes sourdes puissent en
comprendre le contenu. Les sous-titres doivent être une transcription ou traduction du dialogue, des
effets sonores, passages musicaux importants et de tout autre information audio pertinente. Ceci
n’est pas uniquement important pour l’accessibilité, mais peut aussi être utile pour toutes les
personnes pour qui le média n’est pas disponible (comme pour l’attribut alt
d’une image lorsque
l’image n’a pas pu être chargée correctement).
Les sous-titres doivent contenir toutes les informations importantes et pertinentes permettant la
compréhension du média correspondant. Ceci peut signifier que les sous-titres ne soient pas une
correspondance 1:1 d’un dialogue dans le contenu du média. Cependant, les sous-titres ne sont pas
nécessaires pour les composants vidéo ayant l’attribut muted
.
<video><track kind="captions" /></video>
<audio muted></audio>
<!-- A11y: Media elements must have a <track kind=\"captions\"> -->
<video></video>
<!-- A11y: Media elements must have a <track kind=\"captions\"> -->
<video><track /></video>
a11y_misplaced_role
`<%name%>` should not have role attribute
Certains éléments DOM réservés ne supportent pas les roles, états et propriétés ARIA. C’est souvent
le cas car ils ne sont pas visibles, par exemple meta
, html
, script
, style
. Cette règle
s’assure que ces éléments DOM ne contiennent pas de props role
.
<!-- A11y: <meta> should not have role attribute -->
<meta role="tooltip" />
a11y_misplaced_scope
The scope attribute should only be used with `<th>` elements
L’attribut scope
ne devrait être utilisé que sur des éléments <th>
.
<!-- A11y: The scope attribute should only be used with <th> elements -->
<div scope="row" />
a11y_missing_attribute
`<%name%>` element should have %article% %sequence% attribute
S’assure que les attributs requis pour l’accessibilité sont présent sur un élément. Ceci inclut les vérifications suivantes :
<a>
doit avoir unhref
(à moins que ce soit une balise définissant un fragment)<area>
devrait avoiralt
,aria-label
ouaria-labelledby
<html>
devrait avoirlang
<iframe>
devrait avoirtitle
<img>
devrait avoiralt
<object>
devrait avoirtitle
,aria-label
ouaria-labelledby
<input type="image">
devrait avoiralt
,aria-label
, ouaria-labelledby
<!-- A11y: <input type=\"image\"> element should have an alt, aria-label or aria-labelledby attribute -->
<input type="image" />
<!-- A11y: <html> element should have a lang attribute -->
<html></html>
<!-- A11y: <a> element should have an href attribute -->
<a>text</a>
a11y_missing_content
`<%name%>` element should contain text
S’assure que les éléments d’en-tête (h1
, h2
, etc...) et les ancres aient du contenu et que ce
contenu soit accessible aux lecteurs d’écran.
<!-- A11y: <a> element should have child content -->
<a href="/foo"></a>
<!-- A11y: <h1> element should have child content -->
<h1></h1>
a11y_mouse_events_have_key_events
'%event%' event must be accompanied by '%accompanied_by%' event
S’assure que onmouseover
et onmouseout
sont accompagnés de onfocus
et onblur
,
respectivement. Ceci permet de s’assurer que toute fonctionnalité déclenchée par ces évènements de
souris est aussi accessible pour les utilisateurs et utilisatrices de clavier.
<!-- A11y: onmouseover must be accompanied by onfocus -->
<div onmouseover={handleMouseover} />
<!-- A11y: onmouseout must be accompanied by onblur -->
<div onmouseout={handleMouseout} />
a11y_no_abstract_role
Abstract role '%role%' is forbidden
a11y_no_interactive_element_to_noninteractive_role
`<%element%>` cannot have role '%role%'
Les rôles WAI-ARIA ne devraient pas être utilisés
pour convertir un élément interactif en élément non interactif. Les rôles ARIA non interactifs
incluent article
, banner
, complementary
, img
, listitem
, main
, region
, et tooltip
.
<!-- A11y: <textarea> cannot have role 'listitem' -->
<textarea role="listitem"></textarea>
a11y_no_noninteractive_element_interactions
Non-interactive element `<%element%>` should not be assigned mouse or keyboard event listeners
Un élément non interactif n’est pas capable de gérer des gestionnaires d’évènements (clavier ou
souris). Les éléments non interactifs incluent <main>
, <area>
, <h1>
(,<h2>
, etc), <p>
,
<img>
, <li>
, <ul>
et <ol>
. Les rôles
WAI-ARIA incluent article
, banner
,
complementary
, img
, listitem
, main
, region
and tooltip
.
<!-- `A11y: Non-interactive element <li> should not be assigned mouse or keyboard event listeners.` -->
<li onclick={() => {}}></li>
<!-- `A11y: Non-interactive element <div> should not be assigned mouse or keyboard event listeners.` -->
<div role="listitem" onclick={() => {}}></div>
a11y_no_noninteractive_element_to_interactive_role
Non-interactive element `<%element%>` cannot have interactive role '%role%'
Les rôles WAI-ARIA ne devraient pas être utilisés
pour convertir un élément non interactif en élément interactif. Les rôles ARIA interactifs incluent
button
, link
, checkbox
, menuitem
, menuitemcheckbox
, menuitemradio
, option
, radio
,
searchbox
, switch
et textbox
.
<!-- A11y: Non-interactive element <h3> cannot have interactive role 'searchbox' -->
<h3 role="searchbox">Button</h3>
a11y_no_noninteractive_tabindex
noninteractive element cannot have nonnegative tabIndex value
La navigation utilisant la touche Tab devrait être limitée aux éléments de la page permettant une interaction.
<!-- A11y: noninteractive element cannot have nonnegative tabIndex value -->
<div tabindex="0"></div>
a11y_no_redundant_roles
Redundant role '%role%'
Certains élément HTML ont des rôles ARIA par défaut. Donner à ces éléments un rôle déjà défini par le navigateur n’a pas d’effet et est redondant.
<!-- A11y: Redundant role 'button' -->
<button role="button">...</button>
<!-- A11y: Redundant role 'img' -->
<img role="img" src="foo.jpg" />
a11y_no_static_element_interactions
`<%element%>` with a %handler% handler must have an ARIA role
Les éléments comme <div>
avec des gestionnaires d’évènement interactif comme click
doivent avoir
un rôle ARIA.
<!-- A11y: <div> with click handler must have an ARIA role -->
<div onclick={() => ''}></div>
a11y_positive_tabindex
Avoid tabindex values above zero
Évitez les valeurs positives pour la propriété tabindex
. Ceci va déplacer les éléments hors de
l’ordre de tabulation attendu, créant ainsi de la confusion pour les personnes utilisant un clavier.
<!-- A11y: avoid tabindex values above zero -->
<div tabindex="1"></div>
a11y_role_has_required_aria_props
Elements with the ARIA role "%role%" must have the following attributes defined: %props%
Les éléments ayant un rôle ARIA doivent avoir tous les attributs requis par ce rôle.
<!-- A11y: A11y: Elements with the ARIA role "checkbox" must have the following attributes defined: "aria-checked" -->
<span role="checkbox" aria-labelledby="foo" tabindex="0"></span>
a11y_role_supports_aria_props
The attribute '%attribute%' is not supported by the role '%role%'
Les éléments avec un rôle explicite ou implicite ne peuvent avoir que des propriétés aria-*
supportées par ce rôle.
<!-- A11y: The attribute 'aria-multiline' is not supported by the role 'link'. -->
<div role="link" aria-multiline></div>
<!-- A11y: The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element <li>. -->
<li aria-required></li>
a11y_role_supports_aria_props_implicit
The attribute '%attribute%' is not supported by the role '%role%'. This role is implicit on the element `<%name%>`
Les éléments avec un rôle explicite ou implicite ne peuvent avoir que des propriétés aria-*
supportées par ce rôle.
<!-- A11y: The attribute 'aria-multiline' is not supported by the role 'link'. -->
<div role="link" aria-multiline></div>
<!-- A11y: The attribute 'aria-required' is not supported by the role 'listitem'. This role is implicit on the element <li>. -->
<li aria-required></li>
a11y_unknown_aria_attribute
Unknown aria attribute 'aria-%attribute%'
Unknown aria attribute 'aria-%attribute%'. Did you mean '%suggestion%'?
S’assure qu’uniquement les attributs ARIA connus sont utilisés. Ceci se base sur la spécification WAI-ARIA States and Properties.
<!-- A11y: Unknown aria attribute 'aria-labeledby' (did you mean 'labelledby'?) -->
<input type="image" aria-labeledby="foo" />
a11y_unknown_role
Unknown role '%role%'
Unknown role '%role%'. Did you mean '%suggestion%'?
Les éléments avec des rôles ARIA doivent avoi un rôle valide et non abstrait. Vous pouvez trouver une référence des définitions de rôles sur le site de WAI-ARIA.
<!-- A11y: Unknown role 'toooltip' (did you mean 'tooltip'?) -->
<div role="toooltip"></div>
attribute_avoid_is
The "is" attribute is not supported cross-browser and should be avoided
attribute_global_event_reference
You are referencing `globalThis.%name%`. Did you forget to declare a variable with that name?
attribute_illegal_colon
Attributes should not contain ':' characters to prevent ambiguity with Svelte directives
attribute_invalid_property_name
'%wrong%' is not a valid HTML attribute. Did you mean '%right%'?
attribute_quoted
Quoted attributes on components and custom elements will be stringified in a future version of Svelte. If this isn't what you want, remove the quotes
bind_invalid_each_rest
The rest operator (...) will create a new object and binding '%name%' with the original object will not work
block_empty
Empty block
component_name_lowercase
`<%name%>` will be treated as an HTML element unless it begins with a capital letter
css_unused_selector
Unused CSS selector "%name%"
Svelte traverse à la fois le template et la balise <style>
pour trouver les sélecteurs CSS non
utilisés dans le template, afin de les supprimer.
Dans certains cas, un sélecteur peut cibler un élément qui n’est pas “visible” par le compilateur,
par exemple car il fait partie d’une balise {@html ...}
ou parce que vous surcharger les styles
dans un composant enfant. Dans ces cas-là, utilisez :global
pour
laisser le sélecteur intact :
<div class="post">{@html content}</div>
<style>
.post :global {
p {...}
}
</style>
element_invalid_self_closing_tag
Self-closing HTML tags for non-void elements are ambiguous — use `<%name% ...></%name%>` rather than `<%name% ... />`
En HTML, le concept de balise auto-fermante n’existe pas. Même si ceci ressemble à une balise sans contenu avec du texte à côté...
<div>
<span class="icon" /> du texte !
</div>
... un parser respectant la spec HTML (un navigateur par exemple) va en réalité le traduire comme ceci, avec le texte à l’intérieur de l’icône :
<div>
<span class="icon"> du texte ! </span>
</div>
Certains langages de templatings (Svelte inclus) vont “corriger” le HTML en transformant <span />
en <span></span>
. D’autres respectent la spec. Dans les deux cas, il en résulte une ambiguité et
de la confusion lorsque vous copiez-collez du code entre différents contextes. En conséquence,
Svelte vous avertit de l’ambiguité pour que vous la résolviez directement en rajoutant la balise
fermante.
Pour automatiser ceci, lancer la commande de migration dédiée :
npx sv migrate self-closing-tags
Dans une version future de Svelte, les balises auto-fermantes vont probablement déclencher une erreur plutôt qu’un warning.
event_directive_deprecated
Using `on:%name%` to listen to the %name% event is deprecated. Use the event attribute `on%name%` instead
Voir le guide de migration pour plus d’infos.
export_let_unused
Component has unused export property '%name%'. If it is for external reference only, please consider using `export const %name%`
legacy_code
`%code%` is no longer valid — please use `%suggestion%` instead
legacy_component_creation
Svelte 5 components are no longer classes. Instantiate them using `mount` or `hydrate` (imported from 'svelte') instead.
Voir le guide de migration pour plus d’infos.
node_invalid_placement_ssr
%message%. When rendering this component on the server, the resulting HTML will be modified by the browser (by moving, removing, or inserting elements), likely resulting in a `hydration_mismatch` warning
Le HTML restreint les positions autorisées de certains éléments. S’il rencontre des éléments mal positionnés, le navigateur va “réparer” le HTML d’une manière qui invalide les suppositions que Svelte fait à propos de la structure de vos composants. Par exemple :
<p>hello <div>world</div></p>
va être changé en<p>hello</p><div>world</div><p></p>
(la balise<div>
ferme automatiquement<p>
car les<p>
ne peuvent pas contenir d’éléments de type bloc)<option><div>option a</div></option>
va devenir<option>option a</option>
(le<div>
est supprimé)<table><tr><td>cell</td></tr></table>
est transformé en<table><tbody><tr><td>cell</td></tr></tbody></table>
(une balise<tbody>
est ajouté automatiquement)
Ce code fonctionnera lorsque le composant sera rendu sur le client (ce qui explique pourquoi ceci est un warning et non une erreur), mais si vous utilisez du rendu côté serveur, ceci va empêcher l’hydration de se faire correctement.
non_reactive_update
`%name%` is updated, but is not declared with `$state(...)`. Changing its value will not correctly trigger updates
Ce warning est levé lorsque le compilateur détecte les choses suivantes :
- une variable a été déclarée sans
$state
ou$state.raw
- une variable a été réassignée
- la variable est lue dans un contexte réactif
Dans ces cas-là, changer la valeur ne va pas correctement déclencher de mise à jour. Exemple :
<script>
let reactive = $state('réactif');
let stale = 'périmé';
</script>
<p>Cette valeur se met à jour : {reactive}</p>
<p>Cette valeur ne se met pas à jour : {stale}</p>
<button onclick={() => {
stale = 'mis à jour';
reactive = 'mis à jour';
}}>mettre à jour</button>
Pour corriger cela, entourez votre déclaration de variable avec $state
.
options_deprecated_accessors
The `accessors` option has been deprecated. It will have no effect in runes mode
options_deprecated_immutable
The `immutable` option has been deprecated. It will have no effect in runes mode
options_missing_custom_element
The `customElement` option is used when generating a custom element. Did you forget the `customElement: true` compile option?
options_removed_enable_sourcemap
The `enableSourcemap` option has been removed. Source maps are always generated now, and tooling can choose to ignore them
options_removed_hydratable
The `hydratable` option has been removed. Svelte components are always hydratable now
options_removed_loop_guard_timeout
The `loopGuardTimeout` option has been removed
options_renamed_ssr_dom
`generate: "dom"` and `generate: "ssr"` options have been renamed to "client" and "server" respectively
perf_avoid_inline_class
Avoid 'new class' — instead, declare the class at the top level scope
perf_avoid_nested_class
Avoid declaring classes below the top level scope
reactive_declaration_invalid_placement
Reactive declarations only exist at the top level of the instance script
reactive_declaration_module_script_dependency
Reassignments of module-level declarations will not cause reactive statements to update
script_context_deprecated
`context="module"` is deprecated, use the `module` attribute instead
<script context="module" module>
let foo = 'bar';
</script>
script_unknown_attribute
Unrecognized attribute — should be one of `generics`, `lang` or `module`. If this exists for a preprocessor, ensure that the preprocessor removes it
slot_element_deprecated
Using `<slot>` to render parent content is deprecated. Use `{@render ...}` tags instead
Voir le guide de migration pour plus d’infos.
state_referenced_locally
State referenced in its own scope will never update. Did you mean to reference it inside a closure?
Ce warning est levé lorsque le compilateur détecte les choses suivantes :
- une variable réactive a été déclarée
- la variable a été réassignée
- la variable est référencée dans le même scope où elle a été déclarée et il s’agit d’un contexte non réactif
Dans ce cas, la réassignation de l’état ne sera pas détectée quel que soit ce que vous fournissez. Par exemple, si vous fournissez l’état à une fonction, cette fonction ne va pas détecter la mise à jour :
<script>
import { setContext } from 'svelte';
let count = $state(0);
// warning: state_referenced_locally
setContext('count', count);
</script>
<button onclick={() => count++}>
incrémenter
</button>
<script lang="ts">
import { setContext } from 'svelte';
let count = $state(0);
// warning: state_referenced_locally
setContext('count', count);
</script>
<button onclick={() => count++}>
incrémenter
</button>
<script>
import { getContext } from 'svelte';
const count = getContext('count');
</script>
<!-- Ceci ne sera jamais mis à jour -->
<p>Le compteur vaut {count}</p>
<script lang="ts">
import { getContext } from 'svelte';
const count = getContext('count');
</script>
<!-- Ceci ne sera jamais mis à jour -->
<p>Le compteur vaut {count}</p>
Pour corriger cela, référencer la variable de sorte qu’elle soit évaluée au moment de la
compilation. Pour l’exemple ci-dessus, vous pouvez faire cela en plaçant count
dans une fonction :
<script>
import { setContext } from 'svelte';
let count = $state(0);
setContext('count', () => count);
</script>
<button onclick={() => count++}>
incrémenter
</button>
<script lang="ts">
import { setContext } from 'svelte';
let count = $state(0);
setContext('count', () => count);
</script>
<button onclick={() => count++}>
incrémenter
</button>
<script>
import { getContext } from 'svelte';
const count = getContext('count');
</script>
<!-- Ceci va se mettre à jour -->
<p>Le compteur vaut {count()}</p>
<script lang="ts">
import { getContext } from 'svelte';
const count = getContext('count');
</script>
<!-- Ceci va se mettre à jour -->
<p>Le compteur vaut {count()}</p>
Pour plus d’infos, voir Passer de l’état à des fonctions.
store_rune_conflict
It looks like you're using the `$%name%` rune, but there is a local binding called `%name%`. Referencing a local variable with a `$` prefix will create a store subscription. Please rename `%name%` to avoid the ambiguity
svelte_component_deprecated
`<svelte:component>` is deprecated in runes mode — components are dynamic by default
Dans des versions antérieures de Svelte, le constructeur de composant était figé au moment du rendu
du composant. En d’autres termes, si vous souhaitiez que <X>
soit re-rendu si X
était mis à
jour, vous deviez soit utiliser <svelte:component this={X}>
, soit mettre le composant dans un bloc
{#key X}...{/key}
.
Avec Svelte 5 ce n’est plus le cas — si X
change, <X>
est re-rendu.
Dans certains cas la syntaxe <object.property>
peut être également utilisée ; une variable dont le
nom est en minuscules et possédant des propriétés est considérée comme un composant par Svelte 5.
Dans le cas de logiques de résolution de composant complexes, une variable intermédiaire dont la
première lettre est en majuscules peut être nécessaire. Par ex. dans les situations où @const
est
utilisé :
{#each items as item}
<svelte:component this={item.condition ? Y : Z} />
{@const Component = item.condition ? Y : Z}
<Component />
{/each}
Une valeur dérivée peut être utilisée dans d’autres contextes :
<script>
// ...
let condition = $state(false);
const Component = $derived(condition ? Y : Z);
</script>
<svelte:component this={condition ? Y : Z} />
<Component />
svelte_element_invalid_this
`this` should be an `{expression}`. Using a string attribute value will cause an error in future versions of Svelte
svelte_self_deprecated
`<svelte:self>` is deprecated — use self-imports (e.g. `import %name% from './%basename%'`) instead
Voir la note dans la doc pour plus d’infos.
unknown_code
`%code%` is not a recognised code
`%code%` is not a recognised code (did you mean `%suggestion%`?)
Modifier cette page sur Github