Performance: Recursive components
MEDIUM IMPACT
Recursive components impact rendering performance by increasing DOM depth and triggering multiple layout calculations during recursive rendering.
<template> <TreeNode :node="rootNode" /> </template> <script setup> import { reactive } from 'vue' import TreeNode from './TreeNode.vue' const rootNode = reactive({ id: 1, children: [/* large nested data */] }) </script> <!-- TreeNode.vue --> <script setup> defineOptions({ name: 'TreeNode' }) const props = defineProps({ node: Object }) </script> <template> <div> <span>{{ node.id }}</span> <template v-if="node.children && node.children.length"> <TreeNode v-for="child in node.children" :key="child.id" :node="child" /> </template> </div> </template>
<template> <TreeNode :node="rootNode" /> </template> <script setup> import { reactive } from 'vue' import TreeNode from './TreeNode.vue' const rootNode = reactive({ id: 1, children: [/* large nested data */] }) </script> <!-- TreeNode.vue --> <script setup> defineOptions({ name: 'TreeNode' }) const props = defineProps({ node: Object }) </script> <template> <div> <span>{{ node.id }}</span> <TreeNode v-for="child in node.children" :key="child.id" :node="child" /> </div> </template>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Deep recursive rendering without conditions | High (many nested nodes) | High (one per node) | High (complex paint) | [X] Bad |
| Recursive rendering with conditional checks | Medium (skips empty nodes) | Medium (fewer reflows) | Medium (simpler paint) | [!] OK |