0
votes

2 composants presque identiques l'un à l'autre. La seule différence est que chaque composant a une demande d'obtention différente. Fusionner-les?

J'ai actuellement 2 composants qui sont presque identiques les uns aux autres. La structure HTML et les règles CSS sont identiques et la seule différence est que sur monté () de ces composants, une demande d'obtention différente est faite. On obtient tous les endroits visités et on obtient tout lieu de liste de souhaits. La réponse à la fois à la demande d'obtention a la même structure, il renvoie simplement différents endroits basés sur ce que l'utilisateur a visité ou la liste de souhaits.

Donc, ma question est donc, suis-je censé fusionner ces 2 composants en 1 composant? Si je devais faire cela, comment puis-je déterminer si je dois faire la demande d'obtenir des lieux visités ou des lieux de liste de souhaits? Peut-être basé sur l'URL? Si l'URL est http: // localhost: 8080 / # / admin / visité exécutez la demande d'obtention qui obtient tous les lieux visités et si c'est http: // localhost: 8080 / # / adminhost / Liste d'envies Obtenez les lieux de liste de souhaits?

Quel nom serait approprié pour ce composant car il sera utilisé pour obtenir des lieux visités et des lieux de liste de souhaits? En outre, quel serait un nom approprié pour la propriété de données qui remplacera la liste de souhaits et visité ?

wishlelist.vue xxx

visit.vue xxx


3 commentaires

Même si vous déclarez que la structure retournée est la même, ce n'est clairement pas. On tire le lieux dans visityPlaces et un dans souhaitement desplaces . Vous pouvez a) changer le BE pour toujours renvoyer le même access (c.-à-d. lieux ) ou b) avoir un mapper et une carte basé sur le type Source . Et votre code FE a besoin de refactoring pour utiliser le PROP neutre (probablement lieux ).


Je ne m'aurais peut-être pas exprimé correctement. Par "La structure renvoyée est la même", je veux dire que les résultats de la demande d'obtention ont la même structure de propriétés. Les différentes demandes de GET renvoient des endroits différents cependant.


Retour lieux dans les deux cas et modifie votre composant Fe pour utiliser lieux , qu'ils soient visités ou souhaitent la liste de souhaits. C'est la voie à suivre.


3 Réponses :


2
votes

Séparer obtenir les données d'affichage des données. Le parent peut ensuite effectuer les deux demandes dans son monté / créé Code> Crochet et transmettez-les comme un accéder au composant d'affichage:

<places :places="visited"/>
<places :places="whishlist"/>


2 commentaires

Vous semblez avoir négligé le fait que les deux réponses ont une structure différente. Cela doit également être refactored.


@Andreigheorghiu citation de la question initiale "La réponse à la demande d'obtention a la même structure" ¯_ (ツ) _ / ¯



1
votes

Oui, vous devez faire un composant réutilisable, probablement appelé lieux.vue . Toutefois, votre résultat renvoyé doit avoir la même structure (vous devez renommer Wishlistplaces et visites de visiteurs à lieux , probablement. Ou Sights " / Code>):

Votre composant doit prendre le paramètre source, le long de ces lignes: xxx

et mappez-le comme: xxx < / pré>

pendant que votre getter devrait quelque chose comme: xxx

Vous devez évidemment refactoriser tous les endroits où vous utilisez maintenant wishlist ou ou visité accessoires / méthodes à utiliser lieux (ou Sights , si c'est votre choix).


6 commentaires

Où puis-je trouver ce qu'est la source = "getwishlist" dans la documentation? Malheureusement, la réponse ne fait pas trop de sens pour moi en ce moment à cause de cela.


ici . C'est un prop . Vous pouvez le transmettre directement sous la forme d'une chaîne ou comme une expression javascript ( ou toute autre expression javascript entraînant votre chaîne souhaitée). À l'intérieur du composant, je l'ai utilisé à l'intérieur de monté () comme this.source dans axios.get (`/ $ {this.source} / $ {Ceci. Nom d'utilisateur} `)


Oh je vois, merci. Je pense que cela fonctionnera bien.


Aussi il n'est pas nécessaire d'être appelé source droite? Ça peut être ce que je veux?


Oui, vous pouvez appeler cela ce que vous voulez. Si c'est un multit terme. Comme "Ceci est mon paramètre Funky" Vous devez utiliser Kebabcase pour l'attribut: des accessoires / Code>: Thisismyfunkyparam: {...} . Il est possible d'utiliser Kebabcase dans des accessoires, si vous passez la clé sous forme de chaîne: 'this-is-my-funky-param': {...} , mais vous ne voulez pas vraiment Utilisez-le comme Ceci ['this-is-my-funky-param'] à l'intérieur de votre VM, êtes-vous?


Vous êtes les bienvenus. La chose importante à retenir est la suivante: si le param est préfixé avec un colon: , quelque chose sera analysé comme un JavaScript expression. Si vous souhaitez passer dans le 'quelque chose' chaîne, vous pouvez omettre le côlon.



0
votes

Jetez un coup d'œil à dynamique C'est bon pour les cas où vous avez des onglets afin qu'ils soient tous deux chargés sur la création (ou le montage), puis vous donnez les accessoires en fonction des besoins. Voir ici: https://vuejs.org/v2/guide/components-dynamic -Async.html


0 commentaires