MCPcopy
hub / github.com/vuejs/core / renderList

Function renderList

packages/runtime-core/src/helpers/renderList.ts:61–126  ·  view source on GitHub ↗
(
  source: any,
  renderItem: (...args: any[]) => VNodeChild,
  cache?: any[],
  index?: number,
)

Source from the content-addressed store, hash-verified

59 * Actual implementation
60 */
61export function renderList(
62 source: any,
63 renderItem: (...args: any[]) => VNodeChild,
64 cache?: any[],
65 index?: number,
66): VNodeChild[] {
67 let ret: VNodeChild[]
68 const cached = (cache && cache[index!]) as VNode[] | undefined
69 const sourceIsArray = isArray(source)
70
71 if (sourceIsArray || isString(source)) {
72 const sourceIsReactiveArray = sourceIsArray && isReactive(source)
73 let needsWrap = false
74 let isReadonlySource = false
75 if (sourceIsReactiveArray) {
76 needsWrap = !isShallow(source)
77 isReadonlySource = isReadonly(source)
78 source = shallowReadArray(source)
79 }
80 ret = new Array(source.length)
81 for (let i = 0, l = source.length; i < l; i++) {
82 ret[i] = renderItem(
83 needsWrap
84 ? isReadonlySource
85 ? toReadonly(toReactive(source[i]))
86 : toReactive(source[i])
87 : source[i],
88 i,
89 undefined,
90 cached && cached[i],
91 )
92 }
93 } else if (typeof source === 'number') {
94 if (__DEV__ && (!Number.isInteger(source) || source < 0)) {
95 warn(
96 `The v-for range expects a positive integer value but got ${source}.`,
97 )
98 ret = []
99 } else {
100 ret = new Array(source)
101 for (let i = 0; i < source; i++) {
102 ret[i] = renderItem(i + 1, i, undefined, cached && cached[i])
103 }
104 }
105 } else if (isObject(source)) {
106 if (source[Symbol.iterator as any]) {
107 ret = Array.from(source as Iterable<any>, (item, i) =>
108 renderItem(item, i, undefined, cached && cached[i]),
109 )
110 } else {
111 const keys = Object.keys(source)
112 ret = new Array(keys.length)
113 for (let i = 0, l = keys.length; i < l; i++) {
114 const key = keys[i]
115 ret[i] = renderItem(source[key], key, i, cached && cached[i])
116 }
117 }
118 } else {

Callers 6

renderFnFunction · 0.90
renderList.spec.tsFile · 0.90
setupFunction · 0.85
renderFunction · 0.85
renderFunction · 0.85
setupFunction · 0.85

Calls 9

isStringFunction · 0.90
isReactiveFunction · 0.90
isShallowFunction · 0.90
isReadonlyFunction · 0.90
shallowReadArrayFunction · 0.90
toReadonlyFunction · 0.90
toReactiveFunction · 0.90
warnFunction · 0.90
isObjectFunction · 0.90

Tested by 5

renderFnFunction · 0.72
setupFunction · 0.68
renderFunction · 0.68
renderFunction · 0.68
setupFunction · 0.68