Maison > interface Web > js tutoriel > Signaux: réactivité à grains fins pour les cadres JavaScript

Signaux: réactivité à grains fins pour les cadres JavaScript

尊渡假赌尊渡假赌尊渡假赌
Libérer: 2025-02-09 10:54:14
original
653 Les gens l'ont consulté

Signals: Fine-grained Reactivity for JavaScript Frameworks

Cet article explore en profondeur comment utiliser les signaux en solide, une bibliothèque JavaScript moderne et réactive qui s'appuie principalement sur des composants pour créer des interfaces utilisateur.

Contenu:

  1. Introduction du signal
    • Scénarios d'application de signal
  2. Qu'est-ce qui est solide?
  3. quel est exactement le signal?
  4. Exemple de signal
  5. Signal dans Angular
  6. Autres caractéristiques de Solid

Points clés:

    Le signal
  • est l'une des dernières tendances du développement Web, et il fournit un moyen réactif de mettre à jour les valeurs variables facilement dans votre programme. Lorsque la valeur est mise à jour, tout le contenu à l'aide de la valeur est mis à jour, ce qui rend le signal unique. Il est utilisé dans des bibliothèques telles que solides, angulaires, préact et Vue.
  • Solid est un cadre réactif créé par Ryan Carniato qui utilise des signaux pour créer une réactivité à grains fins. Il a précompilé comme svelte, ce qui signifie que moins de code doivent être livrés. Solid n'utilise pas de DOM virtuel et le composant n'est appelé qu'une seule fois sur le premier rendu.
  • Le signal
  • est une valeur observable, a une valeur initiale et fournit des méthodes Getter et Setter qui peuvent être utilisées pour afficher ou mettre à jour cette valeur. Lorsque la valeur du signal change, il envoie un signal, déclenchant une réaction. Il s'agit généralement d'un appel à mettre à jour et à rendre tout composant qui dépend de cette valeur.
  • En solide, Getter se comporte comme une fonction, ce qui signifie qu'il souscrit automatiquement l'effet au signal. Cela garantit que lorsque la valeur du signal change, l'effet fonctionnera avec la nouvelle valeur. Cela signifie également toujours renvoyer la dernière valeur actuelle.
  • En plus des signaux, Solid a également d'autres fonctionnalités qui valent la peine d'être prêts à prêter attention. Il est très rapide dans la création et la mise à jour du contenu et a une API similaire à réagir. Il ajoute des fonctionnalités intelligentes à JSX, telles que le flux de contrôle, et prend en charge le rendu, l'hydratation et le streaming côté serveur hors de la boîte.

Introduction du signal

L'une des dernières tendances du développement Web est l'utilisation de signaux, qui fournit un moyen plus réactif de mettre à jour les valeurs variables facilement dans votre programme. Lorsqu'une valeur est mise à jour, tout le contenu utilisant cette valeur est également mis à jour. C'est pourquoi le signal est si unique.

La croissance du signal et son attention rappellent toute la sensation causée lorsque React 16.8 a été libéré en 2019, lorsque l'équipe React a introduit le crochet. L'objectif du crochet est de faire des mises à jour d'état (éventuellement toutes les mises à jour) des méthodes plus fonctionnelles et de rester à l'écart de l'utilisation de classes. Bien que les signaux se ressemblent presque comme le crochet, il existe de légères différences entre elles (nous l'explorons ci-dessous).

Scénarios d'application de signal

  • La bibliothèque solide utilise toujours des signaux.
  • Angular a récemment utilisé les signaux comme principale façon de détecter les changements dans l'application.
  • Preact a récemment introduit les signaux comme un outil pour gérer les États.
  • Vue a une API réactive, où les références sont presque un signal sous différents noms.

Qu'est-ce qui est solide?

Solid (également connu sous le nom de SolidJS) a été fondé en 2016 par Ryan Carniato et publié en 2018. Selon ses propres mots, «cela découle du désir de continuer à utiliser le modèle réactif à grain fin que j'aime de knockout.js.»

