按照逻辑扩展和内容扩展来列举:
逻辑扩展有:mixins、extends、composition api;
内容扩展有: slots;
组件和组件之间有时候会存在相同的代码逻辑,我们希望对相同的代码逻辑进行抽取,
vue3中支持使用composition api
1.如果是data函数的返回值对象
2.如何生命周期钩子函数
3.值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象
4.全局混入
const app = createApp(App)
app.mixin({
created() {
console.log('全局混入')
}
})
5.局部混入
export default {
name: 'App',
// 一个组件可以混入多个,所以mixins所对应的值是一个对象
mixins: [fooMixin]
}
从实现角度来看,extends 几乎和 mixins 相同
{{ msg }}
1.composition API 对比 mixin
渲染上下文中使用的属性来源不清晰。(例如在阅读一个运用了多个 mixin 的模板时,很难看出某个属性是从哪个 mixin 中注入的)
命名空间冲突。(mixin 之间的属性和方法可能有冲突)
1、composition api-代码提取
让我们使用Composition API重构上面定义的组件,以使我们定义的功能位于JavaScript模块 useCounter 中(在特性描述前面加上“use”是一种Composition API命名约定)
//useCounter.js
import { ref, computed } from "vue";
export default function () {
const count = ref(0);
const double = computed(() => count * 2)
function increment() {
count.value++;
}
return {
count,
double,
increment
}
}
2、composition api代码重用
// MyComponent.js
import useCounter from "./useCounter.js";
export default {
setup() {
const { count, double, increment } = useCounter();
return {
count,
double,
increment
}
}
}
四、slot
vue3中废除slot、slot-scop,
slot替换成v-slot:插槽名,v-slot简写为#,
slot-scop替换成v-slot:xxx=“slotProps”