Vue 路由器 4 和 Vue 3 应用程序两次显示组件

Posted

技术标签:

【中文标题】Vue 路由器 4 和 Vue 3 应用程序两次显示组件【英文标题】:Vue router 4 and vue 3 app showing component twice 【发布时间】:2021-09-26 15:28:32 【问题描述】:

我刚刚将 vue-router 4 安装到了一个 vue 3 应用程序中。在设置我的回家路线时,我不断让应用程序显示两次,甚至两次导航,但不知道为什么。我尝试将Navigation 组件引入App.vueHome.vue,但仍然显示两次。有什么东西是我在这里俯瞰的吗?

路由器/index.js

import  createWebHistory, createRouter  from "vue-router";
import Home from "../components/Home";
import About from "@/components/About";

const routes = [
    
        path: "/",
        name: "Home",
        component: Home,
    ,
    
        path: "/about",
        name: "About",
        component: About,
    ,
];

const router = createRouter(
    history: createWebHistory(),
    routes,
);

export default router;

导航.vue

<template>
  <div id="nav">
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
  </div>
  <router-view/>
</template>

<script>
export default 
  name: 'Navigation'

</script>

首页.vue

<template>
    <Header/>
    <Navigation/>
    <div>
        <About/>
    </div>
</template>

App.vue

<template>
  <Home/>
</template>

<script>
import Home from "@/components/Home";
export default 
  components: Home

</script>

【问题讨论】:

【参考方案1】:

Home 包含Navigation(其中包含&lt;router-view&gt;,渲染当前路线) About。因为About 总是被渲染,如果当前路由是/about,你会看到其中两个。

<template>
  <Header/>
  <Navigation/> <!-- contains router-view -->
  <div>
    <About/> <!-- ❌ always rendered in addition to current route -->
  </div>
</template>

您当前的路由配置没有子路由,所以应该只有一个&lt;router-view&gt;,并且通常在根组件中(App.vue):

App.vue:

<template>
  <Header />
  <Navigation />
  <router-view />
</template>

导航.vue:

<template>
  <div id="nav">
    <router-link to="/">Home</router-link>
    <router-link to="/about">About</router-link>
  </div>
  <!--<router-view/> ❌ move to App.vue -->
</template>

Home.vue:

<template>
  <!--<Header/> ​❌ move to App.vue -->
  <!--<Navigation/> ❌ move to App.vue -->
  <div>
    <About />
  </div>
</template>

demo

【讨论】:

以上是关于Vue 路由器 4 和 Vue 3 应用程序两次显示组件的主要内容,如果未能解决你的问题,请参考以下文章

必须点击登录按钮两次;使用 vue-router 和 firebase 身份验证

Vue 学习总结笔记

vue学习-进阶

Vue第七天学习笔记之vue-router详解

Vue第七天学习笔记之vue-router详解

找不到与路径匹配的位置 - Vue 3 + Vue Router 4