Tous les articlesIngénierie

Un contexte React ne franchit pas une frontière d'îlot

Le piège coûte cher parce qu'il ne se voit pas : tant qu'un seul îlot existe, tout fonctionne.

1 min de lecture

Chaque îlot Astro est sa propre racine de rendu. Deux îlots sur la même page sont donc deux arbres distincts, montés séparément, qui ne partagent rien.

C’est ce qui rend le piège coûteux : un contexte React placé autour d’un îlot fonctionne parfaitement — tant qu’il n’y en a qu’un. Le jour où un second îlot a besoin de la même valeur, il ne la reçoit pas, et rien ne le signale. Pas d’erreur, pas d’avertissement : juste une bascule de thème dans le pied de page qui ignore celle de la barre de navigation.

Ce qui franchit la frontière

Un module. Le bundler ne l’évalue qu’une fois, donc tous les îlots qui l’importent obtiennent la même instance. C’est vrai d’un store nanostores comme d’un simple objet exporté.

// theme.ts — un module, donc une seule instance pour toute la page.
import { atom } from "nanostores";

export const $theme = atom<"dark" | "light">("dark");

Chaque îlot importe ce fichier et s’abonne :

import { $theme } from "./theme";

$theme.subscribe((theme) => {
  document.documentElement.dataset.theme = theme;
});

Comment on le vérifie

En rendant la même bascule deux fois, à deux endroits de la page, et en écrivant un test qui clique sur l’une pour vérifier que l’autre a suivi. Une propriété qu’on n’exerce pas n’est pas une propriété : c’est une intention.

Agir

Thème sombreFixer l'apparence du sitesetTheme({theme:"dark"})
Thème clairFixer l'apparence du sitesetTheme({theme:"light"})
Thème du systèmeSuivre à nouveau la préférence du systèmesetTheme({theme:"system"})
Passer le site en anglaisEnglishsetLocale({locale:"en"})
Labs — ProduitFiltrer les Labs par typefilterLabs({type:"Produit"})
Labs — PrototypeFiltrer les Labs par typefilterLabs({type:"Prototype"})
Labs — RechercheFiltrer les Labs par typefilterLabs({type:"Recherche"})
Labs — Réinitialiser les filtresRetirer tous les filtres des LabsfilterLabs({reset:true})
Journal — IngénierieFiltrer le Journal par catégoriefilterJournal({category:"Ingénierie"})
Journal — SécuritéFiltrer le Journal par catégoriefilterJournal({category:"Sécurité"})
Journal — Agent-NativeFiltrer le Journal par catégoriefilterJournal({category:"Agent-Native"})
Journal — StudioFiltrer le Journal par catégoriefilterJournal({category:"Studio"})
Journal — Réinitialiser les filtresRetirer tous les filtres du JournalfilterJournal({reset:true})
Tutoriels — DébutantFiltrer les tutoriels par niveaufilterTutorials({level:"Débutant"})
Tutoriels — IntermédiaireFiltrer les tutoriels par niveaufilterTutorials({level:"Intermédiaire"})
Tutoriels — AvancéFiltrer les tutoriels par niveaufilterTutorials({level:"Avancé"})
Tutoriels — Réinitialiser les filtresRetirer tous les filtres des tutorielsfilterTutorials({reset:true})

Services

DiscoveryCadrer le produit avant d'écrire la première ligne, pour que le budget serve à construire et pas à corriger.openService({service:"discovery"})
Design produitUne interface qui se tient, portée par un design system que vos développeurs peuvent faire vivre sans nous.openService({service:"design"})
Développement webUne application web rapide et tenue dans le temps, avec les tests et la chaîne de livraison qui vont avec.openService({service:"web"})
Développement mobileUne application iOS et Android depuis une seule base de code, publiée sur les deux stores.openService({service:"mobile"})
Infrastructure & sécuritéUne infrastructure décrite en code, et un accès Zero Trust qui ne repose pas sur un SMS.openService({service:"infrastructure"})
Maintenance & évolutionUn produit qui reste à jour, surveillé et corrigé, avec quelqu'un qui répond quand ça casse.openService({service:"maintenance"})
Conseil Architecture Agent-NativeRendre un produit existant pilotable par un agent, sans le réécrire — et sans lui ouvrir plus qu'il ne faut.openService({service:"agent-native"})

Naviguer

YorroStudio d'ingénierie produit à Abidjan et Paris. On conçoit, on code, on livre.navigate({page:"home"})
ServicesConstruire un produit de bout en bout, ou conseiller une équipe sur son architecture agent-native.navigate({page:"services"})
LabsCe que le studio a construit : produits, prototypes et recherches, avec leur avancement réel.navigate({page:"labs"})
TutorielsDes guides pas-à-pas tirés de vrais projets, réunis en parcours par sujet.navigate({page:"tutorials"})
JournalLes notes et les prises de position du studio.navigate({page:"journal"})
ContactDécrivez votre projet ; on répond avec un cadrage, pas avec un devis type.navigate({page:"contact"})
À proposQui tient le studio, comment il travaille, et ce qu'il refuse de faire.navigate({page:"about"})
↑↓ naviguer↵ exécuteréchap fermerActions unifiées