Le contexte permet aux composants d'accéder aux valeurs appartenant aux composants parents sans les fournir en tant que props (potentiellement au travers de plusieurs couches de composants intermédiaires, ce qui s'appelle faire du "prop-drilling"). Le composant parent définit un contexte avec `setContext(key, value)`... ```svelte ``` ... et l'enfant le récupère avec `getContext` : ```svelte

{message}, au sein de Child.svelte

``` C'est particulièrement utile lorsque `Parent.svelte` n'a pas directement conscience de `Child.svelte`, mais en fait le rendu via le [snippet](snippet) `children` ([demo](/playground/untitled#H4sIAAAAAAAAE42Q3W6DMAyFX8WyJgESK-oto6hTX2D3YxcM3IIUQpR40yqUd58CrCXsp7tL7HNsf2dAWXaEKR56yfTBGOOxFWQwfR6Qz8q1XAHjL-GjUhvzToJd7bU09FO9ctMkG0wxM5VuFeeFLLjtVK8ZnkpNkuGo-w6CTTJ9Z3PwsBAemlbUF934W8iy5DpaZtOUcU02-ZLcaS51jHEkTFm_kY1_wfOO8QnXrb8hBzDEc6pgZ4gFoyz4KgiD7nxfTe8ghqAhIfrJ46cTzVZBbkPlODVJsLCDO6V7ZcJoncyw1yRr0hd1GNn_ZbEM3I9i1bmVxOlWElUvDUNHxpQngt3C4CXzjS1rtvkw22wMrTRtTbC8Lkuabe7jvthPPe3DofYCAAA=)): ```svelte ``` La clé (`'my-context'`, dans l'exemple ci-dessus) et le contexte lui-même peuvent être n'importe quelle valeur JavaScript. En plus de [`setContext`](svelte#setContext) et [`getContext`](svelte#getContext), Svelte expose les fonctions [`hasContext`](svelte#hasContext) et [`getAllContexts`](svelte#getAllContexts). ## Utiliser le contexte avec l'état [!VO]Using context with state Vous pouvez stocker des états réactifs dans le contexte ([demo](/playground/untitled#H4sIAAAAAAAAE41R0W6DMAz8FSuaBNUQdK8MkKZ-wh7HHihzu6hgosRMm1D-fUpSVNq12x4iEvvOx_kmQU2PIhfP3DCCJGgHYvxkkYid7NCI_GUS_KUcxhVEMjOelErNB3bsatvG4LW6n0ZsRC4K02qpuKqpZtmrQTNMYJA3QRAs7PTQQxS40eMCt3mX3duxnWb-lS5h7nTI0A4jMWoo4c44P_Hku-zrOazdy64chWo-ScfRkRgl8wgHKrLTH1OxHZkHgoHaTraHcopXUFYzPPVfuC_hwQaD1GrskdiNCdQwJljJqlvXfyqVsA5CGg0uRUQifHw56xFtciO75QrP07vo_JXf_tf8yK2ezDKY_ZWt_1y2qqYzv7bI1IW1V_sN19m-07wCAAA=))... ```svelte ``` ... même s'il toutefois noter que si vous _réassignez_ `counter` plutôt que de le mettre à jour, vous "casserez le lien" — en d'autres termes, plutôt que ceci... ```svelte ``` ... vous devez faire ceci : ```svelte ``` Svelte vous avertira si vous vous trompez. ## Contexte typé [!VO]Type-safe context Une astuce utile est d'englober les appels à `setContext` et `getContext` dans des fonctions utilitaires qui vous permettent de préserver votre typage : ```js /// file: context.js // @filename: ambient.d.ts interface User {} // @filename: index.js // ---cut--- import { getContext, setContext } from 'svelte'; const key = {}; /** @param {User} user */ export function setUserContext(user) { setContext(key, user); } export function getUserContext() { return /** @type {User} */ (getContext(key)); } ``` ## Remplacer l'état global [!VO]Replacing global state Lorsque vous avez un état partagé par plusieurs composants différents, vous pourriez être tenté•e•s de le mettre dans son propre module et de simplement l'importer là où il est nécessaire : ```js /// file: state.svelte.js export const myGlobalState = $state({ user: { // ... } // ... }); ``` Dans plusieurs situations ceci ne posera pas de problèmes, mais il y a un risque : si vous mutez l'état lors d'un rendu côté serveur (ce qui est découragé, mais tout à fait possible !)... ```svelte ``` ... alors les données pourraient être accessibles par la _prochaine_ personne utilisant votre site. Le contexte résout ce problème car il n'est pas partagé entre les requêtes.