Il n'a pas aimé la direction du développement de bibliothèques telles que React et Vue, "il préfère simplement le contrôle et la composabilité apportés en utilisant des primitives plus petites et plus indépendantes que les composants." Framework réactif qui utilise des signaux pour créer une réactivité à grains fins (un modèle de signal qui peut maintenant être vu dans de nombreux autres cadres également).

À première vue, le solide est très similaire à React avec les crochets et les composants fonctionnels. À certains égards, cela est vrai: ils ont tous la même philosophie lorsqu'il s'agit de gérer les données, ce qui facilite l'apprentissage solide si nous connaissons déjà React.

Cependant, il existe quelques différences clés:

  • Le solide est similaire à Svelte et est précompilé. Cela signifie que les améliorations des performances sont incorporées dans la version finale, il y a donc moins de code à délivrer.
  • solide n'utilise pas de Dom virtuel, et même si les composants ne sont que des fonctions (comme dans React), ils ne sont appelés qu'une seule fois sur le premier rendu. (Dans React, ils seront appelés tant qu'il y aura une mise à jour du composant.)

Quel est exactement le signal?

Le signal

est basé sur le mode observateur, qui est l'un des modèles de conception classiques du gang de quatre. En fait, le knockout utilise quelque chose de très similaire à un signal, appelé "objet observable".

Les signaux sont la partie la plus atomique d'une application réactive. Ce sont des valeurs observables, ont des valeurs initiales et fournissent des méthodes Getter et Setter pour afficher ou mettre à jour cette valeur, respectivement. Cependant, pour tirer le meilleur parti du signal, nous avons besoin de réactions , qui sont les effets de l'abonnement au signal et de l'exécution en réponse à des changements de valeur.

Lorsque la valeur du signal change, il émet en fait un événement (ou "signal") puis déclenche une réaction (ou "effet"). Il s'agit généralement d'un appel à mettre à jour et à rendre tout composant qui dépend de cette valeur. Ces composants sont appelés signaux abonnez-vous . Cela signifie que si la valeur du signal change, seuls ces composants seront mis à jour.

Un concept clé en solide est que tout est un effet, même un rendu de vue. Chaque signal est étroitement lié aux composants spécifiques qu'il affecte. Cela signifie que lorsque la valeur change, la vue peut être remensionnée de manière très fine sans relâche coûteuse pleine page.

Exemple de signal

Pour créer un signal en solide, nous devons utiliser la fonction CreateSignal et attribuer deux variables à sa valeur de retour comme indiqué ci-dessous:

const [name, setName] = createSignal("Diana Prince");
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ces deux variables représentent les méthodes Getter et Setter. Dans l'exemple ci-dessus, le nom est Getter et SetName est Setter. La valeur 0 transmise à CreateSignal indique la valeur initiale du signal.

Cela semble certainement familier pour réagir les développeurs. L'utilisation de React Hook pour créer un code similaire ressemble à ceci:

const [name, setName] = useState("Diana Prince");
Copier après la connexion
Copier après la connexion
Copier après la connexion

Dans React, Getter (Name) se comporte comme une variable, tandis que Setter (setName) est une fonction.

Cependant, même s'ils semblent très similaires, la principale différence est que le nom se comporte comme une variable dans React, tandis qu'en solide, c'est une fonction.

La prise de nom en fonction signifie que lorsqu'elle est appelée à l'intérieur de l'effet, il souscrit automatiquement l'effet au signal. Cela signifie que lorsque la valeur du signal change, l'effet fonctionnera avec la nouvelle valeur.

Ce qui suit est un exemple utilisant le signal Name ():

const [name, setName] = createSignal("Diana Prince");
Copier après la connexion
Copier après la connexion
Copier après la connexion
La fonction

createEffect peut être utilisée pour exécuter des effets en fonction de n'importe quelle valeur de signal, tel que l'enregistrement de la valeur à la console. Il s'abonnera à tout signal référencé à l'intérieur de la fonction. Si la valeur d'un signal change, le code d'effet s'exécutera à nouveau.

Dans notre exemple, si nous utilisons la fonction SetName Setter pour modifier la valeur du signal de nom, nous pouvons voir le code d'effet s'exécuter et enregistrer le nouveau nom en console:

const [name, setName] = useState("Diana Prince");
Copier après la connexion
Copier après la connexion
Copier après la connexion

Prendre Getter en fonction signifie également que le renvoi de la dernière valeur actuelle, tandis que d'autres cadres peuvent renvoyer les valeurs "périmées" même après la mise à jour de la valeur. Cela signifie également que tout signal peut être facilement lié à la valeur calculée et mémorisé:

createEffect(() => console.log(`Hello ${name()}`))
Copier après la connexion
Copier après la connexion

Cela créera un signal en lecture seule qui peut être accessible à l'aide de NameLength (). Sa valeur sera mise à jour en réponse à toute modification de la valeur du signal de nom.

Si le signal Name () est inclus dans le composant, le composant s'abonnera automatiquement à ce signal et renvoie lorsque sa valeur change:

setName("Wonder Woman")
Copier après la connexion
Copier après la connexion

La mise à jour de la valeur du signal de nom avec setName fera que Hellocomponent rendera. De plus, la fonction Hellocomponent est appelée une seule fois pour créer le HTML pertinent. Une fois qu'elle est appelée, il n'a pas besoin d'exécuter à nouveau, même s'il y a une mise à jour de la valeur du signal de nom. Cependant, dans React, les fonctions de composants sont appelées chaque fois que des changements se produisent dans les valeurs qu'ils contiennent.

Une autre différence majeure pour Solid est que bien qu'il utilise JSX pour la logique de vue, il n'utilise pas du tout Virtual Dom. Au lieu de cela, il précompila le code à l'aide d'outils de construction Vite Modern. Cela signifie qu'il y a moins de JavaScript qui doit être livré et qu'aucune bibliothèque solide réelle ne doit être livrée avec elle (très similaire à Svelte). Les vues sont construites en HTML. Ensuite, utilisez le système de texte de modèle pour reconnaître toutes les modifications, puis effectuez de bonnes opérations DOM à l'ancienne pour une mise à jour à grain fine dynamiquement.

Ces mises à jour d'isolement et de grains fins vers des zones spécifiques du DOM sont très différentes de l'approche de React pour reconstruire complètement un Dom virtuel après tout changement. Les mises à jour directes du DOM réduisent les frais généraux du maintien du DOM virtuel et le rendent extrêmement rapide. En fait, Solid a des données impressionnantes en termes de vitesses de rendu, deuxième seulement en JavaScript natif.

Tous les repères peuvent être consultés ici.

Signal dans Angular

Comme mentionné précédemment, Angular a récemment adopté des signaux pour les mises à jour à grain fin. Ils fonctionnent de manière similaire aux signaux en solide, mais sont créés légèrement différemment.

Pour créer un signal, vous pouvez utiliser la fonction de signal et passer la valeur initiale en tant que paramètre:

const nameLength = createMemo(() => name().length)
Copier après la connexion
Copier après la connexion

Le nom de variable affecté au signal (nom dans l'exemple ci-dessus) peut ensuite être utilisé comme Getter:

const [name, setName] = createSignal("Diana Prince");
Copier après la connexion
Copier après la connexion
Copier après la connexion

Le signal a également une méthode définie qui peut être utilisée pour mettre à jour sa valeur comme indiqué ci-dessous:

const [name, setName] = useState("Diana Prince");
Copier après la connexion
Copier après la connexion
Copier après la connexion

La méthode de mise à jour à grain fin en angulaire est presque la même que dans Solid. Tout d'abord, Angular a une méthode de mise à jour () qui fonctionne similaire à SET, mais tire des valeurs au lieu de substituer les valeurs:

createEffect(() => console.log(`Hello ${name()}`))
Copier après la connexion
Copier après la connexion

La seule différence ici est de prendre la valeur (nom) en tant que paramètre et d'exécuter l'instruction à ce sujet (.touppercase ()). Ceci est utile lorsque la valeur finale du Getter en cours de remplacement est inconnue et doit être dérivée.

Deuxièmement, Angular a également une fonction calculée () pour créer des signaux mémorisés. Cela fonctionne exactement de la même manière que CreateMemo de Solid:

setName("Wonder Woman")
Copier après la connexion
Copier après la connexion

Comme le solide, la valeur du signal calculé change chaque fois qu'une variation de la valeur du signal dans la fonction de calcul est détectée.

Enfin, Angular a la fonction Effect (), qui fonctionne exactement de la même manière que la fonction createEFffect () en solide. Chaque fois que la valeur dont il dépend est mise à jour, les effets secondaires sont réexécutés:

const nameLength = createMemo(() => name().length)
Copier après la connexion
Copier après la connexion

Autres caractéristiques du solide

Ce ne sont pas seulement des signaux qui rendent une attention particulière. Comme nous l'avons déjà mentionné, il est très rapide de créer et de mettre à jour du contenu. Il a également une API très similaire à réagir, il devrait donc être facile de commencer pour quiconque a déjà utilisé React. Cependant, Solid fonctionne très différemment à la couche sous-jacente et fonctionne généralement mieux.

Une autre fonctionnalité agréable de Solid est qu'il ajoute des fonctionnalités intelligentes à JSX, telles que le flux de contrôle. Il nous permet de créer une boucle pour une boucle à l'aide du composant , et nous pouvons utiliser le composant pour contenir des erreurs.

De plus, le composant est également pratique pour afficher le contenu (tel que la modalité) en dehors du processus habituel. Et Reactif imbriqué signifie que toute modification du tableau ou de l'objet de valeur renforcera la partie modifiée de la vue sans avoir à rériformer la liste entière. Solid utilise le magasin pour faciliter cela. Solid prend également en charge le rendu, l'hydratation et le streaming côté serveur hors de la boîte.

Pour tous ceux qui veulent essayer Solid, il y a un excellent tutoriel d'introduction sur le site Web solide où nous pouvons expérimenter le code dans Solid Playground.

Conclusion

Dans cet article, nous présentons le concept de signaux et comment ils sont utilisés en solide et angulaire. Nous avons également examiné comment ils aident Solid à effectuer des mises à jour à grain fin à DOM sans avoir besoin de DOM virtuel. De nombreux cadres adoptent désormais des paradigmes de signalisation, donc ce sont certainement les astuces que nous devrions maîtriser!

FAQ sur les signaux en javascript

Quelles sont les principales différences entre les signaux en JavaScript et le traitement des événements traditionnels?

Le traitement des événements traditionnels en JavaScript implique de joindre un écouteur d'événements à un élément DOM et de répondre aux interactions utilisateur ou aux événements système. Cependant, cette approche peut devenir complexe et difficile à gérer dans de grandes applications. D'un autre côté, les signaux fournissent une approche granulaire plus fine de la réactivité. Ils vous permettent de créer des unités de comportement réactif indépendantes qui peuvent être combinées pour créer des interactions complexes. Contrairement aux auditeurs d'événements, les signaux ne sont pas liés à un élément ou un type d'événement DOM spécifique, ce qui les rend plus flexibles et plus faciles à réutiliser dans différentes parties de l'application.

Comment les performances des signaux en JavaScript se comparent-elles à d'autres modèles réactifs?

Les signaux sont conçus pour être efficaces et performants. Ils utilisent des modèles réactifs basés sur Pull, ce qui signifie qu'ils ne calculent leurs valeurs que lorsque cela est nécessaire. Cela peut entraîner des améliorations significatives des performances dans les applications avec des comportements réactifs complexes, car des calculs inutiles peuvent être évités. Cependant, les différences de performances exactes dépendront du cas d'utilisation spécifique et du degré d'optimisation du modèle réactif.

Les signaux peuvent-ils être utilisés avec d'autres frameworks JavaScript tels que React ou Vue?

Oui, les signaux peuvent être utilisés avec d'autres frameworks JavaScript tels que React ou Vue. Ils peuvent être intégrés dans les systèmes réactifs de ces cadres pour fournir une flexibilité et un contrôle supplémentaires sur le comportement des réponses. Cependant, il est important de noter que chaque cadre a sa propre façon de gérer la réactivité, vous devez donc comprendre comment les signaux s'inscrivent dans le modèle.

Comment déboguer une application JavaScript qui utilise des signaux?

Le débogage des applications JavaScript qui utilisent les signaux peuvent être légèrement différents de la débogage des applications traditionnelles axées sur les événements. Étant donné que le signal n'est pas lié à un événement ou à un élément DOM spécifique, vous devez suivre le flux de données dans le signal et ses dépendances. Des outils comme Chrome Devtools sont utiles pour cela, car ils vous permettent de parcourir le code et de vérifier l'état du signal à chaque étape.

Quelles sont les limites ou les inconvénients de l'utilisation de signaux en JavaScript?

Bien que les signaux offrent de nombreux avantages, ils ont également certaines limites. Un inconvénient potentiel est qu'ils peuvent rendre votre code plus complexe et difficile à comprendre, en particulier pour les développeurs qui ne connaissent pas le concept de réactivité. En outre, comme les signaux sont des concepts relativement nouveaux en JavaScript, il peut y avoir moins de ressources et un support communautaire disponibles que des modèles et des cadres plus matures.

Comment tester une application JavaScript à l'aide de signaux?

L'application JavaScript à l'aide de signaux peut être testée en utilisant les mêmes techniques que toute autre application JavaScript. Vous pouvez utiliser des tests unitaires pour tester les signaux individuels et leur comportement, et utiliser des tests d'intégration pour tester comment les signaux interagissent entre eux et avec d'autres parties de votre application. Des outils comme la plaisanterie ou le moka peuvent être utilisés à cet effet.

Le signal peut-il être utilisé dans l'environnement Node.js?

Oui, le signal peut être utilisé dans l'environnement Node.js. Ils ne sont pas liés au navigateur ou à DOM, ils peuvent donc être utilisés dans n'importe quel environnement JavaScript. Cela en fait un outil puissant pour construire un comportement réactif dans les applications côté serveur.

Comment gérer les erreurs dans les applications JavaScript qui utilisent des signaux?

La méthode de gestion des erreurs dans les applications JavaScript à l'aide de signaux est similaire à toute autre application JavaScript. Vous pouvez utiliser le bloc Try / Catch pour attraper des erreurs et les gérer correctement. De plus, vous pouvez utiliser des signaux d'erreur pour propager les erreurs via le graphique du signal et les traiter de manière centralisée.

Les signaux peuvent-ils être utilisés pour créer des applications en temps réel?

Oui, les signaux peuvent être utilisés pour créer des applications en temps réel. Ils fournissent un moyen puissant de gérer et de répondre aux mises à jour de données en temps réel, ce qui en fait un excellent choix pour les applications telles que les applications de chat, les tableaux de bord en temps réel et les jeux multijoueurs.

Comment optimiser les performances des applications JavaScript à l'aide de signaux?

Optimisation des performances des applications JavaScript qui utilisent des signaux implique une gestion minutieuse des dépendances du signal et d'éviter les calculs inutiles. Vous pouvez utiliser des outils comme Chrome Devtools pour analyser votre application et identifier les goulots d'étranglement des performances. De plus, vous pouvez utiliser des techniques telles que la mémoire et l'évaluation des retards pour améliorer les performances de votre signal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal