UNPKG

vue

Version:

Reactive, component-oriented view layer for modern web interfaces.

61 lines (55 loc) 1.43 kB
/* @flow */ import { cloneVNode, cloneVNodes } from 'core/vdom/vnode' /** * Runtime helper for rendering static trees. */ export function renderStatic ( index: number, isInFor?: boolean ): VNode | Array<VNode> { let tree = this._staticTrees[index] // if has already-rendered static tree and not inside v-for, // we can reuse the same tree by doing a shallow clone. if (tree && !isInFor) { return Array.isArray(tree) ? cloneVNodes(tree) : cloneVNode(tree) } // otherwise, render a fresh tree. tree = this._staticTrees[index] = this.$options.staticRenderFns[index].call(this._renderProxy) markStatic(tree, `__static__${index}`, false) return tree } /** * Runtime helper for v-once. * Effectively it means marking the node as static with a unique key. */ export function markOnce ( tree: VNode | Array<VNode>, index: number, key: string ) { markStatic(tree, `__once__${index}${key ? `_${key}` : ``}`, true) return tree } function markStatic ( tree: VNode | Array<VNode>, key: string, isOnce: boolean ) { if (Array.isArray(tree)) { for (let i = 0; i < tree.length; i++) { if (tree[i] && typeof tree[i] !== 'string') { markStaticNode(tree[i], `${key}_${i}`, isOnce) } } } else { markStaticNode(tree, key, isOnce) } } function markStaticNode (node, key, isOnce) { node.isStatic = true node.key = key node.isOnce = isOnce }