Site icon Blog ARC Optimizer

Réactivité en vue


À propos de l'auteur

Développeur front-end basé à Lagos, Nigeria. Il aime convertir des conceptions en code et créer des éléments pour le Web.
En savoir plus sur
Timi

La réactivité est la capacité pour une variable (tableau, chaîne, nombre, objet, etc.) de se mettre à jour lorsque sa valeur ou toute autre variable à laquelle elle fait référence est modifiée après la déclaration.

Dans cet article, nous ' Nous allons examiner la réactivité dans Vue, comment cela fonctionne et comment nous pouvons créer des variables réactives à l'aide de méthodes et de fonctions nouvellement créées. Cet article est destiné aux développeurs qui ont une bonne compréhension du fonctionnement de Vue 2.x et qui cherchent à se familiariser avec la nouvelle Vue 3 .

Nous allons créer une application simple pour mieux comprendre ce sujet. Le code de cette application est disponible sur GitHub .

Par défaut, JavaScript n'est pas réactif . Cela signifie que si nous créons la variable boy et la référençons dans la partie A de notre application, puis modifiez boy dans la partie B, la partie A ne sera pas mise à jour avec la nouvelle valeur de garçon .

 let framework = 'Vue';
let phrase = `$ {framework} est génial`;
console.log (phrase)
 // enregistre "Vue est génial"
framework = 'Réagir';
console.log (phrase)
// devrait consigner "React is awesome" si 'phrase' est réactive. 

L'extrait ci-dessus est un exemple parfait de la nature non réactive de JavaScript – d'où la raison pour laquelle le changement n'est pas reflété dans la phrase variable.

Dans Vue 2.x, les accessoires calculés et data () étaient tous réactifs par défaut, à l'exception de propriétés qui ne sont pas présentes dans les données lors de la création de tels composants. Cela signifie que lorsqu'un composant est injecté dans le DOM seules les propriétés existantes dans l'objet data du composant entraîneront la mise à jour du composant si et quand ces propriétés changent.

En interne, Vue 3 utilise l'objet Proxy (une fonctionnalité ECMAScript 6) pour s'assurer que ces propriétés sont réactives, mais il offre toujours la possibilité d'utiliser l'objet .defineProperty de Vue 2 pour la prise en charge d'Internet Explorer (ECMAScript 5). Cette méthode définit une nouvelle propriété directement sur un objet, ou modifie une propriété existante sur un objet, et renvoie l'objet.

À première vue et puisque la plupart d'entre nous savent déjà que la réactivité n'est pas nouvelle dans Vue, cela peut sembler inutile pour utiliser ces propriétés, mais l'API Options a ses limites lorsque vous avez affaire à une grande application avec des fonctions réutilisables dans plusieurs parties de l'application. À cette fin, la nouvelle Composition API a été introduite pour aider à la logique d'abstraction afin de rendre une base de code plus facile à lire et à maintenir. De plus, nous pouvons maintenant facilement rendre toute variable réactive quel que soit son type de données en utilisant l'une des nouvelles propriétés et méthodes.

Lorsque nous utilisons l'option setup qui sert de point d'entrée de l'API Composition, l'objet data les propriétés calculées et les méthodes sont inaccessibles car l'instance de composant n'a pas encore été créée lors de la configuration de est exécuté. Cela rend impossible de tirer parti de la réactivité intégrée dans l'une de ces fonctionnalités dans la configuration . Dans ce tutoriel, nous allons découvrir toutes les façons de faire cela.

La ​​méthode réactive

D'après la documentation, la méthode réactive qui est l'équivalent de Vue.observable () dans Vue 2.6, peut être utile lorsque nous essayons de créer un objet dont toutes les propriétés sont réactives (comme l'objet data dans l'API Options). Sous le capot, l'objet data de l'API Options utilise cette méthode pour rendre réactives toutes ses propriétés.

Mais nous pouvons créer notre propre objet réactif comme ceci:

 import {reactive } de 'vue'

