1. 使用 ref 和 reactive 管理响应式数据
原理剖析
Vue 3 引入了 ref 和 reactive 两个核心 API 来管理响应式数据:
- ref:用于创建根本类型(如字符串、数字)的响应式数据,返回一个包含 value 属性的对象。
- reactive:用于创建复杂对象或数组的响应式数据,返回一个代理对象。
代码示例
- import { ref, reactive } from 'vue';
- // 使用 ref 管理基本类型数据
- const count = ref(0);
- console.log(count.value); // 0
- // 使用 reactive 管理复杂对象
- const state = reactive({
- name: 'Vue 3',
- version: '3.2.0',
- });
- console.log(state.name); // Vue 3
复制代码 注意事项
- 使用 ref 时,必要通过 .value 访问或修改数据。
- reactive 只能用于对象或数组,不能用于根本类型。
2. 组合式 API(Composition API)
原理剖析
组合式 API 是 Vue 3 的核心特性之一,它允许开辟者将逻辑代码构造成可复用的函数,而不是依赖于选项式 API(如 data、methods 等)。通过 setup 函数,开辟者可以更机动地管理组件的状态和逻辑。
代码示例
- import { ref, computed } from 'vue';
- export default {
- setup() {
- const count = ref(0);
- const doubleCount = computed(() => count.value * 2);
- function increment() {
- count.value++;
- }
- return {
- count,
- doubleCount,
- increment,
- };
- },
- };
复制代码 优势
- 逻辑复用性更强。
- 代码构造更清晰,尤其是复杂组件。
3. 使用 watch 和 watchEffect 监听数据变化
原理剖析
- watch:用于监听特定响应式数据的变化,支持深度监听和懒实行。
- watchEffect:自动追踪其依赖的响应式数据,并在依赖变化时立即实行。
代码示例
- import { ref, watch, watchEffect } from 'vue';
- const count = ref(0);
- // 使用 watch 监听 count 的变化
- watch(count, (newValue, oldValue) => {
- console.log(`count changed from ${oldValue} to ${newValue}`);
- });
- // 使用 watchEffect 自动追踪依赖
- watchEffect(() => {
- console.log(`count is now ${count.value}`);
- });
复制代码 注意事项
- watch 更得当精确控制监听逻辑。
- watchEffect 得当不必要明白指定依赖的场景。
4. 使用 provide 和 inject 实现跨组件通讯
原理剖析
provide 和 inject 是 Vue 3 中实现跨组件通讯的 API,特别得当在深层嵌套组件中转达数据。
代码示例
- // 父组件
- import { provide, ref } from 'vue';
- export default {
- setup() {
- const message = ref('Hello from parent');
- provide('message', message);
- },
- };
- // 子组件
- import { inject } from 'vue';
- export default {
- setup() {
- const message = inject('message');
- return { message };
- },
- };
复制代码 优势
- 避免逐层转达 props 的繁琐。
- 得当全局状态管理(如主题、用户信息等)。
5. 使用 Teleport 实现组件挂载到恣意位置
原理剖析
Teleport 是 Vue 3 新增的特性,允许将组件的内容渲染到 DOM 中的恣意位置,常用于模态框、关照等场景。
代码示例
- <template>
- <button @click="showModal = true">Open Modal</button>
- <Teleport to="body">
- <div v-if="showModal" class="modal">
- <p>This is a modal!</p>
- <button @click="showModal = false">Close</button>
- </div>
- </Teleport>
- </template>
- <script>
- import { ref } from 'vue';
- export default {
- setup() {
- const showModal = ref(false);
- return { showModal };
- },
- };
- </script>
复制代码 优势
6. 使用 Suspense 处理异步组件加载
原理剖析
Suspense 是 Vue 3 中用于处理异步组件加载的特性,可以在组件加载完成前显示占位内容。
代码示例
- <template>
- <Suspense>
- <template #default>
- <AsyncComponent />
- </template>
- <template #fallback>
- <div>Loading...</div>
- </template>
- </Suspense>
- </template>
- <script>
- import { defineAsyncComponent } from 'vue';
- const AsyncComponent = defineAsyncComponent(() =>
- import('./AsyncComponent.vue')
- );
- export default {
- components: {
- AsyncComponent,
- },
- };
- </script>
复制代码 优势
- 提升用户体验,避免页面空缺。
- 简化异步组件加载逻辑。
7. 使用 v-model 实现双向绑定
原理剖析
Vue 3 对 v-model 进行了改进,支持多个 v-model 绑定,并可以通过 modelValue 和 update:modelValue 自界说绑定逻辑。
代码示例
- <template>
- <CustomInput v-model:firstName="firstName" v-model:lastName="lastName" />
- </template>
- <script>
- import { ref } from 'vue';
- export default {
- setup() {
- const firstName = ref('John');
- const lastName = ref('Doe');
- return { firstName, lastName };
- },
- };
- </script>
复制代码 自界说组件 CustomInput
- <template>
- <input :value="firstName" @input="$emit('update:firstName', $event.target.value)" />
- <input :value="lastName" @input="$emit('update:lastName', $event.target.value)" />
- </template>
- <script>
- export default {
- props: ['firstName', 'lastName'],
- };
- </script>
复制代码 优势
- 支持多个 v-model 绑定。
- 更机动的双向绑定实现。
8. 使用 defineComponent 加强 TypeScript 支持
原理剖析
defineComponent 是 Vue 3 中用于加强 TypeScript 支持的 API,可以提供更好的类型推断和代码提示。
代码示例
- import { defineComponent, ref } from 'vue';
- export default defineComponent({
- setup() {
- const count = ref(0);
- return { count };
- },
- });
复制代码 优势
- 提升 TypeScript 开辟体验。
- 更好的类型安全和代码提示。
9. 使用 Fragment 减少不必要的 DOM 元素
原理剖析
Vue 3 支持多根节点组件(Fragment),可以减少不必要的 DOM 元素,提升渲染性能。
代码示例
- <template>
- <header>Header</header>
- <main>Main Content</main>
- <footer>Footer</footer>
- </template>
复制代码 优势
10. 使用 Custom Directives 自界说指令
原理剖析
Vue 3 允许开辟者自界说指令,用于直接操作 DOM 元素。
代码示例
- import { directive } from 'vue';
- const vFocus = {
- mounted(el) {
- el.focus();
- },
- };
- export default {
- directives: {
- focus: vFocus,
- },
- };
复制代码 使用示例
优势
- 提供更机动的 DOM 操作能力。
- 得当实现特定功能(如自动聚焦、拖拽等)。
总结
本文详细介绍了 Vue 3 编程中的 10 个实用本领,涵盖了响应式数据管理、组合式 API、跨组件通讯、异步组件加载等多个方面。通过掌握这些本领,开辟者可以更高效地构建现代化的 Vue 应用,提升代码质量和开辟体验。希望本文能为您的 Vue 3 开辟之旅提供资助!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |