Vue 3 项目踩坑总结与知识点复习#
1. 路由导航守卫与登录跳转#
问题描述#
登录后无法跳转到用户页面,形成循环跳转。
解决方案#
1
2
3
4
5
6
7
8
9
10
11
12
|
router.beforeEach((to, from, next) => {
// 如果是从登录页面来的,允许访问用户页面
if (from.path === '/login' && to.path === '/user') {
next()
}
// 其他情况下访问用户页面,重定向到登录
else if (to.path === '/user') {
next('/login')
} else {
next()
}
})
|
知识点#
- 路由守卫的执行顺序
- 登录状态的判断逻辑
next() 函数的正确使用
2. 路由过渡动画问题#
问题描述#
- 组件切换时动画不同步
- 页面闪烁或消失
- 动画效果不一致
解决方案#
使用 Vue Transition 组件#
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<RouterView v-slot="{ Component }">
<Transition
enter-active-class="transition-all duration-300 ease-out"
enter-from-class="opacity-0"
enter-to-class="opacity-100"
leave-active-class="transition-all duration-200 ease-in"
leave-from-class="opacity-100"
leave-to-class="opacity-0"
mode="out-in"
>
<component :is="Component" />
</Transition>
</RouterView>
|
知识点#
- Transition 组件的
mode 属性
- Tailwind 过渡类的使用
- 避免自定义 CSS 与 Tailwind 的冲突
3. 样式冲突问题#
问题描述#
自定义 CSS 与 Tailwind 类冲突导致样式异常。
解决方案#
- 使用 Tailwind 工具类替代自定义 CSS
- 正确使用 CSS 作用域
知识点#
- Tailwind 类的优先级机制
- CSS 作用域(scoped)的重要性
- 原子化 CSS 的优势
4. 组件封装与通信#
问题描述#
组件间数据传递和状态管理。
解决方案#
1
2
3
4
5
6
7
8
|
// 父组件传递数据
<child-component :data="parentData" @update="handleUpdate" />
// 子组件接收数据
<script setup>
const props = defineProps(['data'])
const emit = defineEmits(['update'])
</script>
|
知识点#
- Props 数据传递
- 事件发射与监听
- 组件通信最佳实践
5. 布局与响应式设计#
问题描述#
页面布局不合理,footer 定位问题。
解决方案#
1
2
3
4
5
6
7
8
9
|
<template>
<div class="min-h-screen bg-gray-50 flex flex-col">
<HeaderCom />
<main class="flex-grow">
<!-- 内容区域 -->
</main>
<FooterCom />
</div>
</template>
|
知识点#
- Flex 布局的使用
- 响应式设计原则
- Tailwind 布局工具类
最佳实践总结#
-
路由配置
- 合理使用导航守卫
- 正确处理路由权限
- 优化路由切换体验
-
样式管理
- 优先使用 Tailwind 工具类
- 避免不必要的自定义 CSS
- 注意样式冲突问题
-
组件设计
- 遵循单一职责原则
- 合理划分组件层级
- 规范组件通信方式
-
性能优化
- 合理使用过渡动画
- 避免不必要的组件重渲染
- 优化页面加载性能
找到具有 1 个许可证类型的类似代码
我来帮你总结这个 Vue 项目中的重要知识点:
Vue Router 路由相关知识点#
- 基础路由配置
1
2
3
4
5
6
7
8
9
10
11
12
|
// 基本结构
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/路径',
name: '路由名称',
component: () => import('组件路径')
}
]
})
|
- 嵌套路由
1
2
3
4
5
6
7
8
9
10
11
|
// 子路由配置示例
{
path: '/course',
component: CourseView,
children: [
{
path: 'js',
component: JsView
}
]
}
|
- 路由导航守卫
1
2
3
4
5
6
|
router.beforeEach((to, from, next) => {
// to: 要去的路由
// from: 来源路由
// next: 放行函数
// 常用场景:登录验证、权限控制
})
|
- 编程式导航
1
2
3
4
5
6
7
8
9
10
|
// 基本跳转
router.push('/path')
// 带参数跳转
router.push({
path: '/user',
query: {
username: userName
}
})
|
Vue 3 组合式 API#
- 组件基础结构
1
2
3
4
5
6
7
8
9
10
11
12
|
<script setup>
// 组合式 API 写法
import { ref, onMounted } from 'vue'
// 响应式数据
const count = ref(0)
// 生命周期钩子
onMounted(() => {
// 组件挂载后执行
})
</script>
|
- 响应式数据处理
1
2
3
4
5
6
7
8
9
10
11
12
|
// ref 用于基础类型
const userName = ref('')
// 修改值
userName.value = '新值'
// reactive 用于对象类型
const state = reactive({
user: {
name: '',
age: 0
}
})
|
- 路由相关 Hooks
1
2
3
4
5
6
7
8
|
// 在组合式 API 中使用路由
import { useRouter, useRoute } from 'vue-router'
const router = useRouter() // 用于路由跳转
const route = useRoute() // 用于获取当前路由信息
// 获取路由参数
const username = route.query.username
|
Vue 组件通信#
- Props 父传子
1
2
3
4
5
6
7
8
9
|
<!-- 父组件 -->
<child-component :message="parentMessage" />
<!-- 子组件 -->
<script setup>
defineProps({
message: String
})
</script>
|
- Emits 子传父
1
2
3
4
5
6
7
8
9
10
|
<!-- 子组件 -->
<script setup>
const emit = defineEmits(['update'])
const handleClick = () => {
emit('update', '数据')
}
</script>
<!-- 父组件 -->
<child-component @update="handleUpdate" />
|
Vue 项目结构#
1
2
3
4
5
6
7
|
src/
├── assets/ # 静态资源
├── components/ # 公共组件
├── router/ # 路由配置
├── views/ # 页面组件
├── App.vue # 根组件
└── main.js # 入口文件
|
实践要点#
- 路由权限控制
- 使用路由守卫进行登录验证
- 根据用户状态决定路由跳转
- 组件设计原则
- 组件职责单一
- 合理使用 Props 和 Emits
- 适当拆分组件提高复用性
- 数据管理
- 合理使用响应式数据
- 选择适当的数据通信方式
- 注意数据的双向绑定
- 性能优化
- 路由懒加载
- 合理使用计算属性
- 避免不必要的组件重渲染
常用功能实现#
- 登录功能
1
2
3
4
|
// 1. 表单数据绑定
// 2. 登录逻辑处理
// 3. 路由跳转与参数传递
// 4. 登录状态维护
|
- 路由权限
1
2
3
|
// 1. 全局路由守卫
// 2. 登录状态判断
// 3. 条件跳转
|
这些是项目中使用到的主要知识点,建议:
- 多练习路由配置和导航守卫的使用
- 熟悉组合式 API 的基本使用方法
- 理解组件间不同的通信方式
- 掌握项目的基本结构和最佳实践
需要特别注意的是路由守卫的使用,因为它关系到整个应用的导航流程和权限控制。同时,组合式 API 的使用也是 Vue 3 中的重点,需要多加练习。