在实际工作中写过几个中小型的项目中应用的vue高级用法,今天来给大家盘点一下。
Vue.js 提供了许多高级用法,这些用法可以帮助开发者更高效地构建复杂的应用。以下是一些高级用法的示例代码和应用场景:
- 全局主题样式控制:
- 使用 Vue.mixin 和 defineReactive 实现全局响应式属性 $theme,用于控制应用的主题样式。
- 示例代码:
// main.js
Vue.mixin({
beforeCreate() {
Vue.util.defineReactive(this, "$theme", 'light');
}
})
{{ $theme }}
应用场景:在需要全局控制主题样式的应用中,如暗黑模式切换。
- **ref 和 reactive**:
- ref 用于创建一个包装基本类型数据的响应式对象,而 reactive 用于创建一个包装复杂对象的响应式对象。
示例代码:
import { ref, reactive } from 'vue';
const count = ref(0);
const user = reactive({
name: 'John',
age: 25
});
应用场景:ref 适用于简单数据类型,如数字、字符串等;reactive 适用于对象和数组等复杂数据结构。
- **watch 和 watchEffect**:
- watch 用于监听特定数据变化,而 watchEffect 自动追踪依赖关系的数据变化。
- 示例代码:
import { watch, watchEffect, ref } from 'vue';
const count = ref(0);
watch(count, (newValue, oldValue) => {
console.log(`Count changed from ${oldValue} to ${newValue}`);
});
watchEffect(() => {
console.log(`Count is: ${count.value}`);
});
应用场景:watch 适用于有特定依赖关系的情况;watchEffect 适用于自动追踪数据变化的场景。
- **computed**:
- 创建一个计算属性,当相关依赖发生变化时,重新计算属性的值。
- 示例代码:
import { ref, computed } from 'vue';
const count = ref(0);
const squaredCount = computed(() => {
return count.value * count.value;
});
应用场景:衍生出一些与其他数据相关的衍生数据。
- **provide 和 inject**:
- provide 用于在父组件中提供数据,inject 用于在子组件中接收这些数据。
- 示例代码:
import { provide, inject } from 'vue';
const key = Symbol();
const ParentComponent = {
setup() {
provide(key, 'Data from parent');
}
};
const ChildComponent = {
setup() {
const dataFromParent = inject(key);
console.log(dataFromParent);
}
};
应用场景:在跨层级组件中传递数据。
- **teleport**:
- teleport 允许你将组件的内容渲染到 DOM 结构的其他位置。
- 示例代码:
Teleported to body!
应用场景:创建弹出框或模态框,将内容渲染到 body 元素之外。
- **Suspense**:
- Suspense 允许你在异步组件加载过程中显示备用内容。
- 示例代码:
Loading...
应用场景:在异步加载数据时,提供一个 loading 状态或备用内容。
创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦。