API de composant impérative
L’API servant à interagir avec un composant de Svelte 3 et 4 est différente de celle de Svelte 5. Notez que cette page ne s’applique pas aux composants en mode legacy d’une application Svelte 5.
Créer un composant
const const component: any
component = new Component(options);
Un composant prévu pour le client — c’est-à-dire un composant compilé avec generate: 'dom'
(ou
l’option generate
non définie) est une classe JavaScript.
import type App = SvelteComponent<Record<string, any>, any, any>
const App: LegacyComponentType
App from './App.svelte';
const const app: SvelteComponent<Record<string, any>, any, any>
app = new new App(o: ComponentConstructorOptions): SvelteComponent
App({
ComponentConstructorOptions<Record<string, any>>.target: Document | Element | ShadowRoot
target: var document: Document
document.Document.body: HTMLElement
Specifies the beginning and end of the document body.
body,
ComponentConstructorOptions<Record<string, any>>.props?: Record<string, any> | undefined
props: {
// en supposant que App.svelte contient quelque chose
// comme `export let answer`
answer: number
answer: 42
}
});
Les options d’initialisation suivantes peuvent être fournies :
option | par défaut | description |
---|---|---|
target |
aucun | Un HTMLElement ou ShadowRoot cible dans lequel rendre le composant. Cette option est obligatoire |
anchor |
null |
Un enfant de target qui doit être immédiatement après le composant à rendre |
props |
{} |
Un objet de propriétés à fournir au composant |
context |
new Map() |
Une Map de contexte racine contenant des paires clé-valeur à fournir au composant |
hydrate |
false |
Voir ci-dessous |
intro |
false |
Si true , les transitions seront jouées lors du rendu initial, sans attendre un changement d'état |
Les enfants existante de target
sont laissés à leur place.
L’option hydrate
dit à Svelte d’améliorer le DOM existant (en général venant du rendu côté
serveur) plutôt que de créer de nouveaux éléments. Ceci ne fonctionne que si le composant a été
compilé avec l’option hydratable: true
. L’hydratation des
éléments <head>
ne fonctionne correctement que si leur rendu côté serveur a également été compilé
avec hydratable: true
, ce qui ajoute un marqueur à chaque élément de <head>
afin que le
composant sache quels élément du <head>
il est responsable d’enlever lors de l’hydratation.
Bien que les enfants de target
sont normalement laissés intacts, hydrate: true
va supprimer tous
les enfants de la cible. Pour cette raison, l’option anchor
ne peut pas être utilisée avec
hydrate: true
.
Le DOM existant n’a pas besoin de correspondre au composant — Svelte va “réparer” le DOM au fur et à mesure.
import type App = SvelteComponent<Record<string, any>, any, any>
const App: LegacyComponentType
App from './App.svelte';
const const app: SvelteComponent<Record<string, any>, any, any>
app = new new App(o: ComponentConstructorOptions): SvelteComponent
App({
ComponentConstructorOptions<Record<string, any>>.target: Document | Element | ShadowRoot
target: var document: Document
document.ParentNode.querySelector<Element>(selectors: string): Element | null (+4 overloads)
Returns the first element that is a descendant of node that matches selectors.
querySelector('#server-rendered-html'),
ComponentConstructorOptions<Record<string, any>>.hydrate?: boolean | undefined
hydrate: true
});
Avec Svelte 5+, utilisez plutôt
mount
$set
component.$set(props);
Définit programmatiquement des props sur une instance. component.$set({ x: 1 })
est équivalent à
x = 1
dans le bloc <script>
du composant.
Appeler cette méthode programme une mise à jour lors de la prochaine micro-tâche — le DOM n’est pas mis à jour de manière synchrone.
component.$set({ answer: number
answer: 42 });
Avec Svelte 5+, utiliser plutôt
$state
pour créer une prop de composant et la mettre à jourlet
props =
module props let props: { answer: number; }
$state({
function $state<{ answer: number; }>(initial: { answer: number; }): { answer: number; } (+1 overload) namespace $state
answer: number
answer: 42 }); constconst component: any
component = mount(Component, {props }); // ...
props: { answer: number; }
props.
module props let props: { answer: number; }
answer: number
answer = 24;
$on
component.$on(ev, callback);
Provoque l’appel de la fonction callback
chaque fois que le composant génère un event
.
Une fonction est renvoyée par .$on
, celle-ci supprimera le gestionnaire d’évènement lors de son
appel.
const const off: any
off = component.$on('selected', (event: any
event) => {
var console: Console
The console
module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
- A
Console
class with methods such as console.log()
, console.error()
and console.warn()
that can be used to write to any Node.js stream.
- A global
console
instance configured to write to process.stdout
and
process.stderr
. The global console
can be used without calling require('console')
.
Warning: The global console object’s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O
for
more information.
Example using the global console
:
console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console
class:
const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err
console.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to stdout
with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()
).
const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout
See util.format()
for more information.
log(event: any
event.detail.selection);
});
const off: any
off();
Avec Svelte 5+, passer plutôt des callbacks en props
$destroy
component.$destroy();
Supprime un composant du DOM et déclenche les éventuels callbacks prévus par onDestroy
.
Avec Svelte 5+, utilisez plutôt
unmount
Props de composant
component.prop;
module component
component.component.prop: any
prop = value;
Si un composant est compilé avec accessors: tru
, chaque instance aura des getters et des setters
correspondant à chacune des props du composant. Définir une valeur déclenchera alors une mise à jour
synchrone plutôt que la mise à jour par défaut asynchrone habituellement déclenchée par
component.$set(...)
.
Par défaut, accessors
vaut false
, à moins que vous ne compiliez en tant qu’élément personnalisé.
var console: Console
The console
module provides a simple debugging console that is similar to the
JavaScript console mechanism provided by web browsers.
The module exports two specific components:
- A
Console
class with methods such as console.log()
, console.error()
and console.warn()
that can be used to write to any Node.js stream.
- A global
console
instance configured to write to process.stdout
and
process.stderr
. The global console
can be used without calling require('console')
.
Warning: The global console object’s methods are neither consistently
synchronous like the browser APIs they resemble, nor are they consistently
asynchronous like all other Node.js streams. See the note on process I/O
for
more information.
Example using the global console
:
console.log('hello world');
// Prints: hello world, to stdout
console.log('hello %s', 'world');
// Prints: hello world, to stdout
console.error(new Error('Whoops, something bad happened'));
// Prints error message and stack trace to stderr:
// Error: Whoops, something bad happened
// at [eval]:5:15
// at Script.runInThisContext (node:vm:132:18)
// at Object.runInThisContext (node:vm:309:38)
// at node:internal/process/execution:77:19
// at [eval]-wrapper:6:22
// at evalScript (node:internal/process/execution:76:60)
// at node:internal/main/eval_string:23:3
const name = 'Will Robinson';
console.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to stderr
Example using the Console
class:
const out = getStreamSomehow();
const err = getStreamSomehow();
const myConsole = new console.Console(out, err);
myConsole.log('hello world');
// Prints: hello world, to out
myConsole.log('hello %s', 'world');
// Prints: hello world, to out
myConsole.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to err
const name = 'Will Robinson';
myConsole.warn(`Danger ${name}! Danger!`);
// Prints: Danger Will Robinson! Danger!, to err
console.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to stdout
with newline. Multiple arguments can be passed, with the
first used as the primary message and all additional used as substitution
values similar to printf(3)
(the arguments are all passed to util.format()
).
const count = 5;
console.log('count: %d', count);
// Prints: count: 5, to stdout
console.log('count:', count);
// Prints: count: 5, to stdout
See util.format()
for more information.
log(component.count);
component.count += 1;
Avec Svelte 5+, ce concept est obsolète. Si vous souhaitez rendre des propriétés accessibles depuis l’extérieur, vous pouvez les
export
er
API de composant côté serveur
const const result: any
result = Component.render(...)
À la différence des composants client, les composants serveur n’ont pas d’existence après leur rendu – leur unique mission est de créer du HTML et du CSS. Pour cette raison, leur API est un peu différente.
Un composant serveur expose une méthode render
qui peut être appelée avec des props optionnelles.
Elle renvoie un objet avec des propriétés head
, html
et css
, où head
contient le contenu de
tous les éléments <svelte:head>
rencontrés.
Vous pouvez importer un composant Svelte directement dans Node en utilisant svelte/register
.
var require: NodeRequire
(id: string) => any
require('svelte/register');
const const App: any
App = var require: NodeRequire
(id: string) => any
require('./App.svelte').default;
const { const head: any
head, const html: any
html, const css: any
css } = const App: any
App.render({
answer: number
answer: 42
});
La méthode .render()
accepte les paramètres suivants :
paramètre | défaut | description |
---|---|---|
props |
{} |
Un objet de propriétés à fournir au composant |
options |
{} |
Un objet d'options |
L’objet options
accepte les options suivantes :
paramètre | défaut | description |
---|---|---|
context |
new Map() |
Une Map de paires clé-valeur représentant un contexte racine à fournir au composant |
const { const head: any
head, const html: any
html, const css: any
css } = App.render(
// props
{ answer: number
answer: 42 },
// options
{
context: Map<string, string>
context: new var Map: MapConstructor
new <string, string>(iterable?: Iterable<readonly [string, string]> | null | undefined) => Map<string, string> (+3 overloads)
Map([['context-key', 'context-value']])
}
);
Avec Svelte 5+, utilisez plutôt
render
Modifier cette page sur Github