N'existe-t-il aucun moyen de gérer de manière fiable le contenu des emplacements dans Vue 3 ?
P粉714844743
2023-08-30 08:47:17
<p>Je migre actuellement une base de code Vue 2 vers Vue 3. </p>
<pre class="brush:php;toolbar:false;"><card>
<modèle #default>
<en-tête de carte>
<title level="3">En-tête</title>
</en-tête-de-carte>
<corps de la carte
v-for="b dans bodyCount"
:key="'b' + b">
Corps {{ b }}
</corps de la carte>
<pied de page de la carte
v-for="f dans footerCount"
:key="'f' + f">
<text>Pied de page {{ f }}</text>
</pied de page de la carte>
</modèle>
</carte></pre>
<p>Le composant Card possède une fonction de rendu qui appelle <code>this.$slots.default()</code>. Cependant, dans Vue 3, cela renvoie un contenu différent de celui de Vue 2. Donc si je fais <code>console.log(this.$slots.default())</code> - j'obtiens un tableau avec 3 éléments, [nœud v de type "header", tapez C'est un nœud v de Symbol(Fragment), un nœud v de type Symbol(Fragment)]</p>
<p>Plus précisément, il ne reconnaît pas le pied de page/le corps de la carte en tant que composants, mais je vois le symbole (fragment) dans le type. L'en-tête de carte convient en fait puisqu'il n'est pas à l'intérieur de la boucle v-for. </p>
<p>Il existe une logique à l'intérieur de la fonction de rendu du composant de la carte qui a besoin de connaître le nombre de composants de texte/pied de page dont il dispose. Je dois donc être capable de déterminer le type de composant. N'est-ce pas possible dans Vue 3 ? Je peux supposer que cela a quelque chose à voir avec le v-for ici, mais je ne sais pas comment obtenir les nœuds v finaux. Dans cet exemple, au lieu de 3 éléments, je souhaite que le tableau contienne l'en-tête de la carte + tous les corps de la carte + tous les pieds de page. </p>
La conception du composant de votre carte ne me semble pas significative. Je vous suggère de reconsidérer.
Il s'agit d'un simple emplacement de rendu pour terrain de jeu
Veuillez tenir compte de l'avertissement. Vue ne rendra pas
card-header
ici car il ne peut pas l'analyser.Si vous pouvez accéder aux données, pourquoi passer
slots
操作card-body
/card-footer
项目直接通过bodyCount
?Si cela ne me semble pas raisonnable.
Il s'avère que les fragments peuvent être développés via la propriété Children sur chaque élément du tableau. Donc, dans ce cas, v-for produit un nœud v, qui est un fragment, mais nous pouvons en déduire davantage en examinant la propriété Children.