Theo a fait une vidéo cette semaine sur les comportements non intuitifs des hooks React, explorant notamment l'idée d'un hook appelé usePrevious, pour conserver la version valeur du dernier re-rendu, avant l'actuel. un. Une manière de faire un peu de logique avec l'ancien et le nouvel état.
Si vous voulez voir des idées sur la façon de l'implémenter, veuillez regarder la vidéo, dans cet article, l'idée est d'explorer l'aspect conceptuel d'avoir un hook comme usePrevious.
Expressions réactives
Comme vous pouvez le voir, nous n'avons pas de hook primitif comme celui-ci dans React. Avant les hooks, à l'ère basée sur les classes, nous avions une méthode de cycle de vie appelée composantDidUpdate où nous obtenions tous les états et accessoires précédents en tant que paramètres, pourquoi n'ont-ils pas conservé ce comportement avec les hooks ?
Cela peut être un peu répétitif si vous lisez cette série de posts, mais il faut parler du changement de paradigme, dans ce cas.
Avec les classes, lorsque certains états sont mis à jour, vous ne disposez pas de moyen automatique de recalculer les valeurs dérivées. Si vous utilisez des accessoires et des états spécifiques pour calculer une nouvelle valeur, vous devez vérifier par vous-même si certains d'entre eux ont changé.
De cette façon, la solution est d'avoir un rappel qui est appelé dans toutes les mises à jour, et d'envoyer à l'utilisateur les valeurs précédentes. Le code de l'application vérifie les différences et met à jour l'état calculé avec le nouveau résultat. Il s'agit de la simplicité des composants basés sur les classes, vous avez un contrôle total sur le flux de données et devez contrôler manuellement les calculs.
Nous arrivons ici aux expressions de réactivité.
Au lieu de devoir vérifier et faire le changement, vous écrivez une expression, la formule de calcul, en quelque sorte. Ce calcul doit être exécuté avec la version actuelle, sans accès à la précédente.
Imaginez une formule :
a = b + c b = 10 c = 20 a = 10 + 20 a = 30
Si j'utilise cette expression 1 million de fois, en passant b à 10 et c à 20, j'obtiendrai le même résultat. Ceci est un pur calcul. React exécute le même principe. Tous les calculs de dérivations doivent être purs.
Mais pourquoi est-ce important ?
Réagissez au travail dans les re-rendus. Chaque cycle génère une description de l'interface utilisateur et, en fonction des différences entre l'actuelle et la suivante, il valide les modifications dans le DOM. Chaque rendu est complètement séparé du précédent ou du suivant.
UI = fn(state)
Donc, pour chaque version d'état différente, nous avons une version d'interface utilisateur différente. Cela devient assez déroutant si nous ajoutons ici les valeurs précédentes. Car désormais, cela ne dépend plus seulement de l’État, mais aussi de l’État précédent. Au lieu d'avoir une source, une expression et un résultat, je peux avoir plusieurs sources, peut-être des expressions plus complexes pour gérer ces sources et une interface utilisateur incohérente et imprévisible en conséquence.
Chaque rendu se comportera différemment en fonction de l'état précédent. Et comme certaines des implémentations possibles de usePrevious reposent sur l'ordre temporel dans React, cela devient plus dangereux.
Avec des fonctionnalités concurrentes, React peut arrêter sans prévenir un rendu, pour prioriser d'autres actions. En fonction de useEffect et ref, vous pouvez conserver une version obsolète d'un rendu "précédent" qui est même le vrai précédent. Encore du désordre à raisonner.
Mémorisation
Pensez avec une expression comme celle-ci
a = b + c b = 10 c = 20 a = 10 + 20 a = 30
Une partie de cela est prioritaire et doit être calculée au préalable, réfléchissons-y avec du code javascript :
UI = fn(state)
Nous avons donc maintenant deux expressions séparées qui peuvent être calculées séparément et qui sont parfaitement pures. Mais si la valeur de b change beaucoup et que le calcul de cdResult est coûteux, comment pouvons-nous le résoudre ? Mémoriser !
a = b + (c - d)
Maintenant, cdResult sera simplement recalculé si c ou d change.
Mais plus haut dans le texte j'ai dit qu'il n'y avait pas de valeur précédente, mais comment un calcul d'un rendu peut-il être utilisé dans le suivant ? Cela ne brise pas la pureté des calculs ?
En fait, non. Par exemple :
const cdResult = c - d; const a = b + cdResult;
Imaginez que nous sommes dans le rendu numéro 1. Le c a la valeur de 30 et d a la valeur de 20, donc le résultat est 10. Mais au fur et à mesure que je le mémorise, React gardera une trace des dépendances que j'ai ajoutées. le tableau. Si certains d'entre eux changent, il recalcule.
const cdResult = React.useMemo(() => c - d, [c, d]); const a = b + cdResult;
Mais ils n’ont pas changé. Si j'appelle à nouveau cette expression, avec c comme 30 et d comme 20, j'obtiendrai le même 10 comme résultat. Même si je suis dans le rendu numéro 2 et que d'autres variables ont changé, les dépendances que j'utilise dans ce calcul n'ont pas changé.
Je peux le recalculer à chaque rendu, c'est le comportement par défaut de React, mais je peux choisir de sauter un recalcul inutile qui renverra la même valeur, donc je l'ai gardé. On a gardé la pureté et on a gardé la séparation entre les rendus
État précédent
Mais il existe un bon endroit pour faire de la logique avec l'état précédent et les actions de l'utilisateur. Bien sûr, au moment où le rappel est appelé, ce serait l'état actuel. Mais si vous avez un état qui doit changer en fonction d’une certaine logique, c’est l’endroit idéal.
Bien sûr, il peut y avoir des cas très spécifiques où vous aurez peut-être besoin d'un hook tel que usePrevious, mais soyez conscient des incohérences que cela peut provoquer, et essayez d'ajouter des garanties pour éviter les bugs sur l'application.
Et surtout, si possible, évitez-le.
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!