// état réactif
laissez l'utilisateur = réactif ({
        "id": 1,
        "nom": "Leanne Graham",
        "username": "Bret",
        "email": "Sincere@april.biz",
        "adresse": {
            "street": "Kulas Light",
            "suite": "Apt. 556",
            "ville": "Gwenborough",
            "code postal": "92998-3874",
            "geo": {
                "lat": "-37,3159",
                "lng": "81.1496"
            }
        },
        "téléphone": "1-770-736-8031 x56442",
        "site Web": "hildegard.org",
        "compagnie": {
            "nom": "Romaguera-Crona",
            "catchPhrase": "Réseau neuronal client-serveur multicouche",
            "bs": "exploiter les marchés électroniques en temps réel"
        },
        "voitures": {
            "nombre": 0
        }
    }) 

Ici, nous avons importé la méthode réactive de Vue, puis nous avons déclaré notre variable user en passant sa valeur à cette fonction comme argument. Ce faisant, nous avons rendu user réactif, et, par conséquent, si nous utilisons user dans notre modèle et si l'objet ou une propriété de cet objet doit changer, alors ceci La valeur sera automatiquement mise à jour dans ce modèle.

ref

Tout comme nous avons une méthode pour rendre les objets réactifs, nous en avons également besoin pour rendre d'autres valeurs primitives autonomes (chaînes, booléens , valeurs non définies, nombres, etc.) et tableaux réactifs. Pendant le développement, nous travaillerions avec ces autres types de données tout en ayant besoin qu'ils soient réactifs. La première approche à laquelle nous pourrions penser serait d'utiliser reactive et de passer la valeur de la variable que nous voulons rendre réactive.

 import {reactive} from 'vue'

état const = réactif ({
  utilisateurs: [],
}); 

Parce que réactif a une conversion réactive profonde, utilisateur en tant que propriété serait également réactif, atteignant ainsi notre objectif; par conséquent, l'utilisateur mettrait toujours à jour partout où il est utilisé dans le modèle d'une telle application. Mais avec la propriété ref nous pouvons rendre réactive toute variable avec n'importe quel type de données en passant la valeur de cette variable à ref . Cette méthode fonctionne également pour les objets, mais elle imbrique l'objet d'un niveau plus profond que lorsque la méthode réactive est utilisée.

 let property = {
  chambres: '4 chambres',
  garage: vrai,
  SwimmingPool: faux
}
let reactiveProperty = ref (propriété)
console.log (propriété réactive)
// imprime {
// valeur: {rooms: "4 rooms", garage: true, swimmingPool: false}
//} 

Sous le capot, ref prend cet argument qui lui est passé et le convertit en un objet avec une clé de valeur . Cela signifie que nous pouvons accéder à notre variable en appelant variable.value et nous pouvons également modifier sa valeur en l'appelant de la même manière.

 import {ref} depuis 'vue'
soit age = ref (1)

console.log (age.value)
// imprime 1
age.value ++
console.log (age.value)
// imprime 2 

Avec cela, nous pouvons importer ref dans notre composant et créer une variable réactive:

 
 

Ici, nous avons importé ref afin de créer une variable réactive users dans notre composant. Nous avons ensuite importé axios pour récupérer les données d'un fichier JSON dans le dossier public et nous avons importé notre composant carsNumber que nous créerons plus tard. La prochaine chose que nous avons faite a été de créer une variable réactive users en utilisant la méthode ref afin que users puissent se mettre à jour chaque fois que la réponse de notre fichier JSON change. [19659006] Nous avons également créé une fonction getUser qui récupère le tableau users de notre fichier JSON en utilisant axios et nous avons attribué la valeur de cette requête au utilisateurs variable. Enfin, nous avons créé une propriété calculée qui calcule le nombre total de voitures que nos utilisateurs ont comme nous l'avons modifié dans la section template.

Il est important de noter que lors de l'accès aux propriétés ref qui sont retournées dans la section template ou en dehors de setup () ils sont automatiquement peu profonds déballés . Cela signifie que refs qui sont un objet nécessiterait toujours une .value pour y accéder. Comme users est un tableau, nous pourrions simplement utiliser users et non users.value dans getTotalCars .

Dans la section template , nous avons affiché un tableau qui affiche les informations de chaque utilisateur, ainsi qu'un composant . Ce composant accepte un accessoire cars qui est affiché dans la ligne de chaque utilisateur en tant que nombre de voitures dont il dispose. Cette valeur est mise à jour chaque fois que la valeur de voitures change dans l'objet utilisateur ce qui correspond exactement à la façon dont l'objet data ou la propriété calculée fonctionnerait si nous étions utilisation de l'API Options.

toRefs

