javascript - Vue 路由器 4 和 Vue 3 应用程序两次显示组件
问题描述
我刚刚将 vue-router 4 安装到 vue 3 应用程序中。在设置我的回家路线时,我不断让应用程序显示两次,甚至两次导航,但不知道为什么。我尝试将Navigation
组件引入App.vue
,Home.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>
应用程序.vue
<template>
<Home/>
</template>
<script>
import Home from "@/components/Home";
export default {
components: {Home}
}
</script>
解决方案
Home
包含Navigation
(其中包含<router-view>
,呈现当前路线)和 About
. 由于About
总是渲染,如果当前路线是/about
.
<template>
<Header/>
<Navigation/> <!-- contains router-view -->
<div>
<About/> <!-- ❌ always rendered in addition to current route -->
</div>
</template>
你当前的路由配置没有子路由,所以应该只有一个<router-view>
,并且通常在根组件(App.vue
)中:
应用程序.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>
主页.vue:
<template>
<!--<Header/> ❌ move to App.vue -->
<!--<Navigation/> ❌ move to App.vue -->
<div>
<About />
</div>
</template>
推荐阅读
- sql - 如何在大量数据中通过SQL查询将10-10行的数据作为单行获取?
- r - R包rcites:使用函数“spp_taxonconcept”和“map”进行批量查询
- python - 如何从加密网站上抓取确切的信息
- android - 在 Android adb shell 中使用更新二进制函数
- r - 如何在 RasterBrick 中保存选定图层并将其保存为 R 中的 tiff?
- html - Webpack 使用 FileLoader 创建空图像文件
- javascript - 如何在闪亮应用程序的数据表中将逻辑列转换为静态复选框?
- python - 如何在 Tkinter Treeview 中获取选定行的索引?
- python - 为什么这个将列表中的所有项目转换为字符串的函数不起作用?
- kubernetes - 当我在 linux cmd 中键入“sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl”时,它返回空