【发布时间】:2021-12-20 19:25:00
【问题描述】:
MCVE
https://github.com/hyperbotauthor/minvue3cliapp
MCVE 直播
https://codesandbox.io/s/white-browser-fl7ji
我有一个 Vue 3 cli-service 应用程序,它使用带有插槽的组合 API 组件。
HelloWorld 组件在div 中呈现它接收到的插槽:
// src/components/Helloworld.js
import { defineComponent, h } from "vue";
export default defineComponent({
setup(props, { slots }) {
return () => h("div", {}, slots);
}
});
Composite 组件在其setup 函数中使用HelloWorld 并填充其槽:
// src/components/Composite.js
import { defineComponent, h } from "vue";
import HelloWorld from "./HelloWorld";
export default defineComponent({
setup(props, { slots }) {
return () =>
h(HelloWorld, {}, [h("div", {}, ["Div 1"]), h("div", {}, ["Div 2"])]);
}
});
该应用使用两种方式来呈现相同的两个 div:
<template>
<!--<img alt="Vue logo" src="./assets/logo.png">-->
Works with plain slots
<HelloWorld>
<div>Div 1</div>
<div>Div 2</div>
</HelloWorld>
Triggers warning when slots are used from other component
<Composite> </Composite>
</template>
<script>
import HelloWorld from "./components/HelloWorld";
import Composite from "./components/Composite";
export default {
name: "App",
components: {
HelloWorld,
Composite,
},
};
</script>
<style>
</style>
Composite 组件触发此警告:
Non-function value encountered for default slot. Prefer function slots for better performance.
当我仅从模板中使用HelloWorld 时,不会触发相同的警告。
我不明白如果我使用来自模板或其他组件的插槽有什么区别。
这个警告的意义何在?
有什么办法可以消除这个警告?
【问题讨论】:
标签: vue.js vuejs3 vue-composition-api slots