Maison  >  Questions et réponses  >  le corps du texte

Composant vue3 js : composant non mis à jour

J'ai un composant qui collecte les données d'une API. Les données renvoyées par l'API sont un tableau contenant les détails. L'une des valeurs du tableau est le type de composant qui doit être restitué, toutes les autres données sont transmises au composant. J'essaie de restituer le composant correct en fonction de la valeur ramenée de la base de données, mais malheureusement cela ne fonctionne pas. Je suis nouveau sur Vue mais cela fonctionne dans vue2 mais j'espère que cela fonctionnera dans Vue 3 en utilisant l'API de composition.

Voici le code du composant que je souhaite remplacer :

<component :is="question.type" :propdata="question" />

Lorsqu'il est visualisé dans un navigateur, voici ce qui est réellement affiché, mais sans utiliser le composant SelectInput :

<selectinput :propdata="question"></selectinput>

SelectInput est un composant de mon répertoire et si je code en dur la valeur :is, cela fonctionne comme prévu comme ceci :

<component :is="SelectInput" propdata="question" />

Mon composant complet appelant le composant component et échangeant le composant :

<template>
    <div class="item-group section-wrap">
        <div v-bind:key="question.guid" class='component-wrap'>
            <div class="component-container">
                <!-- working -->
                <component :is="SelectInput" :propData="question" />
                <!-- not working -->
                <component v-bind:is="question.type" :propData="question" />
            </div>
        </div>
    </div>
</template>

<script setup>

    import { defineProps, toRefs } from 'vue';

    import SelectInput from "./SelectInput";
    import TextareaInput from "./TextareaInput";

    const props = defineProps({
        question: Object,
    });

    const { question } = toRefs(props);

</script>

P粉779565855P粉779565855237 Il y a quelques jours404

répondre à tous(2)je répondrai

  • P粉388945432

    P粉3889454322024-02-26 13:55:24

    Si les noms de fichiers de vos composants sont identiques aux spécificateurs de type de l'objet en question, vous pouvez les importer dynamiquement pour enregistrer certaines lignes de code.

    Cela conduit également à une meilleure évolutivité car si vous créez plus de types, vous n'avez plus besoin de toucher à ce composant.

    
    
    sssccc

    répondre
    0
  • P粉775788723

    P粉7757887232024-02-26 13:00:49

    J'ai découvert que parce que j'utilise le composant 脚本设置,所以组件未命名,因此组件, je ne sais pas quel composant rendre.

    J'ai donc créé un objet contenant le composant et une référence au composant :

    const components = {
            'SelectInput': SelectInput,
            'TextareaInput': TextareaInput
        };

    Une autre fonction qui prend le composant que je souhaite afficher et le relie au composant réel :

    const component_type = (type) => components[type];

    Ensuite, dans le modèle, j'appelle la fonction et restitue le composant correct :

    Code fixe complet :

    
    
    sssccc

    Je ne sais pas vraiment si c'est la bonne approche, mais elle restitue maintenant le bon composant.

    répondre
    0
  • Annulerrépondre