Lorsque nous utilisons l'API Composition, la fonction setup accepte deux arguments: props et context ]. Cet accessoire est passé du composant à setup () et il permet d'accéder aux accessoires que le composant possède depuis cette nouvelle API. Cette méthode est particulièrement utile car elle permet la déstructuration d'objets sans perdre sa réactivité.

 

 

Pour utiliser une valeur qui est un objet de accessoires dans l'API de composition tout en garantissant qu'elle conserve sa réactivité, nous utilisons toRefs . Cette méthode prend un objet réactif et le convertit en un objet simple dans lequel chaque propriété de l'objet réactif original devient une ref . Cela signifie que les voitures prop…

 voitures: {
  nombre: 0
} 

… deviendrait maintenant ceci:

 {
  valeur: voitures: {
    nombre: 0
  } 

Avec cela, nous pouvons utiliser voitures dans n'importe quelle partie de l'API de configuration tout en conservant sa réactivité.

 configuration (accessoires) {
      let {voitures} = toRefs (accessoires);
      console.log (cars.value);
      // imprime {number: 0}
    }, 

Nous pouvons observer cette nouvelle variable à l’aide de la montre de l’API Composition et réagir à ce changement comme bon nous semble.

 setup (props) {
      let {voitures} = toRefs (accessoires);
      Regardez(
        () => voitures,
        (voitures, prevCars) => {
          console.log ("profond", cars.value, prevCars.value);
        },
        {deep: true}
      );
    } 

toRef

Un autre cas d'utilisation courant auquel nous pourrions être confrontés est passant une valeur qui n'est pas nécessairement un objet mais plutôt l'un des types de données qui fonctionnent avec ref (tableau, nombre, chaîne, booléen, etc.). Avec toRef nous pouvons créer une propriété réactive (c'est-à-dire ref ) à partir d'un objet réactif source. Cela garantirait que la propriété reste réactive et serait mise à jour chaque fois que la source parente change.

 const cars = reactive ({
  Toyota: 1,
  Honda: 0
})

const NumberOfHondas = toRef (état, 'Honda')

NumberOfHondas.value ++
console.log (état.Honda) // 1

état.Honda ++
console.log (NumberOfHondas.value) // 2 

Ici, nous avons créé un objet réactif en utilisant la méthode réactive avec les propriétés Toyota et Honda . Nous avons également utilisé toRef pour créer une variable réactive à partir de Honda . D'après l'exemple ci-dessus, nous pouvons voir que lorsque nous mettons à jour Honda en utilisant soit l'objet réactif cars ou NumberOfHondas la valeur est mise à jour dans les deux cas. [19659006] Cette méthode est similaire et pourtant si différente de la méthode toRefs que nous avons abordée ci-dessus en ce sens qu'elle maintient sa connexion à sa source et peut être utilisée pour les chaînes, les tableaux et les nombres. Contrairement à toRefs nous n'avons pas à nous soucier de l'existence de la propriété dans sa source au moment de la création, car si cette propriété n'existe pas au moment où cette ref est créé et retourne à la place null il serait toujours stocké comme une propriété valide, avec une forme de watcher mis en place, de sorte que lorsque cette valeur change, cette ref créé en utilisant toRef serait également mis à jour.

Nous pouvons également utiliser cette méthode pour créer une propriété réactive à partir des accessoires . Cela ressemblerait à ceci:

 
 

Ici, nous avons créé une ref qui serait basée sur la propriété gender obtenue à partir des accessoires . Ceci est pratique lorsque nous voulons effectuer des opérations supplémentaires sur l'accessoire d'un composant particulier.

Conclusion

Dans cet article, nous avons examiné le fonctionnement de la réactivité dans Vue en utilisant certaines des méthodes et fonctions nouvellement introduites de Vue 3. Nous avons commencé par regarder ce qu'est la réactivité et comment Vue utilise l'objet Proxy dans les coulisses pour y parvenir. Nous avons également examiné comment créer des objets réactifs en utilisant réactif et comment créer des propriétés réactives en utilisant ref .

Enfin, nous avons examiné comment convertir des objets réactifs en objets simples, dont chacune des propriétés est une ref pointant vers la propriété correspondante de l'objet original, et nous avons vu comment créer une ref pour une propriété sur un objet source réactif.

En outre Ressources

(ks, vf, yk, il, al)




Source link
Quitter la version mobile