


Comment forcer correctement le rendu des composants dans Vue ? (Présentation de la méthode)
Parfois, compter sur la réactivité de Vue pour mettre à jour les données ne suffit pas. Au lieu de cela, nous devons restituer manuellement le composant pour mettre à jour les données. Ou bien, nous pourrions simplement vouloir supprimer le DOM actuel et recommencer. Alors, comment faire en sorte que Vue restitue le composant de la manière correcte ?
La meilleure façon de forcer Vue à restituer un composant est de définir :key
sur le composant. Lorsque nous devons restituer le composant, il nous suffit de modifier la valeur de key
et Vue restituera le composant.
C'est une solution très simple.
Bien sûr, vous pourriez être plus intéressé par d'autres moyens :
- Manière simple et grossière : recharger la page entière
- Manière inappropriée : utiliser
v-if
- Meilleure façon : utilisez les
forceUpdate
méthodes intégrées de Vue - Meilleure façon : effectuez des
key
modifications sur le composant 🎜> La méthode simple et grossière : rechargez la page entière
Cela équivaut à redémarrer votre ordinateur à chaque fois que vous souhaitez fermer l'application.
Cette approche peut fonctionner, mais c'est une très mauvaise solution, Ne le faites pas, voyons voir. meilleure façon.
Manière inappropriée : utiliser la directive
v-if
, qui n'est utilisée que lorsque le composant est rendu uniquement lorsque . Si
DOMv-if
. true
false
Voyons comment fonctionne. Dans , ajoutez la commande
<template> <my-component v-if="renderComponent" /> </template>
v-if
Dans template
, utilisez la méthode v-if
<script> export default { data() { return { renderComponent: true, }; }, methods: { forceRerender() { // 从 DOM 中删除 my-component 组件 this.renderComponent = false; this.$nextTick(() => { // 在 DOM 中添加 my-component 组件 this.renderComponent = true; }); } } }; </script>
script
nextTick
Au début,
, donc le composant
- est rendu lorsque nous appelons
renderComponent
, nous définissons immédiatementtrue
surmy-component
- et nous arrêtons le rendu
forceRerender
car la directiverenderComponent
est désormais évaluée àfalse
- dans la méthode
my-component
Setv-if
retour àfalse
- Lorsque le résultat du calcul de l'instruction
nextTick
estrenderComponent
, restitueztrue
v-if
Dans ce processus, il y en a à nouveau. deux Cette partie est plus importantetrue
my-component
D'abord, il faut attendre , sinon nous ne verrons aucun changement.
Dans
Vue, un tick est un cycle de mise à jour du DOM. Vue collectera toutes les mises à jour effectuées au cours du même tick, et à la fin du tick, il restituera le contenu dans le DOM en fonction de ces mises à jour. Si nous n'attendons pas le prochain tick, notre mise à jour vers nextTick
sera automatiquement annulée et rien ne changera.
Deuxièmement, lors du deuxième rendu, Vue créera un tout nouveau composant. Vue détruira le premier et en créera un nouveau, ce qui signifie que notre nouveau traversera tout son cycle de vie comme d'habitude - , renderComponent
, etc.
De plus, my-component
peut être utilisé avec des promesses :created
forceRerender() { // 从 DOM 中删除 my-component 组件 this.renderComponent = false; this.$nextTick().then(() => { this.renderComponent = true; }); }
mounted
Ce n'est pas vraiment une bonne solution, alors faisons ce que Vue veut que nous fassions nextTick
C'est l'une des deux meilleures façons de résoudre ce problème, toutes deux bénéficiant du support officiel de Vue. Normalement, Vue répond aux changements de dépendances en mettant à jour les vues. Cependant, il est également possible de forcer une mise à jour lorsque l'on appelle , même si toutes les dépendances n'ont pas réellement changé.
Voici les plus grosses erreurs que la plupart des gens commettent en utilisant cette méthode.
Si Vue se met automatiquement à jour lorsque les choses changent, pourquoi devons-nous forcer une mise à jour ? forceUpdate
à la fois sur l'instance du composant elle-même et globalement :
// 全局 import Vue from 'vue'; Vue.forceUpdate(); // 使用组件实例 export default { methods: { methodThatForcesUpdate() { // ... this.$forceUpdate(); // ... } } }
Remarque importante : cela ne met à jour aucune propriété calculée, appelant
simplement force un nouveau rendu de la vue.forceUpdate
La meilleure façon : effectuer des forceUpdate
modifications sur le composantDans de nombreux cas, nous avons besoin d'un nouveau rendu le composant. 要正确地做到这一点,我们将提供一个 正是我们需要的! 但是首先,我们需要绕一小段路来理解为什么在Vue中使用 为什么我们需要在 Vue 中使用 key 一旦你理解了这一点,那么这是了解如何以正确方式强制重新渲染的很小的一步。 假设我们要渲染具有以下一项或多项内容的组件列表: 如果你对该列表进行排序或以任何其他方式对其进行更新,则需要重新渲染列表的某些部分。 但是,不会希望重新渲染列表中的所有内容,而只是重新渲染已更改的内容。 为了帮助 Vue 跟踪已更改和未更改的内容,我们提供了一个 如果我们使用索引将其渲染出来,则会得到以下结果: 如果删除 与 所以这里,我们可以使用唯一的 在我们从列表中删除 如果我们向列表中添加一个 所以接下来看看,如果使用最好的方法来重新渲染组件。 更改 key 以强制重新渲染组件 最后,这是强制Vue重新渲染组件的最佳方法(我认为)。 我们可以采用这种将 这是一个非常基本的方法key
key
属性,以便 Vue 知道特定的组件与特定的数据片段相关联。如果key
保持不变,则不会更改组件,但是如果key
发生更改,Vue 就会知道应该删除旧组件并创建新组件。key
。created
或mounted
钩子中key
属性。 在这里使用数组的索引,因为索引没有绑定到列表中的特定对象。const people = [
{ name: 'Evan', age: 34 },
{ name: 'Sarah', age: 98 },
{ name: 'James', age: 45 },
];
<ul>
<li v-for="(person, index) in people" :key="index">
{{ person.name }} - {{ index }}
</li>
</ul>
// Outputs
Evan - 0
Sarah - 1
James - 2
Sarah
,得到:Evan - 0
James - 1
James
关联的索引被更改,即使James
仍然是James
。 James
会被重新渲染,这并不是我们希望的。id
来作为 key
const people = [
{ id: 'this-is-an-id', name: 'Evan', age: 34 },
{ id: 'unique-id', name: 'Sarah', age: 98 },
{ id: 'another-unique-id', name: 'James', age: 45 },
];
<ul>
<li v-for="person in people" :key="person.id">
{{ person.name }} - {{ person.id }}
</li>
</ul>
Sarah
之前,Vue删除了Sarah
和James
的组件,然后为James
创建了一个新组件。现在,Vue知道它可以为Evan
和James
保留这两个组件,它所要做的就是删除Sarah
的。person
,Vue 还知道可以保留所有现有的组件,并且只需要创建一个新组件并将其插入正确的位置。这是非常有用的,当我们有更复杂的组件,它们有自己的状态,有初始化逻辑,或者做任何类型的DOM操作时,这对我们很有帮助。key
分配给子组件的策略,但是每次想重新渲染组件时,只需更新该key
即可。<template>
<component-to-re-render :key="componentKey" />
</template>
export default {
data() {
return {
componentKey: 0,
};
},
methods: {
forceRerender() {
this.componentKey += 1;
}
}
}
每次forceRerender
被调用时,我们的componentKey
都会改变。当这种情况发生时,Vue将知道它必须销毁组件并创建一个新组件。我们得到的是一个子组件,它将重新初始化自身并“重置”其状态。
如果确实需要重新渲染某些内容,请选择key
更改方法而不是其他方法。
原文地址:https://hackernoon.com/the-correct-way-to-force-vue-to-re-render-a-component-bde2caae34ad
推荐学习:vue视频教程!
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!

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

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

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

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

L'utilisation de bootstrap dans vue.js est divisée en cinq étapes: installer bootstrap. Importer un bootstrap dans main.js. Utilisez le composant bootstrap directement dans le modèle. Facultatif: style personnalisé. Facultatif: utilisez des plug-ins.

Vous pouvez ajouter une fonction au bouton VUE en liant le bouton dans le modèle HTML à une méthode. Définissez la logique de la fonction de méthode et d'écriture dans l'instance Vue.

L'option Watch dans Vue.js permet aux développeurs d'écouter des modifications de données spécifiques. Lorsque les données changent, regardez déclenche une fonction de rappel pour effectuer des vues de mise à jour ou d'autres tâches. Ses options de configuration incluent immédiatement, qui spécifie s'il faut exécuter un rappel immédiatement, et profond, ce qui spécifie s'il faut écouter récursivement les modifications des objets ou des tableaux.

Le développement multi-pages VUE est un moyen de créer des applications à l'aide du cadre Vue.js, où l'application est divisée en pages distinctes: Maintenance du code: La division de l'application en plusieurs pages peut rendre le code plus facile à gérer et à maintenir. Modularité: chaque page peut être utilisée comme module séparé pour une réutilisation et un remplacement faciles. Routage simple: la navigation entre les pages peut être gérée par une configuration de routage simple. Optimisation du référencement: chaque page a sa propre URL, ce qui aide le référencement.

Il existe trois façons de se référer aux fichiers JS dans Vue.js: spécifiez directement le chemin à l'aide du & lt; script & gt; étiqueter;; importation dynamique à l'aide du crochet de cycle de vie monté (); et l'importation via la bibliothèque de gestion de l'État Vuex.

Vue.js dispose de quatre méthodes pour revenir à la page précédente: $ router.go (-1) $ router.back () utilise & lt; router-link to = & quot; / & quot; Composant Window.History.back (), et la sélection de la méthode dépend de la scène.

Il existe trois méthodes courantes pour que Vue.js traverse les tableaux et les objets: la directive V-FOR est utilisée pour traverser chaque élément et les modèles de rendu; La directive V-Bind peut être utilisée avec V-FOR pour définir dynamiquement les valeurs d'attribut pour chaque élément; et la méthode .map peut convertir les éléments du tableau en nouveaux tableaux.

Il existe deux façons de sauter des éléments div dans Vue: Utilisez le routeur Vue et ajoutez le composant routeur-link. Ajoutez l'écouteur de l'événement @Click et appelez ceci. $ Router.push () pour sauter.
