Dans une vraie app
La règle à retenir : un worklet ne voit que ce qu’il capture au moment de sa création, et ne peut appeler que d’autres worklets ou des fonctions natives exposées au runtime UI. Appeler une fonction ordinaire (un setState, une navigation, un appel réseau) depuis un worklet lève une erreur ; il faut passer par scheduleOnRN(fn, ...args) de react-native-worklets, qui planifie l’appel sur le thread JS (l’ancien runOnJS de Reanimated 3). Dans l’autre sens, scheduleOnUI remplace runOnUI pour exécuter un worklet depuis le thread JS.
Les pièges typiques : une closure qui capture un gros objet (toute la liste de données, par exemple), recopié dans le runtime UI à chaque création ; une fonction utilitaire importée d’un fichier sans directive worklet et qui échoue au premier appel ; des console.log qui semblent arriver dans le désordre parce qu’ils viennent de deux runtimes. Le message « Tried to synchronously call a non-worklet function on the UI thread » désigne exactement cette situation.
Pour vérifier que le plugin est bien actif, un useAnimatedStyle qui fonctionne suffit ; s’il échoue avec une erreur de worklet, c’est en général babel.config.js (plugin absent ou mal placé) ou un cache Metro à vider. Les worklets peuvent aussi servir hors animation, par exemple pour traiter des frames caméra avec VisionCamera, qui expose son propre runtime de worklets.
Termes liés
Reanimated
La librairie d’animation de Software Mansion qui exécute les animations sur le thread UI via des worklets, sans attendre le thread JavaScript.
Gesture Handler
La librairie de Software Mansion qui reconnaît les gestes (pan, tap, pinch…) côté natif et les combine, avec des callbacks exécutés sur le thread UI.
JSI (JavaScript Interface)
L’API C++ qui laisse JavaScript tenir des références directes sur des objets natifs, sans sérialisation : la fondation de la New Architecture.
Hermes
Le moteur JavaScript de Meta pour React Native, par défaut depuis la 0.70, qui précompile le bundle en bytecode au build.