La puissance du cadre JavaScript réside dans la simplification du développement, l'amélioration de l'expérience utilisateur et les performances des applications. Lorsque vous choisissez un cadre, considérez: 1. Taille et complexité du projet, 2. Expérience d'équipe, 3. Écosystème et soutien communautaire.

INTRODUCTION Je sais que vous pouvez le trouver étrange, que doit faire exactement JavaScript, C et Browser? Ils semblent sans rapport, mais en fait, ils jouent un rôle très important dans le développement Web moderne. Aujourd'hui, nous discuterons du lien étroit entre ces trois. Grâce à cet article, vous apprendrez comment JavaScript fonctionne dans le navigateur, le rôle de C dans le moteur du navigateur et comment ils fonctionnent ensemble pour stimuler le rendu et l'interaction des pages Web. Nous connaissons tous la relation entre JavaScript et Browser. JavaScript est la langue principale du développement frontal. Il fonctionne directement dans le navigateur, rendant les pages Web vives et intéressantes. Vous êtes-vous déjà demandé pourquoi javascr

Node.js excelle dans des E / S efficaces, en grande partie grâce aux flux. Streams traite les données progressivement, en évitant la surcharge de mémoire - idéal pour les fichiers volumineux, les tâches réseau et les applications en temps réel. Combiner les flux avec la sécurité de type dactylographié crée un powe

Les différences de performance et d'efficacité entre Python et JavaScript se reflètent principalement dans: 1) comme un langage interprété, Python fonctionne lentement mais a une efficacité de développement élevée et convient au développement rapide des prototypes; 2) JavaScript est limité au thread unique dans le navigateur, mais les E / S multi-threading et asynchrones peuvent être utilisées pour améliorer les performances dans Node.js, et les deux ont des avantages dans les projets réels.

JavaScript est originaire de 1995 et a été créé par Brandon Ike, et a réalisé que la langue en langue C. 1.C offre des capacités de programmation élevées et au niveau du système pour JavaScript. 2. La gestion de la mémoire de JavaScript et l'optimisation des performances reposent sur le langage C. 3. La fonctionnalité multiplateforme du langage C aide JavaScript à s'exécuter efficacement sur différents systèmes d'exploitation.

JavaScript s'exécute dans les navigateurs et les environnements Node.js et s'appuie sur le moteur JavaScript pour analyser et exécuter du code. 1) Générer une arborescence de syntaxe abstraite (AST) au stade d'analyse; 2) Convertir AST en bytecode ou code machine à l'étape de compilation; 3) Exécutez le code compilé à l'étape d'exécution.

Les tendances futures de Python et JavaScript incluent: 1. Python consolidera sa position dans les domaines de l'informatique scientifique et de l'IA, 2. JavaScript favorisera le développement de la technologie Web, 3. Le développement de plate-forme multiplié deviendra un sujet brûlant, et 4. L'optimisation des performances sera le focus. Les deux continueront d'étendre les scénarios d'application dans leurs champs respectifs et de faire plus de percées dans les performances.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft

Dreamweaver CS6
Outils de développement Web visuel

Dreamweaver Mac
Outils de développement Web visuel

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux
