Vue 提供了一个h()创建 vnode 的函数

v-for
image.png

官方文档
https://vuejs.org/guide/extras/render-function.html#v-model

常见问题统计

问题: 插槽低效警告

Non-function value encountered for default slot. Prefer function slots for better performance

这是低效的,因为子槽在组件甚至可以使用它_之前就被渲染了。_HelloWorld子槽本质上是在父级中渲染,然后传递给子级。将子槽生成包装在函数中会延迟工作,直到渲染子槽。

  1. const renderSingleSelectTag = ({ option }) => {
  2. return h(
  3. "div",
  4. {
  5. style: {
  6. display: "flex",
  7. alignItems: "center",
  8. },
  9. },
  10. [
  11. h(NAvatar, {
  12. src: option.logo,
  13. round: true,
  14. color: "transparent",
  15. size: 24,
  16. style: {
  17. marginRight: "12px",
  18. },
  19. }),
  20. h(
  21. NEllipsis,
  22. {
  23. style: {
  24. maxWith: "120px",
  25. },
  26. },
  27. [option.label as string]
  28. ),
  29. ]
  30. );
  31. };

解决方案

与其在父级中渲染子槽(即,直接传递一个数组VNodes作为slots参数),不如将其包装在一个函数中: