Vue3 是一个流行的前端框架,适合构建现代化的单页应用(SPA)
Vue3的核心知识点包括 Composition API、响应式系统、模板语法、组件通信、生命周期钩子、路由、状态管理等
掌握这些知识点后,你可以构建功能丰富的前端应用
随着学习的深入,还可以探索更多高级特性,如自定义指令、插件开发等
1. Composition API
setup() 函数:Composition API 的核心,替代了 Vue 2 的 data、methods、computed 等选项
setup() 函数在组件创建之前执行,用于定义响应式数据、计算属性、方法等
ref 和 reactive:
ref:用于创建响应式的原始值(如字符串、数字等)
reactive:用于创建响应式的对象
computed 和 watch:
computed:用于创建计算属性
watch:用于监听响应式数据的变化
import { ref, reactive, computed, watch } from 'vue';
export default {
setup() {
const count = ref(0);
const state = reactive({ name: 'Vue 3' });
const doubleCount = computed(() => count.value * 2);
watch(count, (newValue, oldValue) => {
console.log(`count changed from ${oldValue} to ${newValue}`);
});
return { count, state, doubleCount };
}
};
2. 响应式系统
Vue3 使用 Proxy 替代了 Vue2 的 Object.defineProperty,提供了更强大的响应式能力
toRefs:将 reactive 对象转换为多个 ref,方便在模板中使用
import { reactive, toRefs } from 'vue';
export default {
setup() {
const state = reactive({
name: 'Vue 3',
version: '3.0'
});
return { ...toRefs(state) };
}
};
3. 模板语法
插值:{{ }} 用于绑定数据
指令:
v-bind:绑定属性,简写为 :
v-on:绑定事件,简写为 @
v-model:双向数据绑定
v-if、v-else、v-show:条件渲染
v-for:列表渲染
{{ message }}
- {{ item.name }}
4. 组件
Props:父组件向子组件传递数据
Emit:子组件向父组件触发事件
Slots:插槽,用于内容分发
// 父组件
// 子组件
{{ message }}
5. 生命周期钩子
Vue3 的生命周期钩子可以通过 onMounted、onUpdated、onUnmounted 等函数在 setup() 中使用
import { onMounted, onUnmounted } from 'vue';
export default {
setup() {
onMounted(() => {
console.log('Component mounted');
});
onUnmounted(() => {
console.log('Component unmounted');
});
}
};
6. 路由(Vue Router)
Vue Router 是 Vue 的官方路由管理器,用于构建单页应用
路由配置:定义路由和组件的映射关系
路由导航:使用 router-link 和 router.push 进行导航
import { createRouter, createWebHistory } from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;
7. 状态管理(Vuex/Pinia)
Vuex:Vue 的官方状态管理库,适合大型应用
Pinia:Vue 3 推荐的状态管理库,更轻量且易于使用
// Pinia 示例
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0 }),
actions: {
increment() {
this.count++;
}
}
});
8. Teleport
Teleport:用于将组件的一部分内容渲染到 DOM 中的其他位置
This is a modal
9. Suspense
Suspense:用于处理异步组件的加载状态
Loading...
10. TypeScript 支持
Vue3 对 TypeScript 提供了更好的支持,可以在项目中使用 TypeScript 来增强代码的类型安全
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
const count = ref(0);
return { count };
}
});